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 2019/09/28 14:46:10 UTC

[hbase-site] branch asf-site updated: Published site at ef79b40e6e0705fa925f688d12840f32bd0e453a.

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 c924afd  Published site at ef79b40e6e0705fa925f688d12840f32bd0e453a.
c924afd is described below

commit c924afdf293340650523b9a0c752d96faabafc29
Author: jenkins <bu...@apache.org>
AuthorDate: Sat Sep 28 14:45:57 2019 +0000

    Published site at ef79b40e6e0705fa925f688d12840f32bd0e453a.
---
 acid-semantics.html                                |    2 +-
 apache_hbase_reference_guide.pdf                   |    4 +-
 apidocs/org/apache/hadoop/hbase/ChoreService.html  |    6 +-
 .../org/apache/hadoop/hbase/ChoreService.html      |  486 +-
 book.html                                          |    2 +-
 bulk-loads.html                                    |    2 +-
 checkstyle-aggregate.html                          |  200 +-
 checkstyle.rss                                     |   56 +-
 coc.html                                           |    2 +-
 dependencies.html                                  |    2 +-
 dependency-convergence.html                        |    2 +-
 dependency-info.html                               |    2 +-
 dependency-management.html                         |    2 +-
 devapidocs/constant-values.html                    |    4 +-
 .../ChoreService.ChoreServiceThreadFactory.html    |   12 +-
 .../org/apache/hadoop/hbase/ChoreService.html      |   34 +-
 .../master/HMaster.MasterStoppedException.html     |    4 +-
 .../master/HMaster.TableDescriptorGetter.html      |    4 +-
 .../org/apache/hadoop/hbase/master/HMaster.html    |  302 +-
 ...TransitRegionStateProcedure.TransitionType.html |   10 +-
 .../assignment/TransitRegionStateProcedure.html    |   38 +-
 .../ChoreService.ChoreServiceThreadFactory.html    |  486 +-
 .../org/apache/hadoop/hbase/ChoreService.html      |  486 +-
 .../src-html/org/apache/hadoop/hbase/Version.html  |    4 +-
 .../master/HMaster.InitializationMonitor.html      | 4777 ++++++++++----------
 .../master/HMaster.MasterStoppedException.html     | 4777 ++++++++++----------
 .../hbase/master/HMaster.RedirectServlet.html      | 4777 ++++++++++----------
 .../master/HMaster.TableDescriptorGetter.html      | 4777 ++++++++++----------
 .../org/apache/hadoop/hbase/master/HMaster.html    | 4777 ++++++++++----------
 ...TransitRegionStateProcedure.TransitionType.html |  363 +-
 .../assignment/TransitRegionStateProcedure.html    |  363 +-
 downloads.html                                     |    2 +-
 export_control.html                                |    2 +-
 index.html                                         |    2 +-
 issue-tracking.html                                |    2 +-
 mail-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 +-
 project-summary.html                               |    2 +-
 pseudo-distributed.html                            |    2 +-
 replication.html                                   |    2 +-
 resources.html                                     |    2 +-
 source-repository.html                             |    2 +-
 sponsors.html                                      |    2 +-
 supportingprojects.html                            |    2 +-
 team-list.html                                     |    2 +-
 testdevapidocs/allclasses-frame.html               |    4 +-
 testdevapidocs/allclasses-noframe.html             |    4 +-
 testdevapidocs/constant-values.html                |   26 +
 testdevapidocs/index-all.html                      |   42 +-
 .../hadoop/hbase/class-use/HBaseClassTestRule.html |   28 +-
 .../hbase/master/AbstractTestRestartCluster.html   |    2 +-
 .../TestMasterOperationsForRegionReplicas.html     |   36 +-
 .../hadoop/hbase/master/TestRegionState.html       |    4 +-
 .../hadoop/hbase/master/TestRollingRestart.html    |    8 +-
 ...html => TestRoundRobinAssignmentOnRestart.html} |   92 +-
 ...undRobinAssignmentOnRestartSplitWithoutZk.html} |   58 +-
 .../TestServerCrashProcedureCarryingMetaStuck.html |    4 +-
 .../class-use/AbstractTestRestartCluster.html      |    4 +-
 ...html => TestRoundRobinAssignmentOnRestart.html} |   26 +-
 ...undRobinAssignmentOnRestartSplitWithoutZk.html} |   20 +-
 .../apache/hadoop/hbase/master/package-frame.html  |    4 +-
 .../hadoop/hbase/master/package-summary.html       |   14 +-
 .../apache/hadoop/hbase/master/package-tree.html   |    4 +-
 .../apache/hadoop/hbase/master/package-use.html    |    2 +-
 .../hadoop/hbase/master/procedure/TestSCPBase.html |   73 +-
 testdevapidocs/overview-tree.html                  |    4 +-
 .../TestMasterOperationsForRegionReplicas.html     |  678 ++-
 .../master/TestRetainAssignmentOnRestart.html      |  219 -
 .../master/TestRoundRobinAssignmentOnRestart.html  |  189 +
 ...undRobinAssignmentOnRestartSplitWithoutZk.html} |   23 +-
 .../hadoop/hbase/master/procedure/TestSCPBase.html |  284 +-
 .../TestRegionReplicasWithRestartScenarios.html    |    2 +-
 78 files changed, 14294 insertions(+), 14363 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index d1722b2..3eda13a 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -443,7 +443,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-28</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 484138e..10fe9641 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20190927144404+00'00')
-/CreationDate (D:20190927144404+00'00')
+/ModDate (D:20190928144253+00'00')
+/CreationDate (D:20190928144253+00'00')
 >>
 endobj
 2 0 obj
diff --git a/apidocs/org/apache/hadoop/hbase/ChoreService.html b/apidocs/org/apache/hadoop/hbase/ChoreService.html
index f9e1875..ee916f3 100644
--- a/apidocs/org/apache/hadoop/hbase/ChoreService.html
+++ b/apidocs/org/apache/hadoop/hbase/ChoreService.html
@@ -298,7 +298,7 @@ public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.324">shutdown</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.328">shutdown</a>()</pre>
 <div class="block">shutdown the service. Any chores that are scheduled for execution will be cancelled. Any chores
  in the middle of execution will be interrupted and shutdown. This service will be unusable
  after this method has been called (i.e. future scheduling attempts will fail).</div>
@@ -310,7 +310,7 @@ public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isShutdown</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.338">isShutdown</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.342">isShutdown</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true when the service is shutdown and thus cannot be used anymore</dd>
@@ -323,7 +323,7 @@ public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isTerminated</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.345">isTerminated</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.349">isTerminated</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true when the service is shutdown and all threads have terminated</dd>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/ChoreService.html b/apidocs/src-html/org/apache/hadoop/hbase/ChoreService.html
index 84f7531..b70b24d 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/ChoreService.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/ChoreService.html
@@ -158,247 +158,251 @@
 <span class="sourceLineNo">150</span>    }<a name="line.150"></a>
 <span class="sourceLineNo">151</span><a name="line.151"></a>
 <span class="sourceLineNo">152</span>    try {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      chore.setChoreServicer(this);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      ScheduledFuture&lt;?&gt; future =<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          scheduler.scheduleAtFixedRate(chore, chore.getInitialDelay(), chore.getPeriod(),<a name="line.155"></a>
-<span class="sourceLineNo">156</span>            chore.getTimeUnit());<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      scheduledChores.put(chore, future);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      return true;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    } catch (Exception exception) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      if (LOG.isInfoEnabled()) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        LOG.info("Could not successfully schedule chore: " + chore.getName());<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      return false;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * @param chore The Chore to be rescheduled. If the chore is not scheduled with this ChoreService<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   *          yet then this call is equivalent to a call to scheduleChore.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  private synchronized void rescheduleChore(ScheduledChore chore) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    if (chore == null) return;<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>    if (scheduledChores.containsKey(chore)) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      ScheduledFuture&lt;?&gt; future = scheduledChores.get(chore);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      future.cancel(false);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    scheduleChore(chore);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>  @InterfaceAudience.Private<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  @Override<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  public synchronized void cancelChore(ScheduledChore chore) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    cancelChore(chore, true);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>  @InterfaceAudience.Private<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  public synchronized void cancelChore(ScheduledChore chore, boolean mayInterruptIfRunning) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    if (chore != null &amp;&amp; scheduledChores.containsKey(chore)) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      ScheduledFuture&lt;?&gt; future = scheduledChores.get(chore);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      future.cancel(mayInterruptIfRunning);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      scheduledChores.remove(chore);<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>      // Removing a chore that was missing its start time means it may be possible<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      // to reduce the number of threads<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      if (choresMissingStartTime.containsKey(chore)) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        choresMissingStartTime.remove(chore);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        requestCorePoolDecrease();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  @InterfaceAudience.Private<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  @Override<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  public synchronized boolean isChoreScheduled(ScheduledChore chore) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    return chore != null &amp;&amp; scheduledChores.containsKey(chore)<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        &amp;&amp; !scheduledChores.get(chore).isDone();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  }<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>  @InterfaceAudience.Private<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  @Override<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  public synchronized boolean triggerNow(ScheduledChore chore) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    if (chore == null) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      return false;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    } else {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      rescheduleChore(chore);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      return true;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>  /**<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @return number of chores that this service currently has scheduled<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   */<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  int getNumberOfScheduledChores() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    return scheduledChores.size();<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  /**<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * @return number of chores that this service currently has scheduled that are missing their<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   *         scheduled start time<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   */<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  int getNumberOfChoresMissingStartTime() {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    return choresMissingStartTime.size();<a name="line.234"></a>
-<span class="sourceLineNo">235</span>  }<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>  /**<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @return number of threads in the core pool of the underlying ScheduledThreadPoolExecutor<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  int getCorePoolSize() {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    return scheduler.getCorePoolSize();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * Custom ThreadFactory used with the ScheduledThreadPoolExecutor so that all the threads are<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * daemon threads, and thus, don't prevent the JVM from shutting down<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  static class ChoreServiceThreadFactory implements ThreadFactory {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    private final String threadPrefix;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    private final static String THREAD_NAME_SUFFIX = ".Chore.";<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    private AtomicInteger threadNumber = new AtomicInteger(1);<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>     * @param threadPrefix The prefix given to all threads created by this factory<a name="line.254"></a>
-<span class="sourceLineNo">255</span>     */<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    public ChoreServiceThreadFactory(final String threadPrefix) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      this.threadPrefix = threadPrefix;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>    @Override<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    public Thread newThread(Runnable r) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      Thread thread =<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          new Thread(r, threadPrefix + THREAD_NAME_SUFFIX + threadNumber.getAndIncrement());<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      thread.setDaemon(true);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      return thread;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * Represents a request to increase the number of core pool threads. Typically a request<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * originates from the fact that the current core pool size is not sufficient to service all of<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * the currently running Chores<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * @return true when the request to increase the core pool size succeeds<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   */<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  private synchronized boolean requestCorePoolIncrease() {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    // There is no point in creating more threads than scheduledChores.size since scheduled runs<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    // of the same chore cannot run concurrently (i.e. happen-before behavior is enforced<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    // amongst occurrences of the same chore).<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    if (scheduler.getCorePoolSize() &lt; scheduledChores.size()) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      scheduler.setCorePoolSize(scheduler.getCorePoolSize() + 1);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      printChoreServiceDetails("requestCorePoolIncrease");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      return true;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    return false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>  /**<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * Represents a request to decrease the number of core pool threads. Typically a request<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * originates from the fact that the current core pool size is more than sufficient to service the<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * running Chores.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  private synchronized void requestCorePoolDecrease() {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    if (scheduler.getCorePoolSize() &gt; MIN_CORE_POOL_SIZE) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      scheduler.setCorePoolSize(scheduler.getCorePoolSize() - 1);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      printChoreServiceDetails("requestCorePoolDecrease");<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>  @InterfaceAudience.Private<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  @Override<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  public synchronized void onChoreMissedStartTime(ScheduledChore chore) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    if (chore == null || !scheduledChores.containsKey(chore)) return;<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>    // If the chore has not caused an increase in the size of the core thread pool then request an<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    // increase. This allows each chore missing its start time to increase the core pool size by<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    // at most 1.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    if (!choresMissingStartTime.containsKey(chore) || !choresMissingStartTime.get(chore)) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      choresMissingStartTime.put(chore, requestCorePoolIncrease());<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    // Must reschedule the chore to prevent unnecessary delays of chores in the scheduler. If<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    // the chore is NOT rescheduled, future executions of this chore will be delayed more and<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    // more on each iteration. This hurts us because the ScheduledThreadPoolExecutor allocates<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    // idle threads to chores based on how delayed they are.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    rescheduleChore(chore);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    printChoreDetails("onChoreMissedStartTime", chore);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  /**<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * shutdown the service. Any chores that are scheduled for execution will be cancelled. Any chores<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * in the middle of execution will be interrupted and shutdown. This service will be unusable<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * after this method has been called (i.e. future scheduling attempts will fail).<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  public synchronized void shutdown() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    scheduler.shutdownNow();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    if (LOG.isInfoEnabled()) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      LOG.info("Chore service for: " + coreThreadPoolPrefix + " had " + scheduledChores.keySet()<a name="line.327"></a>
-<span class="sourceLineNo">328</span>          + " on shutdown");<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    cancelAllChores(true);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    scheduledChores.clear();<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    choresMissingStartTime.clear();<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  /**<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * @return true when the service is shutdown and thus cannot be used anymore<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public boolean isShutdown() {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    return scheduler.isShutdown();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span>  /**<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @return true when the service is shutdown and all threads have terminated<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  public boolean isTerminated() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    return scheduler.isTerminated();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private void cancelAllChores(final boolean mayInterruptIfRunning) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    ArrayList&lt;ScheduledChore&gt; choresToCancel = new ArrayList&lt;&gt;(scheduledChores.keySet().size());<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    // Build list of chores to cancel so we can iterate through a set that won't change<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    // as chores are cancelled. If we tried to cancel each chore while iterating through<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    // keySet the results would be undefined because the keySet would be changing<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    for (ScheduledChore chore : scheduledChores.keySet()) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      choresToCancel.add(chore);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    for (ScheduledChore chore : choresToCancel) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      cancelChore(chore, mayInterruptIfRunning);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    choresToCancel.clear();<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * Prints a summary of important details about the chore. Used for debugging purposes<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   */<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  private void printChoreDetails(final String header, ScheduledChore chore) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    LinkedHashMap&lt;String, String&gt; output = new LinkedHashMap&lt;&gt;();<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    output.put(header, "");<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    output.put("Chore name: ", chore.getName());<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    output.put("Chore period: ", Integer.toString(chore.getPeriod()));<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    output.put("Chore timeBetweenRuns: ", Long.toString(chore.getTimeBetweenRuns()));<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>    for (Entry&lt;String, String&gt; entry : output.entrySet()) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      if (LOG.isTraceEnabled()) LOG.trace(entry.getKey() + entry.getValue());<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  /**<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * Prints a summary of important details about the service. Used for debugging purposes<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   */<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  private void printChoreServiceDetails(final String header) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    LinkedHashMap&lt;String, String&gt; output = new LinkedHashMap&lt;&gt;();<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    output.put(header, "");<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    output.put("ChoreService corePoolSize: ", Integer.toString(getCorePoolSize()));<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    output.put("ChoreService scheduledChores: ", Integer.toString(getNumberOfScheduledChores()));<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    output.put("ChoreService missingStartTimeCount: ",<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      Integer.toString(getNumberOfChoresMissingStartTime()));<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>    for (Entry&lt;String, String&gt; entry : output.entrySet()) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      if (LOG.isTraceEnabled()) LOG.trace(entry.getKey() + entry.getValue());<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>}<a name="line.393"></a>
+<span class="sourceLineNo">153</span>      if (chore.getPeriod() &lt;= 0) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>        LOG.info("The period is {} seconds, {} is disabled", chore.getPeriod(), chore.getName());<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        return false;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      chore.setChoreServicer(this);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      ScheduledFuture&lt;?&gt; future =<a name="line.158"></a>
+<span class="sourceLineNo">159</span>          scheduler.scheduleAtFixedRate(chore, chore.getInitialDelay(), chore.getPeriod(),<a name="line.159"></a>
+<span class="sourceLineNo">160</span>            chore.getTimeUnit());<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      scheduledChores.put(chore, future);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      return true;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    } catch (Exception exception) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      if (LOG.isInfoEnabled()) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        LOG.info("Could not successfully schedule chore: " + chore.getName());<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      return false;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>  /**<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * @param chore The Chore to be rescheduled. If the chore is not scheduled with this ChoreService<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   *          yet then this call is equivalent to a call to scheduleChore.<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   */<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  private synchronized void rescheduleChore(ScheduledChore chore) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    if (chore == null) return;<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    if (scheduledChores.containsKey(chore)) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      ScheduledFuture&lt;?&gt; future = scheduledChores.get(chore);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      future.cancel(false);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    scheduleChore(chore);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  @InterfaceAudience.Private<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @Override<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  public synchronized void cancelChore(ScheduledChore chore) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    cancelChore(chore, true);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  @InterfaceAudience.Private<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  @Override<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public synchronized void cancelChore(ScheduledChore chore, boolean mayInterruptIfRunning) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    if (chore != null &amp;&amp; scheduledChores.containsKey(chore)) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      ScheduledFuture&lt;?&gt; future = scheduledChores.get(chore);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      future.cancel(mayInterruptIfRunning);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      scheduledChores.remove(chore);<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>      // Removing a chore that was missing its start time means it may be possible<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      // to reduce the number of threads<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      if (choresMissingStartTime.containsKey(chore)) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        choresMissingStartTime.remove(chore);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        requestCorePoolDecrease();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  @InterfaceAudience.Private<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  public synchronized boolean isChoreScheduled(ScheduledChore chore) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    return chore != null &amp;&amp; scheduledChores.containsKey(chore)<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        &amp;&amp; !scheduledChores.get(chore).isDone();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>  @InterfaceAudience.Private<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  @Override<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  public synchronized boolean triggerNow(ScheduledChore chore) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    if (chore == null) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return false;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    } else {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      rescheduleChore(chore);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      return true;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>  /**<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @return number of chores that this service currently has scheduled<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  int getNumberOfScheduledChores() {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    return scheduledChores.size();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  /**<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * @return number of chores that this service currently has scheduled that are missing their<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   *         scheduled start time<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  int getNumberOfChoresMissingStartTime() {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return choresMissingStartTime.size();<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  /**<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @return number of threads in the core pool of the underlying ScheduledThreadPoolExecutor<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  int getCorePoolSize() {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    return scheduler.getCorePoolSize();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * Custom ThreadFactory used with the ScheduledThreadPoolExecutor so that all the threads are<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * daemon threads, and thus, don't prevent the JVM from shutting down<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  static class ChoreServiceThreadFactory implements ThreadFactory {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    private final String threadPrefix;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    private final static String THREAD_NAME_SUFFIX = ".Chore.";<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    private AtomicInteger threadNumber = new AtomicInteger(1);<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>    /**<a name="line.257"></a>
+<span class="sourceLineNo">258</span>     * @param threadPrefix The prefix given to all threads created by this factory<a name="line.258"></a>
+<span class="sourceLineNo">259</span>     */<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    public ChoreServiceThreadFactory(final String threadPrefix) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      this.threadPrefix = threadPrefix;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>    @Override<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    public Thread newThread(Runnable r) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      Thread thread =<a name="line.266"></a>
+<span class="sourceLineNo">267</span>          new Thread(r, threadPrefix + THREAD_NAME_SUFFIX + threadNumber.getAndIncrement());<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      thread.setDaemon(true);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      return thread;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  /**<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * Represents a request to increase the number of core pool threads. Typically a request<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * originates from the fact that the current core pool size is not sufficient to service all of<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * the currently running Chores<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * @return true when the request to increase the core pool size succeeds<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  private synchronized boolean requestCorePoolIncrease() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // There is no point in creating more threads than scheduledChores.size since scheduled runs<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    // of the same chore cannot run concurrently (i.e. happen-before behavior is enforced<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    // amongst occurrences of the same chore).<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    if (scheduler.getCorePoolSize() &lt; scheduledChores.size()) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      scheduler.setCorePoolSize(scheduler.getCorePoolSize() + 1);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      printChoreServiceDetails("requestCorePoolIncrease");<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      return true;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    return false;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * Represents a request to decrease the number of core pool threads. Typically a request<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * originates from the fact that the current core pool size is more than sufficient to service the<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * running Chores.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  private synchronized void requestCorePoolDecrease() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    if (scheduler.getCorePoolSize() &gt; MIN_CORE_POOL_SIZE) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      scheduler.setCorePoolSize(scheduler.getCorePoolSize() - 1);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      printChoreServiceDetails("requestCorePoolDecrease");<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>  @InterfaceAudience.Private<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @Override<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public synchronized void onChoreMissedStartTime(ScheduledChore chore) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    if (chore == null || !scheduledChores.containsKey(chore)) return;<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    // If the chore has not caused an increase in the size of the core thread pool then request an<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    // increase. This allows each chore missing its start time to increase the core pool size by<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    // at most 1.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    if (!choresMissingStartTime.containsKey(chore) || !choresMissingStartTime.get(chore)) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      choresMissingStartTime.put(chore, requestCorePoolIncrease());<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span>    // Must reschedule the chore to prevent unnecessary delays of chores in the scheduler. If<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    // the chore is NOT rescheduled, future executions of this chore will be delayed more and<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    // more on each iteration. This hurts us because the ScheduledThreadPoolExecutor allocates<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    // idle threads to chores based on how delayed they are.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    rescheduleChore(chore);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    printChoreDetails("onChoreMissedStartTime", chore);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  /**<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * shutdown the service. Any chores that are scheduled for execution will be cancelled. Any chores<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * in the middle of execution will be interrupted and shutdown. This service will be unusable<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * after this method has been called (i.e. future scheduling attempts will fail).<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  public synchronized void shutdown() {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    scheduler.shutdownNow();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    if (LOG.isInfoEnabled()) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      LOG.info("Chore service for: " + coreThreadPoolPrefix + " had " + scheduledChores.keySet()<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          + " on shutdown");<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    cancelAllChores(true);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    scheduledChores.clear();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    choresMissingStartTime.clear();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  /**<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * @return true when the service is shutdown and thus cannot be used anymore<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  public boolean isShutdown() {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    return scheduler.isShutdown();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>  /**<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @return true when the service is shutdown and all threads have terminated<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   */<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  public boolean isTerminated() {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    return scheduler.isTerminated();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  private void cancelAllChores(final boolean mayInterruptIfRunning) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    ArrayList&lt;ScheduledChore&gt; choresToCancel = new ArrayList&lt;&gt;(scheduledChores.keySet().size());<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    // Build list of chores to cancel so we can iterate through a set that won't change<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    // as chores are cancelled. If we tried to cancel each chore while iterating through<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    // keySet the results would be undefined because the keySet would be changing<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    for (ScheduledChore chore : scheduledChores.keySet()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      choresToCancel.add(chore);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    for (ScheduledChore chore : choresToCancel) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      cancelChore(chore, mayInterruptIfRunning);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    choresToCancel.clear();<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  /**<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * Prints a summary of important details about the chore. Used for debugging purposes<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  private void printChoreDetails(final String header, ScheduledChore chore) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    LinkedHashMap&lt;String, String&gt; output = new LinkedHashMap&lt;&gt;();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    output.put(header, "");<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    output.put("Chore name: ", chore.getName());<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    output.put("Chore period: ", Integer.toString(chore.getPeriod()));<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    output.put("Chore timeBetweenRuns: ", Long.toString(chore.getTimeBetweenRuns()));<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>    for (Entry&lt;String, String&gt; entry : output.entrySet()) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      if (LOG.isTraceEnabled()) LOG.trace(entry.getKey() + entry.getValue());<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
+<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">382</span>  /**<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * Prints a summary of important details about the service. Used for debugging purposes<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   */<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  private void printChoreServiceDetails(final String header) {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    LinkedHashMap&lt;String, String&gt; output = new LinkedHashMap&lt;&gt;();<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    output.put(header, "");<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    output.put("ChoreService corePoolSize: ", Integer.toString(getCorePoolSize()));<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    output.put("ChoreService scheduledChores: ", Integer.toString(getNumberOfScheduledChores()));<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    output.put("ChoreService missingStartTimeCount: ",<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      Integer.toString(getNumberOfChoresMissingStartTime()));<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>    for (Entry&lt;String, String&gt; entry : output.entrySet()) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      if (LOG.isTraceEnabled()) LOG.trace(entry.getKey() + entry.getValue());<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
+<span class="sourceLineNo">397</span>}<a name="line.397"></a>
 
 
 
diff --git a/book.html b/book.html
index 284dd63..6f7fd59 100644
--- a/book.html
+++ b/book.html
@@ -43140,7 +43140,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2019-09-27 14:32:07 UTC
+Last updated 2019-09-28 14:32:11 UTC
 </div>
 </div>
 </body>
diff --git a/bulk-loads.html b/bulk-loads.html
index be55c95..8765c62 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -148,7 +148,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-28</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 8e4a678..50e6dc6 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -8214,12 +8214,12 @@
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>639</td>
+<td>640</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>2921</td>
+<td>2920</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>misc</td>
@@ -8994,25 +8994,25 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>172</td></tr>
+<td>176</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>302</td></tr>
+<td>306</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>374</td></tr>
+<td>378</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>390</td></tr></table></div>
+<td>394</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ClassFinder.java">org/apache/hadoop/hbase/ClassFinder.java</h3>
 <table border="0" class="table table-striped">
@@ -18091,7 +18091,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 61 has parse error. Details: no viable alternative at input '&lt;Pair&lt;' while parsing HTML_ELEMENT</td>
 <td>78</td></tr></table></div>
 <div class="section">
@@ -46374,541 +46374,541 @@
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1452</td></tr>
+<td>1447</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>1453</td></tr>
+<td>1448</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1717</td></tr>
+<td>1712</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1738</td></tr>
+<td>1733</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1755</td></tr>
+<td>1750</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1970</td></tr>
+<td>1965</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1974</td></tr>
+<td>1969</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1976</td></tr>
+<td>1971</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1977</td></tr>
+<td>1972</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1980</td></tr>
+<td>1975</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1981</td></tr>
+<td>1976</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1983</td></tr>
+<td>1978</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>1985</td></tr>
+<td>1980</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1986</td></tr>
+<td>1981</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>1987</td></tr>
+<td>1982</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 116).</td>
-<td>2015</td></tr>
+<td>2010</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
-<td>2017</td></tr>
+<td>2012</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2227</td></tr>
+<td>2222</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2229</td></tr>
+<td>2224</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2231</td></tr>
+<td>2226</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2237</td></tr>
+<td>2232</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2238</td></tr>
+<td>2233</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2240</td></tr>
+<td>2235</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2242</td></tr>
+<td>2237</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2243</td></tr>
+<td>2238</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2245</td></tr>
+<td>2240</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2247</td></tr>
+<td>2242</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2248</td></tr>
+<td>2243</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2249</td></tr>
+<td>2244</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2262</td></tr>
+<td>2257</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2264</td></tr>
+<td>2259</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2266</td></tr>
+<td>2261</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2267</td></tr>
+<td>2262</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2268</td></tr>
+<td>2263</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2270</td></tr>
+<td>2265</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2272</td></tr>
+<td>2267</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2273</td></tr>
+<td>2268</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2275</td></tr>
+<td>2270</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2277</td></tr>
+<td>2272</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2278</td></tr>
+<td>2273</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2279</td></tr>
+<td>2274</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2362</td></tr>
+<td>2357</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2364</td></tr>
+<td>2359</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2370</td></tr>
+<td>2365</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2371</td></tr>
+<td>2366</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>2372</td></tr>
+<td>2367</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 16, expected level should be one of the following: 18, 20.</td>
-<td>2379</td></tr>
+<td>2374</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 14, expected level should be one of the following: 16, 18.</td>
-<td>2381</td></tr>
+<td>2376</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>2382</td></tr>
+<td>2377</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>2383</td></tr>
+<td>2378</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>2384</td></tr>
+<td>2379</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>2385</td></tr>
+<td>2380</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2386</td></tr>
+<td>2381</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2388</td></tr>
+<td>2383</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2395</td></tr>
+<td>2390</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2396</td></tr>
+<td>2391</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2398</td></tr>
+<td>2393</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2400</td></tr>
+<td>2395</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2401</td></tr>
+<td>2396</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2403</td></tr>
+<td>2398</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2405</td></tr>
+<td>2400</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2406</td></tr>
+<td>2401</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2407</td></tr>
+<td>2402</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2417</td></tr>
+<td>2412</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2419</td></tr>
+<td>2414</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2421</td></tr>
+<td>2416</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2431</td></tr>
+<td>2426</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2432</td></tr>
+<td>2427</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2434</td></tr>
+<td>2429</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2436</td></tr>
+<td>2431</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2437</td></tr>
+<td>2432</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2439</td></tr>
+<td>2434</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2441</td></tr>
+<td>2436</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2442</td></tr>
+<td>2437</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2443</td></tr>
+<td>2438</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2506</td></tr>
+<td>2501</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2510</td></tr>
+<td>2505</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2512</td></tr>
+<td>2507</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>2514</td></tr>
+<td>2509</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2515</td></tr>
+<td>2510</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2516</td></tr>
+<td>2511</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2981</td></tr>
+<td>2976</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>3157</td></tr>
+<td>3152</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>3159</td></tr>
+<td>3154</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>3271</td></tr>
+<td>3266</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
-<td>3301</td></tr>
+<td>3296</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3308</td></tr>
+<td>3303</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>3313</td></tr>
+<td>3308</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>3342</td></tr>
+<td>3337</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
-<td>3440</td></tr></table></div>
+<td>3435</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.HMasterCommandLine.java">org/apache/hadoop/hbase/master/HMasterCommandLine.java</h3>
 <table border="0" class="table table-striped">
@@ -48630,13 +48630,13 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>167</td></tr>
+<td>165</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>335</td></tr></table></div>
+<td>315</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.TestMasterStatusServlet.java">org/apache/hadoop/hbase/master/TestMasterStatusServlet.java</h3>
 <table border="0" class="table table-striped">
@@ -92796,7 +92796,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-28</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/checkstyle.rss b/checkstyle.rss
index 8d66eed..18a60ca 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -6122,6 +6122,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestRoundRobinAssignmentOnRestartSplitWithoutZk.java">org/apache/hadoop/hbase/master/TestRoundRobinAssignmentOnRestartSplitWithoutZk.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.SoftObjectPool.java">org/apache/hadoop/hbase/util/SoftObjectPool.java</a>
                 </td>
                 <td>
@@ -10686,20 +10700,6 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestRetainAssignmentOnRestartSplitWithoutZk.java">org/apache/hadoop/hbase/master/TestRetainAssignmentOnRestartSplitWithoutZk.java</a>
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  0
-                </td>
-              </tr>
-                          <tr>
-                <td>
                   <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.visibility.expression.ExpressionNode.java">org/apache/hadoop/hbase/security/visibility/expression/ExpressionNode.java</a>
                 </td>
                 <td>
@@ -45658,20 +45658,6 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestRetainAssignmentOnRestart.java">org/apache/hadoop/hbase/master/TestRetainAssignmentOnRestart.java</a>
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  0
-                </td>
-              </tr>
-                          <tr>
-                <td>
                   <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.thrift2.generated.TColumn.java">org/apache/hadoop/hbase/thrift2/generated/TColumn.java</a>
                 </td>
                 <td>
@@ -47954,6 +47940,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.TestRoundRobinAssignmentOnRestart.java">org/apache/hadoop/hbase/master/TestRoundRobinAssignmentOnRestart.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.TestMetaCache.java">org/apache/hadoop/hbase/client/TestMetaCache.java</a>
                 </td>
                 <td>
diff --git a/coc.html b/coc.html
index 3de65cb..5a0e149 100644
--- a/coc.html
+++ b/coc.html
@@ -217,7 +217,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-28</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependencies.html b/dependencies.html
index 9dfec53..172fd6d 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -289,7 +289,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-28</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 40945e6..3008c14 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -534,7 +534,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-28</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-info.html b/dependency-info.html
index 21fcc13..f1cb0be 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -170,7 +170,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-28</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-management.html b/dependency-management.html
index 6abda1e..c98b40f 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -892,7 +892,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-09-28</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 1854b32..9cb825b 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3999,14 +3999,14 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Fri Sep 27 14:39:12 UTC 2019"</code></td>
+<td class="colLast"><code>"Sat Sep 28 14:39:06 UTC 2019"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"3250a8021a16fdc78155ad0b2f65875492a64742"</code></td>
+<td class="colLast"><code>"ef79b40e6e0705fa925f688d12840f32bd0e453a"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
diff --git a/devapidocs/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html b/devapidocs/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html
index 24c59c8..dc5d783 100644
--- a/devapidocs/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html
+++ b/devapidocs/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.248">ChoreService.ChoreServiceThreadFactory</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.252">ChoreService.ChoreServiceThreadFactory</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</a></pre>
 <div class="block">Custom ThreadFactory used with the ScheduledThreadPoolExecutor so that all the threads are
@@ -216,7 +216,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockList">
 <li class="blockList">
 <h4>threadPrefix</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html#line.249">threadPrefix</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html#line.253">threadPrefix</a></pre>
 </li>
 </ul>
 <a name="THREAD_NAME_SUFFIX">
@@ -225,7 +225,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockList">
 <li class="blockList">
 <h4>THREAD_NAME_SUFFIX</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html#line.250">THREAD_NAME_SUFFIX</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html#line.254">THREAD_NAME_SUFFIX</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.ChoreService.ChoreServiceThreadFactory.THREAD_NAME_SUFFIX">Constant Field Values</a></dd>
@@ -238,7 +238,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>threadNumber</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html#line.251">threadNumber</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html#line.255">threadNumber</a></pre>
 </li>
 </ul>
 </li>
@@ -255,7 +255,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ChoreServiceThreadFactory</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html#line.256">ChoreServiceThreadFactory</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;threadPrefix)</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html#line.260">ChoreServiceThreadFactory</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;threadPrefix)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>threadPrefix</code> - The prefix given to all threads created by this factory</dd>
@@ -276,7 +276,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
 <ul class="blockListLast">
 <li class="blockList">
 <h4>newThread</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html#line.261">newThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>&nbsp;r)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html#line.265">newThread</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>&nbsp;r)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true#newThread-java.lang.Runnable-" title="class or interface in java.util.concurrent">newThread</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadFactory.html?is-external=true" title="class or interface in java.util.concurrent">ThreadFactory</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/ChoreService.html b/devapidocs/org/apache/hadoop/hbase/ChoreService.html
index 39d4652..623a384 100644
--- a/devapidocs/org/apache/hadoop/hbase/ChoreService.html
+++ b/devapidocs/org/apache/hadoop/hbase/ChoreService.html
@@ -527,7 +527,7 @@ public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.h
 <ul class="blockList">
 <li class="blockList">
 <h4>rescheduleChore</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.171">rescheduleChore</a>(<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.175">rescheduleChore</a>(<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>chore</code> - The Chore to be rescheduled. If the chore is not scheduled with this ChoreService
@@ -542,7 +542,7 @@ public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.h
 <li class="blockList">
 <h4>cancelChore</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.183">cancelChore</a>(<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</pre>
+public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.187">cancelChore</a>(<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.ChoreServicer.html#cancelChore-org.apache.hadoop.hbase.ScheduledChore-">ScheduledChore.ChoreServicer</a></code></span></div>
 <div class="block">Cancel any ongoing schedules that this chore has with the implementer of this interface.</div>
 <dl>
@@ -558,7 +558,7 @@ public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/Chor
 <li class="blockList">
 <h4>cancelChore</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.189">cancelChore</a>(<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore,
+public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.193">cancelChore</a>(<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore,
                                                    boolean&nbsp;mayInterruptIfRunning)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -573,7 +573,7 @@ public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/Chor
 <li class="blockList">
 <h4>isChoreScheduled</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.206">isChoreScheduled</a>(<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</pre>
+public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.210">isChoreScheduled</a>(<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.ChoreServicer.html#isChoreScheduled-org.apache.hadoop.hbase.ScheduledChore-">isChoreScheduled</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.ChoreServicer.html" title="interface in org.apache.hadoop.hbase">ScheduledChore.ChoreServicer</a></code></dd>
@@ -589,7 +589,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/C
 <li class="blockList">
 <h4>triggerNow</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.213">triggerNow</a>(<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</pre>
+public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.217">triggerNow</a>(<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.ChoreServicer.html#triggerNow-org.apache.hadoop.hbase.ScheduledChore-">ScheduledChore.ChoreServicer</a></code></span></div>
 <div class="block">This method tries to execute the chore immediately. If the chore is executing at the time of
  this call, the chore will begin another execution as soon as the current execution finishes
@@ -609,7 +609,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/C
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumberOfScheduledChores</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.225">getNumberOfScheduledChores</a>()</pre>
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.229">getNumberOfScheduledChores</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>number of chores that this service currently has scheduled</dd>
@@ -622,7 +622,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/C
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumberOfChoresMissingStartTime</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.233">getNumberOfChoresMissingStartTime</a>()</pre>
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.237">getNumberOfChoresMissingStartTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>number of chores that this service currently has scheduled that are missing their
@@ -636,7 +636,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/C
 <ul class="blockList">
 <li class="blockList">
 <h4>getCorePoolSize</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.240">getCorePoolSize</a>()</pre>
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.244">getCorePoolSize</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>number of threads in the core pool of the underlying ScheduledThreadPoolExecutor</dd>
@@ -649,7 +649,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/C
 <ul class="blockList">
 <li class="blockList">
 <h4>requestCorePoolIncrease</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.275">requestCorePoolIncrease</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.279">requestCorePoolIncrease</a>()</pre>
 <div class="block">Represents a request to increase the number of core pool threads. Typically a request
  originates from the fact that the current core pool size is not sufficient to service all of
  the currently running Chores</div>
@@ -665,7 +665,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/C
 <ul class="blockList">
 <li class="blockList">
 <h4>requestCorePoolDecrease</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.292">requestCorePoolDecrease</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.296">requestCorePoolDecrease</a>()</pre>
 <div class="block">Represents a request to decrease the number of core pool threads. Typically a request
  originates from the fact that the current core pool size is more than sufficient to service the
  running Chores.</div>
@@ -678,7 +678,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/C
 <li class="blockList">
 <h4>onChoreMissedStartTime</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.301">onChoreMissedStartTime</a>(<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</pre>
+public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.305">onChoreMissedStartTime</a>(<a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/ScheduledChore.ChoreServicer.html#onChoreMissedStartTime-org.apache.hadoop.hbase.ScheduledChore-">ScheduledChore.ChoreServicer</a></code></span></div>
 <div class="block">A callback that tells the implementer of this interface that one of the scheduled chores is
  missing its start time. The implication of a chore missing its start time is that the
@@ -700,7 +700,7 @@ public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/Chor
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.324">shutdown</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.328">shutdown</a>()</pre>
 <div class="block">shutdown the service. Any chores that are scheduled for execution will be cancelled. Any chores
  in the middle of execution will be interrupted and shutdown. This service will be unusable
  after this method has been called (i.e. future scheduling attempts will fail).</div>
@@ -712,7 +712,7 @@ public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/Chor
 <ul class="blockList">
 <li class="blockList">
 <h4>isShutdown</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.338">isShutdown</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.342">isShutdown</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true when the service is shutdown and thus cannot be used anymore</dd>
@@ -725,7 +725,7 @@ public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/Chor
 <ul class="blockList">
 <li class="blockList">
 <h4>isTerminated</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.345">isTerminated</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.349">isTerminated</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true when the service is shutdown and all threads have terminated</dd>
@@ -738,7 +738,7 @@ public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/Chor
 <ul class="blockList">
 <li class="blockList">
 <h4>cancelAllChores</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.349">cancelAllChores</a>(boolean&nbsp;mayInterruptIfRunning)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.353">cancelAllChores</a>(boolean&nbsp;mayInterruptIfRunning)</pre>
 </li>
 </ul>
 <a name="printChoreDetails-java.lang.String-org.apache.hadoop.hbase.ScheduledChore-">
@@ -747,7 +747,7 @@ public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/Chor
 <ul class="blockList">
 <li class="blockList">
 <h4>printChoreDetails</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.366">printChoreDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;header,
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.370">printChoreDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;header,
                                <a href="../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</pre>
 <div class="block">Prints a summary of important details about the chore. Used for debugging purposes</div>
 </li>
@@ -758,7 +758,7 @@ public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/Chor
 <ul class="blockListLast">
 <li class="blockList">
 <h4>printChoreServiceDetails</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.381">printChoreServiceDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;header)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ChoreService.html#line.385">printChoreServiceDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;header)</pre>
 <div class="block">Prints a summary of important details about the service. Used for debugging purposes</div>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
index fea969c..2cfee1f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
@@ -136,7 +136,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2862">HMaster.MasterStoppedException</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2857">HMaster.MasterStoppedException</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -205,7 +205,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MasterStoppedException</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html#line.2863">MasterStoppedException</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html#line.2858">MasterStoppedException</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
index c2017f4..d5c2ba0 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2306">HMaster.TableDescriptorGetter</a></pre>
+<pre>protected static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2301">HMaster.TableDescriptorGetter</a></pre>
 <div class="block">Implement to return TableDescriptor after pre-checks</div>
 </li>
 </ul>
@@ -150,7 +150,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>get</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html#line.2307">get</a>()
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html#line.2302">get</a>()
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
index c4c58b7..2daa070 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
@@ -2602,7 +2602,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createMetaBootstrap</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master">MasterMetaBootstrap</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1326">createMetaBootstrap</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master">MasterMetaBootstrap</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1321">createMetaBootstrap</a>()</pre>
 <div class="block"><p>
  Create a <a href="../../../../../org/apache/hadoop/hbase/master/MasterMetaBootstrap.html" title="class in org.apache.hadoop.hbase.master"><code>MasterMetaBootstrap</code></a> instance.
  </p>
@@ -2617,7 +2617,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createServerManager</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1341">createServerManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1336">createServerManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><p>
  Create a <a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master"><code>ServerManager</code></a> instance.
@@ -2637,7 +2637,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForRegionServers</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1348">waitForRegionServers</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1343">waitForRegionServers</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -2653,7 +2653,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initClusterSchemaService</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1355">initClusterSchemaService</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1350">initClusterSchemaService</a>()
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -2669,7 +2669,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initQuotaManager</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1367">initQuotaManager</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1362">initQuotaManager</a>()
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2683,7 +2683,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createQuotaSnapshotNotifier</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1373">createQuotaSnapshotNotifier</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1368">createQuotaSnapshotNotifier</a>()</pre>
 </li>
 </ul>
 <a name="isCatalogJanitorEnabled--">
@@ -2692,7 +2692,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isCatalogJanitorEnabled</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1379">isCatalogJanitorEnabled</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1374">isCatalogJanitorEnabled</a>()</pre>
 </li>
 </ul>
 <a name="isCleanerChoreEnabled--">
@@ -2701,7 +2701,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isCleanerChoreEnabled</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1384">isCleanerChoreEnabled</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1379">isCleanerChoreEnabled</a>()</pre>
 </li>
 </ul>
 <a name="getServerManager--">
@@ -2710,7 +2710,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1399">getServerManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1394">getServerManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getServerManager--">getServerManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2725,7 +2725,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterFileSystem</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1404">getMasterFileSystem</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1399">getMasterFileSystem</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterFileSystem--">getMasterFileSystem</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2740,7 +2740,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterWalManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1409">getMasterWalManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1404">getMasterWalManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterWalManager--">getMasterWalManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2755,7 +2755,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplitWALManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/SplitWALManager.html" title="class in org.apache.hadoop.hbase.master">SplitWALManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1414">getSplitWALManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/SplitWALManager.html" title="class in org.apache.hadoop.hbase.master">SplitWALManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1409">getSplitWALManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getSplitWALManager--">getSplitWALManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2770,7 +2770,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableStateManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1419">getTableStateManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1414">getTableStateManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getTableStateManager--">getTableStateManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -2785,7 +2785,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>startServiceThreads</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1430">startServiceThreads</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1425">startServiceThreads</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2799,7 +2799,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stopServiceThreads</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1492">stopServiceThreads</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1487">stopServiceThreads</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#stopServiceThreads--">HRegionServer</a></code></span></div>
 <div class="block">Wait on all threads to finish. Presumption is that all closes and stops
  have already been called.</div>
@@ -2815,7 +2815,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createProcedureExecutor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1543">createProcedureExecutor</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1538">createProcedureExecutor</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2829,7 +2829,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>startProcedureExecutor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1572">startProcedureExecutor</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1567">startProcedureExecutor</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2843,7 +2843,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>switchSnapshotCleanup</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1581">switchSnapshotCleanup</a>(boolean&nbsp;on,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1576">switchSnapshotCleanup</a>(boolean&nbsp;on,
                            boolean&nbsp;synchronous)</pre>
 <div class="block">Turn on/off Snapshot Cleanup Chore</div>
 <dl>
@@ -2858,7 +2858,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>switchSnapshotCleanup</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1591">switchSnapshotCleanup</a>(boolean&nbsp;on)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1586">switchSnapshotCleanup</a>(boolean&nbsp;on)</pre>
 </li>
 </ul>
 <a name="stopProcedureExecutor--">
@@ -2867,7 +2867,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stopProcedureExecutor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1607">stopProcedureExecutor</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1602">stopProcedureExecutor</a>()</pre>
 </li>
 </ul>
 <a name="stopChores--">
@@ -2876,7 +2876,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stopChores</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1622">stopChores</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1617">stopChores</a>()</pre>
 </li>
 </ul>
 <a name="getRemoteInetAddress-int-long-">
@@ -2885,7 +2885,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRemoteInetAddress</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1644">getRemoteInetAddress</a>(int&nbsp;port,
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1639">getRemoteInetAddress</a>(int&nbsp;port,
                                  long&nbsp;serverStartCode)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/net/UnknownHostException.html?is-external=true" title="class or interface in java.net">UnknownHostException</a></pre>
 <dl>
@@ -2902,7 +2902,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxBalancingTime</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1664">getMaxBalancingTime</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1659">getMaxBalancingTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Maximum time we should run balancer for</dd>
@@ -2915,7 +2915,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxRegionsInTransition</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1677">getMaxRegionsInTransition</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1672">getMaxRegionsInTransition</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Maximum number of regions in transition</dd>
@@ -2928,7 +2928,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balanceThrottling</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1689">balanceThrottling</a>(long&nbsp;nextBalanceStartTime,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1684">balanceThrottling</a>(long&nbsp;nextBalanceStartTime,
                                int&nbsp;maxRegionsInTransition,
                                long&nbsp;cutoffTime)</pre>
 <div class="block">It first sleep to the next balance plan start time. Meanwhile, throttling by the max
@@ -2947,7 +2947,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balance</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1720">balance</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1715">balance</a>()
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2961,7 +2961,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balance</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1724">balance</a>(boolean&nbsp;force)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1719">balance</a>(boolean&nbsp;force)
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2975,7 +2975,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>executeRegionPlansWithThrottling</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1810">executeRegionPlansWithThrottling</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1805">executeRegionPlansWithThrottling</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#executeRegionPlansWithThrottling-java.util.List-">MasterServices</a></code></span></div>
 <div class="block">Execute region plans with throttling</div>
 <dl>
@@ -2994,7 +2994,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionNormalizer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1853">getRegionNormalizer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1848">getRegionNormalizer</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getRegionNormalizer--">getRegionNormalizer</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3009,7 +3009,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>normalizeRegions</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1864">normalizeRegions</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1859">normalizeRegions</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Perform normalization of cluster (invoked by <a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.html" title="class in org.apache.hadoop.hbase.master.normalizer"><code>RegionNormalizerChore</code></a>).</div>
 <dl>
@@ -3028,7 +3028,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClientIdAuditPrefix</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1924">getClientIdAuditPrefix</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1919">getClientIdAuditPrefix</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getClientIdAuditPrefix--">getClientIdAuditPrefix</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3043,7 +3043,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>setCatalogJanitorEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1935">setCatalogJanitorEnabled</a>(boolean&nbsp;b)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1930">setCatalogJanitorEnabled</a>(boolean&nbsp;b)</pre>
 <div class="block">Switch for the background CatalogJanitor thread.
  Used for testing.  The thread will continue to run.  It will just be a noop
  if disabled.</div>
@@ -3059,7 +3059,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeRegions</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1940">mergeRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;regionsToMerge,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1935">mergeRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;regionsToMerge,
                          boolean&nbsp;forcible,
                          long&nbsp;ng,
                          long&nbsp;nonce)
@@ -3087,7 +3087,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>splitRegion</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1968">splitRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1963">splitRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                         byte[]&nbsp;splitRow,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
@@ -3115,7 +3115,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>warmUpRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1990">warmUpRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1985">warmUpRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server,
                           <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</pre>
 </li>
 </ul>
@@ -3125,7 +3125,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>move</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2003">move</a>(byte[]&nbsp;encodedRegionName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1998">move</a>(byte[]&nbsp;encodedRegionName,
                  byte[]&nbsp;destServerName)
           throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <dl>
@@ -3140,7 +3140,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2096">createTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2091">createTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
                         byte[][]&nbsp;splitKeys,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
@@ -3165,7 +3165,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createSystemTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2138">createSystemTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor)
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2133">createSystemTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#createSystemTable-org.apache.hadoop.hbase.client.TableDescriptor-">MasterServices</a></code></span></div>
 <div class="block">Create a system table using the given table definition.</div>
@@ -3186,7 +3186,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>startActiveMasterManager</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2161">startActiveMasterManager</a>(int&nbsp;infoPort)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2156">startActiveMasterManager</a>(int&nbsp;infoPort)
                                throws org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3200,7 +3200,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isCatalogTable</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2214">isCatalogTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2209">isCatalogTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="deleteTable-org.apache.hadoop.hbase.TableName-long-long-">
@@ -3209,7 +3209,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2219">deleteTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2214">deleteTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3231,7 +3231,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>truncateTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2253">truncateTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2248">truncateTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                           boolean&nbsp;preserveSplits,
                           long&nbsp;nonceGroup,
                           long&nbsp;nonce)
@@ -3255,7 +3255,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>addColumn</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2283">addColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2278">addColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                       <a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;column,
                       long&nbsp;nonceGroup,
                       long&nbsp;nonce)
@@ -3279,7 +3279,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>modifyColumn</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2311">modifyColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2306">modifyColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          <a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;descriptor,
                          long&nbsp;nonceGroup,
                          long&nbsp;nonce)
@@ -3303,7 +3303,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteColumn</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2331">deleteColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2326">deleteColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[]&nbsp;columnName,
                          long&nbsp;nonceGroup,
                          long&nbsp;nonce)
@@ -3327,7 +3327,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>enableTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2356">enableTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2351">enableTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3349,7 +3349,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>disableTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2411">disableTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2406">disableTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          long&nbsp;nonceGroup,
                          long&nbsp;nonce)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3371,7 +3371,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>modifyTable</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2446">modifyTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2441">modifyTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html" title="interface in org.apache.hadoop.hbase.master">HMaster.TableDescriptorGetter</a>&nbsp;newDescriptorGetter,
                          long&nbsp;nonceGroup,
                          long&nbsp;nonce,
@@ -3389,7 +3389,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>modifyTable</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2483">modifyTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2478">modifyTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;newDescriptor,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
@@ -3413,7 +3413,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreSnapshot</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2495">restoreSnapshot</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshotDesc,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2490">restoreSnapshot</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshotDesc,
                             long&nbsp;nonceGroup,
                             long&nbsp;nonce,
                             boolean&nbsp;restoreAcl)
@@ -3430,7 +3430,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkTableExists</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2519">checkTableExists</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2514">checkTableExists</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                               <a href="../../../../../org/apache/hadoop/hbase/TableNotFoundException.html" title="class in org.apache.hadoop.hbase">TableNotFoundException</a></pre>
 <dl>
@@ -3446,7 +3446,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkTableModifiable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2527">checkTableModifiable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2522">checkTableModifiable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                  <a href="../../../../../org/apache/hadoop/hbase/TableNotFoundException.html" title="class in org.apache.hadoop.hbase">TableNotFoundException</a>,
                                  <a href="../../../../../org/apache/hadoop/hbase/TableNotDisabledException.html" title="class in org.apache.hadoop.hbase">TableNotDisabledException</a></pre>
@@ -3470,7 +3470,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterMetricsWithoutCoprocessor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2539">getClusterMetricsWithoutCoprocessor</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2534">getClusterMetricsWithoutCoprocessor</a>()
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3484,7 +3484,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterMetricsWithoutCoprocessor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2543">getClusterMetricsWithoutCoprocessor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics [...]
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2538">getClusterMetricsWithoutCoprocessor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics [...]
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3498,7 +3498,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2611">getClusterMetrics</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2606">getClusterMetrics</a>()
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -3514,7 +3514,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2615">getClusterMetrics</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" titl [...]
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2610">getClusterMetrics</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/EnumSet.html?is-external=true" title="class or interface in java.util">EnumSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" titl [...]
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3528,7 +3528,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getBackupMasters</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2626">getBackupMasters</a>()
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2621">getBackupMasters</a>()
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3542,7 +3542,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getLoadedCoprocessors</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2679">getLoadedCoprocessors</a>()</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2674">getLoadedCoprocessors</a>()</pre>
 <div class="block">The set of loaded coprocessors is stored in a static set. Since it's
  statically allocated, it does not require that HMaster's cpHost be
  initialized prior to accessing it.</div>
@@ -3558,7 +3558,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterStartTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2686">getMasterStartTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2681">getMasterStartTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>timestamp in millis when HMaster was started.</dd>
@@ -3571,7 +3571,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterActiveTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2693">getMasterActiveTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2688">getMasterActiveTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>timestamp in millis when HMaster became the active master.</dd>
@@ -3584,7 +3584,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterFinishedInitializationTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2700">getMasterFinishedInitializationTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2695">getMasterFinishedInitializationTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>timestamp in millis when HMaster finished becoming the active master</dd>
@@ -3597,7 +3597,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumWALFiles</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2704">getNumWALFiles</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2699">getNumWALFiles</a>()</pre>
 </li>
 </ul>
 <a name="getWalProcedureStore--">
@@ -3606,7 +3606,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getWalProcedureStore</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2708">getWalProcedureStore</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2703">getWalProcedureStore</a>()</pre>
 </li>
 </ul>
 <a name="getRegionServerInfoPort-org.apache.hadoop.hbase.ServerName-">
@@ -3615,7 +3615,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerInfoPort</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2712">getRegionServerInfoPort</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2707">getRegionServerInfoPort</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
 </li>
 </ul>
 <a name="getRegionServerVersion-org.apache.hadoop.hbase.ServerName-">
@@ -3624,7 +3624,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerVersion</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2719">getRegionServerVersion</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2714">getRegionServerVersion</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getRegionServerVersion-org.apache.hadoop.hbase.ServerName-">getRegionServerVersion</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3637,7 +3637,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkIfShouldMoveSystemRegionAsync</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2726">checkIfShouldMoveSystemRegionAsync</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2721">checkIfShouldMoveSystemRegionAsync</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#checkIfShouldMoveSystemRegionAsync--">MasterServices</a></code></span></div>
 <div class="block">Called when a new RegionServer is added to the cluster.
  Checks if new server has a newer version than any existing server and will move system tables
@@ -3654,7 +3654,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterCoprocessors</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2733">getMasterCoprocessors</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2728">getMasterCoprocessors</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>array of coprocessor SimpleNames.</dd>
@@ -3667,7 +3667,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2739">abort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2734">abort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#abort-java.lang.String-java.lang.Throwable-">HRegionServer</a></code></span></div>
 <div class="block">Cause the server to exit without closing the regions it is serving, the log
@@ -3690,7 +3690,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getZooKeeper</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2764">getZooKeeper</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2759">getZooKeeper</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getZooKeeper--">Server</a></code></span></div>
 <div class="block">Gets the ZooKeeper instance for this server.</div>
 <dl>
@@ -3707,7 +3707,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterCoprocessorHost</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2769">getMasterCoprocessorHost</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2764">getMasterCoprocessorHost</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterCoprocessorHost--">getMasterCoprocessorHost</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3722,7 +3722,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterQuotaManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/MasterQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">MasterQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2774">getMasterQuotaManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/MasterQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">MasterQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2769">getMasterQuotaManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterQuotaManager--">getMasterQuotaManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3737,7 +3737,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterProcedureExecutor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2779">getMasterProcedureExecutor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2774">getMasterProcedureExecutor</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterProcedureExecutor--">getMasterProcedureExecutor</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3752,7 +3752,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2784">getServerName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2779">getServerName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getServerName--">getServerName</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></dd>
@@ -3769,7 +3769,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getAssignmentManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2789">getAssignmentManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2784">getAssignmentManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getAssignmentManager--">getAssignmentManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3784,7 +3784,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getCatalogJanitor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2794">getCatalogJanitor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2789">getCatalogJanitor</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getCatalogJanitor--">getCatalogJanitor</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3799,7 +3799,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerFatalLogBuffer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.html" title="class in org.apache.hadoop.hbase.monitoring">MemoryBoundedLogMessageBuffer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2798">getRegionServerFatalLogBuffer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.html" title="class in org.apache.hadoop.hbase.monitoring">MemoryBoundedLogMessageBuffer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2793">getRegionServerFatalLogBuffer</a>()</pre>
 </li>
 </ul>
 <a name="shutdown--">
@@ -3808,7 +3808,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2806">shutdown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2801">shutdown</a>()
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Shutdown the cluster.
  Master runs a coordinated stop of all RegionServers and then itself.</div>
@@ -3824,7 +3824,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stopMaster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2838">stopMaster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2833">stopMaster</a>()
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3838,7 +3838,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2846">stop</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2841">stop</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">Stoppable</a></code></span></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -3858,7 +3858,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkServiceStarted</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2856">checkServiceStarted</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2851">checkServiceStarted</a>()
                             throws <a href="../../../../../org/apache/hadoop/hbase/ipc/ServerNotRunningYetException.html" title="class in org.apache.hadoop.hbase.ipc">ServerNotRunningYetException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3872,7 +3872,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>checkInitialized</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2868">checkInitialized</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2863">checkInitialized</a>()
                throws <a href="../../../../../org/apache/hadoop/hbase/PleaseHoldException.html" title="class in org.apache.hadoop.hbase">PleaseHoldException</a>,
                       <a href="../../../../../org/apache/hadoop/hbase/ipc/ServerNotRunningYetException.html" title="class in org.apache.hadoop.hbase.ipc">ServerNotRunningYetException</a>,
                       <a href="../../../../../org/apache/hadoop/hbase/MasterNotRunningException.html" title="class in org.apache.hadoop.hbase">MasterNotRunningException</a>,
@@ -3892,7 +3892,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isActiveMaster</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2888">isActiveMaster</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2883">isActiveMaster</a>()</pre>
 <div class="block">Report whether this master is currently the active master or not.
  If not active master, we are parked on ZK waiting to become active.
 
@@ -3911,7 +3911,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isInitialized</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2902">isInitialized</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2897">isInitialized</a>()</pre>
 <div class="block">Report whether this master has completed with its initialization and is
  ready.  If ready, the master is also the active master.  A standby master
  is never ready.
@@ -3931,7 +3931,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isInMaintenanceMode</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2912">isInMaintenanceMode</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2907">isInMaintenanceMode</a>()</pre>
 <div class="block">Report whether this master is in maintenance mode.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -3947,7 +3947,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>setInitialized</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2917">setInitialized</a>(boolean&nbsp;isInitialized)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2912">setInitialized</a>(boolean&nbsp;isInitialized)</pre>
 </li>
 </ul>
 <a name="getInitializedEvent--">
@@ -3956,7 +3956,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getInitializedEvent</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a>&lt;?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2922">getInitializedEvent</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a>&lt;?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2917">getInitializedEvent</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getInitializedEvent--">getInitializedEvent</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -3971,7 +3971,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getAverageLoad</h4>
-<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2932">getAverageLoad</a>()</pre>
+<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2927">getAverageLoad</a>()</pre>
 <div class="block">Compute the average load across all region servers.
  Currently, this uses a very naive computation - just uses the number of
  regions being served, ignoring stats about number of requests.</div>
@@ -3987,7 +3987,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplitPlanCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2947">getSplitPlanCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2942">getSplitPlanCount</a>()</pre>
 </li>
 </ul>
 <a name="getMergePlanCount--">
@@ -3996,7 +3996,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMergePlanCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2954">getMergePlanCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2949">getMergePlanCount</a>()</pre>
 </li>
 </ul>
 <a name="registerService-com.google.protobuf.Service-">
@@ -4005,7 +4005,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>registerService</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2959">registerService</a>(com.google.protobuf.Service&nbsp;instance)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2954">registerService</a>(com.google.protobuf.Service&nbsp;instance)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#registerService-com.google.protobuf.Service-">RegionServerServices</a></code></span></div>
 <div class="block">Registers a new protocol buffer <code>Service</code> subclass as a coprocessor endpoint to be
  available for handling</div>
@@ -4029,7 +4029,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>constructMaster</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2984">constructMaster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" titl [...]
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2979">constructMaster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" titl [...]
                                       org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Utility for constructing an instance of the passed HMaster class.</div>
 <dl>
@@ -4046,7 +4046,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3003">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2998">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../org/apache/hadoop/hbase/master/HMasterCommandLine.html" title="class in org.apache.hadoop.hbase.master"><code>HMasterCommandLine</code></a></dd>
@@ -4059,7 +4059,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getHFileCleaner</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">HFileCleaner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3009">getHFileCleaner</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">HFileCleaner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3004">getHFileCleaner</a>()</pre>
 </li>
 </ul>
 <a name="getLogCleaner--">
@@ -4068,7 +4068,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogCleaner</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/LogCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">LogCleaner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3013">getLogCleaner</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/LogCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">LogCleaner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3008">getLogCleaner</a>()</pre>
 </li>
 </ul>
 <a name="getSnapshotManager--">
@@ -4077,7 +4077,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getSnapshotManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3021">getSnapshotManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3016">getSnapshotManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getSnapshotManager--">getSnapshotManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -4092,7 +4092,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterProcedureManagerHost</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure/MasterProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">MasterProcedureManagerHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3029">getMasterProcedureManagerHost</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure/MasterProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">MasterProcedureManagerHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3024">getMasterProcedureManagerHost</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterProcedureManagerHost--">getMasterProcedureManagerHost</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -4107,7 +4107,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterSchema</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ClusterSchema.html" title="interface in org.apache.hadoop.hbase.master">ClusterSchema</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3034">getClusterSchema</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ClusterSchema.html" title="interface in org.apache.hadoop.hbase.master">ClusterSchema</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3029">getClusterSchema</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getClusterSchema--">getClusterSchema</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -4122,7 +4122,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createNamespace</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3046">createNamespace</a>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;namespaceDescriptor,
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3041">createNamespace</a>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;namespaceDescriptor,
                      long&nbsp;nonceGroup,
                      long&nbsp;nonce)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4146,7 +4146,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>modifyNamespace</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3082">modifyNamespace</a>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;newNsDescriptor,
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3077">modifyNamespace</a>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;newNsDescriptor,
                      long&nbsp;nonceGroup,
                      long&nbsp;nonce)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4169,7 +4169,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteNamespace</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3120">deleteNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3115">deleteNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                      long&nbsp;nonceGroup,
                      long&nbsp;nonce)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4192,7 +4192,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getNamespace</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3155">getNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)
+<pre><a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3150">getNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get a Namespace</div>
 <dl>
@@ -4211,7 +4211,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getNamespaces</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3167">getNamespaces</a>()
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3162">getNamespaces</a>()
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get all Namespaces</div>
 <dl>
@@ -4228,7 +4228,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>listNamespaces</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3184">listNamespaces</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3179">listNamespaces</a>()
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">List namespace names</div>
 <dl>
@@ -4245,7 +4245,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>listTableNamesByNamespace</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3200">listTableNamesByNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=tru [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3195">listTableNamesByNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=tru [...]
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#listTableNamesByNamespace-java.lang.String-">MasterServices</a></code></span></div>
 <div class="block">Get list of table names by namespace</div>
@@ -4267,7 +4267,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>listTableDescriptorsByNamespace</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3206">listTableDescriptorsByNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/j [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3201">listTableDescriptorsByNamespace</a>(<a href="https://docs.oracle.com/javase/8/docs/api/j [...]
                                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#listTableDescriptorsByNamespace-java.lang.String-">MasterServices</a></code></span></div>
 <div class="block">Get list of table descriptors by namespace</div>
@@ -4289,7 +4289,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>abortProcedure</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3212">abortProcedure</a>(long&nbsp;procId,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3207">abortProcedure</a>(long&nbsp;procId,
                               boolean&nbsp;mayInterruptIfRunning)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#abortProcedure-long-boolean-">MasterServices</a></code></span></div>
@@ -4313,7 +4313,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcedures</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3228">getProcedures</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3223">getProcedures</a>()
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getProcedures--">MasterServices</a></code></span></div>
 <div class="block">Get procedures</div>
@@ -4333,7 +4333,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getLocks</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResource.html" title="class in org.apache.hadoop.hbase.procedure2">LockedResource</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3244">getLocks</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResource.html" title="class in org.apache.hadoop.hbase.procedure2">LockedResource</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3239">getLocks</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getLocks--">MasterServices</a></code></span></div>
 <div class="block">Get locks</div>
@@ -4353,7 +4353,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>listTableDescriptors</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3269">listTableDescriptors</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/St [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3264">listTableDescriptors</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/St [...]
                                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regex,
                                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tableNameList,
                                                   boolean&nbsp;includeSysTables)
@@ -4378,7 +4378,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>listTableNames</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3290">listTableNames</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="c [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3285">listTableNames</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="c [...]
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regex,
                                       boolean&nbsp;includeSysTables)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4401,7 +4401,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDescriptors</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3310">getTableDescriptors</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Li [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3305">getTableDescriptors</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Li [...]
                                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
                                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regex,
                                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tableNameList,
@@ -4422,7 +4422,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>filterTablesByRegex</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3351">filterTablesByRegex</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&nbsp;descriptors,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3346">filterTablesByRegex</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;&nbsp;descriptors,
                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a>&nbsp;pattern)</pre>
 <div class="block">Removes the table descriptors that don't match the pattern.</div>
 <dl>
@@ -4438,7 +4438,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastMajorCompactionTimestamp</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3369">getLastMajorCompactionTimestamp</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3364">getLastMajorCompactionTimestamp</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -4459,7 +4459,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastMajorCompactionTimestampForRegion</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3375">getLastMajorCompactionTimestampForRegion</a>(byte[]&nbsp;regionName)
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3370">getLastMajorCompactionTimestampForRegion</a>(byte[]&nbsp;regionName)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -4478,7 +4478,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getMobCompactionState</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3389">getMobCompactionState</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3384">getMobCompactionState</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Gets the mob file compaction state for a specific table.
  Whether all the mob files are selected is known during the compaction execution, but
  the statistic is done just before compaction starts, it is hard to know the compaction
@@ -4498,7 +4498,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>reportMobCompactionStart</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3397">reportMobCompactionStart</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3392">reportMobCompactionStart</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -4512,7 +4512,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>reportMobCompactionEnd</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3414">reportMobCompactionEnd</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3409">reportMobCompactionEnd</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -4526,7 +4526,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>requestMobCompaction</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3439">requestMobCompaction</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3434">requestMobCompaction</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&gt;&nbsp;columns,
                                  boolean&nbsp;allFiles)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4547,7 +4547,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isBalancerOn</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3450">isBalancerOn</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3445">isBalancerOn</a>()</pre>
 <div class="block">Queries the state of the <a href="../../../../../org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper"><code>LoadBalancerTracker</code></a>. If the balancer is not initialized,
  false is returned.</div>
 <dl>
@@ -4562,7 +4562,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isNormalizerOn</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3460">isNormalizerOn</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3455">isNormalizerOn</a>()</pre>
 <div class="block">Queries the state of the <a href="../../../../../org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper"><code>RegionNormalizerTracker</code></a>. If it's not initialized,
  false is returned.</div>
 </li>
@@ -4573,7 +4573,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>isSplitOrMergeEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3473">isSplitOrMergeEnabled</a>(<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client">MasterSwitchType</a>&nbsp;switchType)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3468">isSplitOrMergeEnabled</a>(<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client">MasterSwitchType</a>&nbsp;switchType)</pre>
 <div class="block">Queries the state of the <a href="../../../../../org/apache/hadoop/hbase/master/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.master"><code>SplitOrMergeTracker</code></a>. If it is not initialized,
  false is returned. If switchType is illegal, false will return.</div>
 <dl>
@@ -4592,7 +4592,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getLoadBalancerClassName</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3484">getLoadBalancerClassName</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3479">getLoadBalancerClassName</a>()</pre>
 <div class="block">Fetch the configured <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master"><code>LoadBalancer</code></a> class name. If none is set, a default is returned.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -4606,7 +4606,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionNormalizerTracker</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">RegionNormalizerTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3492">getRegionNormalizerTracker</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">RegionNormalizerTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3487">getRegionNormalizerTracker</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>RegionNormalizerTracker instance</dd>
@@ -4619,7 +4619,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplitOrMergeTracker</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.master">SplitOrMergeTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3496">getSplitOrMergeTracker</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.master">SplitOrMergeTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3491">getSplitOrMergeTracker</a>()</pre>
 </li>
 </ul>
 <a name="getLoadBalancer--">
@@ -4628,7 +4628,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getLoadBalancer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3501">getLoadBalancer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3496">getLoadBalancer</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getLoadBalancer--">getLoadBalancer</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -4643,7 +4643,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getFavoredNodesManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3506">getFavoredNodesManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3501">getFavoredNodesManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getFavoredNodesManager--">getFavoredNodesManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -4658,7 +4658,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>executePeerProcedure</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3510">executePeerProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>&lt;?&gt;&nbsp;procedure)
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3505">executePeerProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>&lt;?&gt;&nbsp;procedure)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -4672,7 +4672,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>addReplicationPeer</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3517">addReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3512">addReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId,
                                <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;peerConfig,
                                boolean&nbsp;enabled)
                         throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
@@ -4698,7 +4698,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>removeReplicationPeer</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3525">removeReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId)
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3520">removeReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId)
                            throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#removeReplicationPeer-java.lang.String-">MasterServices</a></code></span></div>
@@ -4720,7 +4720,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>enableReplicationPeer</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3531">enableReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId)
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3526">enableReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId)
                            throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#enableReplicationPeer-java.lang.String-">MasterServices</a></code></span></div>
@@ -4742,7 +4742,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>disableReplicationPeer</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3537">disableReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId)
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3532">disableReplicationPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId)
                             throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#disableReplicationPeer-java.lang.String-">MasterServices</a></code></span></div>
@@ -4764,7 +4764,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationPeerConfig</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3543">getReplicationPeerConfig</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3538">getReplicationPeerConfig</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId)
                                                throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
                                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getReplicationPeerConfig-java.lang.String-">MasterServices</a></code></span></div>
@@ -4788,7 +4788,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>updateReplicationPeerConfig</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3558">updateReplicationPeerConfig</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3553">updateReplicationPeerConfig</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId,
                                         <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;peerConfig)
                                  throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4812,7 +4812,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>listReplicationPeers</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3566">listReplicationPeers</a>(<a href="https://docs.oracle.com/ja [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3561">listReplicationPeers</a>(<a href="https://docs.oracle.com/ja [...]
                                                       throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
                                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#listReplicationPeers-java.lang.String-">MasterServices</a></code></span></div>
@@ -4836,7 +4836,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>transitReplicationPeerSyncReplicationState</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3582">transitReplicationPeerSyncReplicationState</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3577">transitReplicationPeerSyncReplicationState</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId,
                                                        <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication">SyncReplicationState</a>&nbsp;state)
                                                 throws <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
                                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4860,7 +4860,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>decommissionRegionServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3596">decommissionRegionServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3591">decommissionRegionServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
                                       boolean&nbsp;offload)
                                throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block">Mark region server(s) as decommissioned (previously called 'draining') to prevent additional
@@ -4879,7 +4879,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>listDecommissionedRegionServers</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3635">listDecommissionedRegionServers</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3630">listDecommissionedRegionServers</a>()</pre>
 <div class="block">List region servers marked as decommissioned (previously called 'draining') to not get regions
  assigned to them.</div>
 <dl>
@@ -4894,7 +4894,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>recommissionRegionServer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3644">recommissionRegionServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3639">recommissionRegionServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server,
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&nbsp;encodedRegionNames)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Remove decommission marker (previously called 'draining') from a region server to allow regions
@@ -4913,7 +4913,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getLockManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/locking/LockManager.html" title="class in org.apache.hadoop.hbase.master.locking">LockManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3683">getLockManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/locking/LockManager.html" title="class in org.apache.hadoop.hbase.master.locking">LockManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3678">getLockManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getLockManager--">getLockManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></code></dd>
@@ -4928,7 +4928,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getQuotaObserverChore</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaObserverChore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3687">getQuotaObserverChore</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaObserverChore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3682">getQuotaObserverChore</a>()</pre>
 </li>
 </ul>
 <a name="getSpaceQuotaSnapshotNotifier--">
@@ -4937,7 +4937,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getSpaceQuotaSnapshotNotifier</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3691">getSpaceQuotaSnapshotNotifier</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3686">getSpaceQuotaSnapshotNotifier</a>()</pre>
 </li>
 </ul>
 <a name="getRemoteProcedure-long-">
@@ -4946,7 +4946,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getRemoteProcedure</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#lin [...]
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#lin [...]
 </li>
 </ul>
 <a name="remoteProcedureCompleted-long-">
@@ -4955,7 +4955,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>remoteProcedureCompleted</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3705">remoteProcedureCompleted</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3700">remoteProcedureCompleted</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="remoteProcedureFailed-long-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">
@@ -4964,7 +4964,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>remoteProcedureFailed</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3713">remoteProcedureFailed</a>(long&nbsp;procId,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3708">remoteProcedureFailed</a>(long&nbsp;procId,
                                   <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a>&nbsp;error)</pre>
 </li>
 </ul>
@@ -4974,7 +4974,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationPeerManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication">ReplicationPeerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3722">getReplicationPeerManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication">ReplicationPeerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3717">getReplicationPeerManager</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getReplicationPeerManager--">MasterServices</a></code></span></div>
 <div class="block">Returns the <a href="../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication"><code>ReplicationPeerManager</code></a>.</div>
 <dl>
@@ -4989,7 +4989,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationLoad</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hba [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hba [...]
 </li>
 </ul>
 <a name="decorateMasterConfiguration-org.apache.hadoop.conf.Configuration-">
@@ -4998,7 +4998,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>decorateMasterConfiguration</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3756">decorateMasterConfiguration</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3751">decorateMasterConfiguration</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">This method modifies the master's configuration in order to inject replication-related features</div>
 </li>
 </ul>
@@ -5008,7 +5008,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getSnapshotQuotaObserverChore</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">SnapshotQuotaObserverChore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3771">getSnapshotQuotaObserverChore</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">SnapshotQuotaObserverChore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3766">getSnapshotQuotaObserverChore</a>()</pre>
 </li>
 </ul>
 <a name="getSyncReplicationReplayWALManager--">
@@ -5017,7 +5017,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getSyncReplicationReplayWALManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.html" title="class in org.apache.hadoop.hbase.master.replication">SyncReplicationReplayWALManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3776">getSyncReplicationReplayWALManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.html" title="class in org.apache.hadoop.hbase.master.replication">SyncReplicationReplayWALManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3771">getSyncReplicationReplayWALManager</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getSyncReplicationReplayWALManager--">MasterServices</a></code></span></div>
 <div class="block">Returns the <a href="../../../../../org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.html" title="class in org.apache.hadoop.hbase.master.replication"><code>SyncReplicationReplayWALManager</code></a>.</div>
 <dl>
@@ -5032,7 +5032,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getWalGroupsReplicationStatus</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationStatus.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationStatus</a>&gt;&nbsp; [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationStatus.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationStatus</a>&gt;&nbsp; [...]
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWalGroupsReplicationStatus--">getWalGroupsReplicationStatus</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></dd>
@@ -5045,7 +5045,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getHbckChore</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/HbckChore.html" title="class in org.apache.hadoop.hbase.master">HbckChore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3788">getHbckChore</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/HbckChore.html" title="class in org.apache.hadoop.hbase.master">HbckChore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3783">getHbckChore</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html
index d842111..569b4d6 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.544">TransitRegionStateProcedure.TransitionType</a>
+<pre>public static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.545">TransitRegionStateProcedure.TransitionType</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a>&gt;</pre>
 </li>
 </ul>
@@ -216,7 +216,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>ASSIGN</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.545">ASSIGN</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.546">ASSIGN</a></pre>
 </li>
 </ul>
 <a name="UNASSIGN">
@@ -225,7 +225,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>UNASSIGN</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.545">UNASSIGN</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.546">UNASSIGN</a></pre>
 </li>
 </ul>
 <a name="MOVE">
@@ -234,7 +234,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>MOVE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.545">MOVE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.546">MOVE</a></pre>
 </li>
 </ul>
 <a name="REOPEN">
@@ -243,7 +243,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>REOPEN</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.545">REOPEN</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.546">REOPEN</a></pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
index f4cfd74..19837e0 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
@@ -940,7 +940,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>attachRemoteProc</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.415">attachRemoteProc</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a>&nbsp;proc)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.416">attachRemoteProc</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a>&nbsp;proc)</pre>
 </li>
 </ul>
 <a name="unattachRemoteProc-org.apache.hadoop.hbase.master.assignment.RegionRemoteProcedureBase-">
@@ -949,7 +949,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>unattachRemoteProc</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.419">unattachRemoteProc</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a>&nbsp;proc)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.420">unattachRemoteProc</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a>&nbsp;proc)</pre>
 </li>
 </ul>
 <a name="stateLoaded-org.apache.hadoop.hbase.master.assignment.AssignmentManager-org.apache.hadoop.hbase.master.assignment.RegionStateNode-">
@@ -958,7 +958,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>stateLoaded</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.427">stateLoaded</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a>&nbsp;am,
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.428">stateLoaded</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a>&nbsp;am,
                  <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a>&nbsp;regionNode)</pre>
 </li>
 </ul>
@@ -968,7 +968,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>rollbackState</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.434">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.435">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                              org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;state)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -990,7 +990,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.441">getState</a>(int&nbsp;stateId)</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.442">getState</a>(int&nbsp;stateId)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
 <div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
 <dl>
@@ -1009,7 +1009,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getStateId</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.446">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;state)</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.447">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;state)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
 <div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
 <dl>
@@ -1028,7 +1028,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getInitialState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.451">getInitialState</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.452">getInitialState</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
 <div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
 <dl>
@@ -1045,7 +1045,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>convert</h4>
-<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.455">convert</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionType&nbsp;type)</pre>
+<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.456">convert</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionType&nbsp;type)</pre>
 </li>
 </ul>
 <a name="convert-org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure.TransitionType-">
@@ -1054,7 +1054,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>convert</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionType&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.470">convert</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a>&nbsp;type)</pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionType&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.471">convert</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a>&nbsp;type)</pre>
 </li>
 </ul>
 <a name="serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">
@@ -1063,7 +1063,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>serializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.486">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.487">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
 <div class="block">The user-level code of the procedure may have some state to
@@ -1085,7 +1085,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>deserializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.497">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.498">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
 <div class="block">Called on store load to allow the user to decode the previously serialized
@@ -1106,7 +1106,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcedureMetrics</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureMetrics</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.510">getProcedureMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterPro [...]
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureMetrics</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.511">getProcedureMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterPro [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcedureMetrics-TEnvironment-">Procedure</a></code></span></div>
 <div class="block">Override this method to provide procedure specific counters for submitted count, failed
  count and time histogram.</div>
@@ -1126,7 +1126,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>toStringClassDetails</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.527">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.528">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;sb)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">Procedure</a></code></span></div>
 <div class="block">Extend the toString() information with the procedure details
  e.g. className and parameters</div>
@@ -1144,7 +1144,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>setOwner</h4>
-<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.538">setOwner</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.m [...]
+<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.539">setOwner</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.m [...]
                                                     <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;proc)</pre>
 </li>
 </ul>
@@ -1154,7 +1154,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>assign</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.551">assign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.mast [...]
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.552">assign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.mast [...]
                                                  <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                                                  @Nullable
                                                  <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;targetServer)</pre>
@@ -1166,7 +1166,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>assign</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.556">assign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.mast [...]
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.557">assign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.mast [...]
                                                  <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                                                  boolean&nbsp;forceNewPlan,
                                                  @Nullable
@@ -1179,7 +1179,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>unassign</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.562">unassign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.ma [...]
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.563">unassign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.ma [...]
                                                    <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</pre>
 </li>
 </ul>
@@ -1189,7 +1189,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>reopen</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.567">reopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.mast [...]
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.568">reopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.mast [...]
                                                  <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</pre>
 </li>
 </ul>
@@ -1199,7 +1199,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>move</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.572">move</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master [...]
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.573">move</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master [...]
                                                <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                                                @Nullable
                                                <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;targetServer)</pre>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html b/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html
index 84f7531..b70b24d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.ChoreServiceThreadFactory.html
@@ -158,247 +158,251 @@
 <span class="sourceLineNo">150</span>    }<a name="line.150"></a>
 <span class="sourceLineNo">151</span><a name="line.151"></a>
 <span class="sourceLineNo">152</span>    try {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      chore.setChoreServicer(this);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      ScheduledFuture&lt;?&gt; future =<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          scheduler.scheduleAtFixedRate(chore, chore.getInitialDelay(), chore.getPeriod(),<a name="line.155"></a>
-<span class="sourceLineNo">156</span>            chore.getTimeUnit());<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      scheduledChores.put(chore, future);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      return true;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    } catch (Exception exception) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      if (LOG.isInfoEnabled()) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        LOG.info("Could not successfully schedule chore: " + chore.getName());<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      return false;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * @param chore The Chore to be rescheduled. If the chore is not scheduled with this ChoreService<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   *          yet then this call is equivalent to a call to scheduleChore.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  private synchronized void rescheduleChore(ScheduledChore chore) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    if (chore == null) return;<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>    if (scheduledChores.containsKey(chore)) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      ScheduledFuture&lt;?&gt; future = scheduledChores.get(chore);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      future.cancel(false);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    scheduleChore(chore);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>  @InterfaceAudience.Private<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  @Override<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  public synchronized void cancelChore(ScheduledChore chore) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    cancelChore(chore, true);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>  @InterfaceAudience.Private<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  public synchronized void cancelChore(ScheduledChore chore, boolean mayInterruptIfRunning) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    if (chore != null &amp;&amp; scheduledChores.containsKey(chore)) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      ScheduledFuture&lt;?&gt; future = scheduledChores.get(chore);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      future.cancel(mayInterruptIfRunning);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      scheduledChores.remove(chore);<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>      // Removing a chore that was missing its start time means it may be possible<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      // to reduce the number of threads<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      if (choresMissingStartTime.containsKey(chore)) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        choresMissingStartTime.remove(chore);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        requestCorePoolDecrease();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  @InterfaceAudience.Private<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  @Override<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  public synchronized boolean isChoreScheduled(ScheduledChore chore) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    return chore != null &amp;&amp; scheduledChores.containsKey(chore)<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        &amp;&amp; !scheduledChores.get(chore).isDone();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  }<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>  @InterfaceAudience.Private<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  @Override<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  public synchronized boolean triggerNow(ScheduledChore chore) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    if (chore == null) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      return false;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    } else {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      rescheduleChore(chore);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      return true;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>  /**<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @return number of chores that this service currently has scheduled<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   */<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  int getNumberOfScheduledChores() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    return scheduledChores.size();<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  /**<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * @return number of chores that this service currently has scheduled that are missing their<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   *         scheduled start time<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   */<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  int getNumberOfChoresMissingStartTime() {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    return choresMissingStartTime.size();<a name="line.234"></a>
-<span class="sourceLineNo">235</span>  }<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>  /**<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @return number of threads in the core pool of the underlying ScheduledThreadPoolExecutor<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  int getCorePoolSize() {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    return scheduler.getCorePoolSize();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * Custom ThreadFactory used with the ScheduledThreadPoolExecutor so that all the threads are<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * daemon threads, and thus, don't prevent the JVM from shutting down<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  static class ChoreServiceThreadFactory implements ThreadFactory {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    private final String threadPrefix;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    private final static String THREAD_NAME_SUFFIX = ".Chore.";<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    private AtomicInteger threadNumber = new AtomicInteger(1);<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>     * @param threadPrefix The prefix given to all threads created by this factory<a name="line.254"></a>
-<span class="sourceLineNo">255</span>     */<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    public ChoreServiceThreadFactory(final String threadPrefix) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      this.threadPrefix = threadPrefix;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>    @Override<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    public Thread newThread(Runnable r) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      Thread thread =<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          new Thread(r, threadPrefix + THREAD_NAME_SUFFIX + threadNumber.getAndIncrement());<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      thread.setDaemon(true);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      return thread;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * Represents a request to increase the number of core pool threads. Typically a request<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * originates from the fact that the current core pool size is not sufficient to service all of<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * the currently running Chores<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * @return true when the request to increase the core pool size succeeds<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   */<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  private synchronized boolean requestCorePoolIncrease() {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    // There is no point in creating more threads than scheduledChores.size since scheduled runs<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    // of the same chore cannot run concurrently (i.e. happen-before behavior is enforced<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    // amongst occurrences of the same chore).<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    if (scheduler.getCorePoolSize() &lt; scheduledChores.size()) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      scheduler.setCorePoolSize(scheduler.getCorePoolSize() + 1);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      printChoreServiceDetails("requestCorePoolIncrease");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      return true;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    return false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>  /**<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * Represents a request to decrease the number of core pool threads. Typically a request<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * originates from the fact that the current core pool size is more than sufficient to service the<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * running Chores.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  private synchronized void requestCorePoolDecrease() {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    if (scheduler.getCorePoolSize() &gt; MIN_CORE_POOL_SIZE) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      scheduler.setCorePoolSize(scheduler.getCorePoolSize() - 1);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      printChoreServiceDetails("requestCorePoolDecrease");<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>  @InterfaceAudience.Private<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  @Override<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  public synchronized void onChoreMissedStartTime(ScheduledChore chore) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    if (chore == null || !scheduledChores.containsKey(chore)) return;<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>    // If the chore has not caused an increase in the size of the core thread pool then request an<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    // increase. This allows each chore missing its start time to increase the core pool size by<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    // at most 1.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    if (!choresMissingStartTime.containsKey(chore) || !choresMissingStartTime.get(chore)) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      choresMissingStartTime.put(chore, requestCorePoolIncrease());<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    // Must reschedule the chore to prevent unnecessary delays of chores in the scheduler. If<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    // the chore is NOT rescheduled, future executions of this chore will be delayed more and<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    // more on each iteration. This hurts us because the ScheduledThreadPoolExecutor allocates<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    // idle threads to chores based on how delayed they are.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    rescheduleChore(chore);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    printChoreDetails("onChoreMissedStartTime", chore);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  /**<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * shutdown the service. Any chores that are scheduled for execution will be cancelled. Any chores<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * in the middle of execution will be interrupted and shutdown. This service will be unusable<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * after this method has been called (i.e. future scheduling attempts will fail).<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  public synchronized void shutdown() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    scheduler.shutdownNow();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    if (LOG.isInfoEnabled()) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      LOG.info("Chore service for: " + coreThreadPoolPrefix + " had " + scheduledChores.keySet()<a name="line.327"></a>
-<span class="sourceLineNo">328</span>          + " on shutdown");<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    cancelAllChores(true);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    scheduledChores.clear();<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    choresMissingStartTime.clear();<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  /**<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * @return true when the service is shutdown and thus cannot be used anymore<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public boolean isShutdown() {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    return scheduler.isShutdown();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span>  /**<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @return true when the service is shutdown and all threads have terminated<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  public boolean isTerminated() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    return scheduler.isTerminated();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private void cancelAllChores(final boolean mayInterruptIfRunning) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    ArrayList&lt;ScheduledChore&gt; choresToCancel = new ArrayList&lt;&gt;(scheduledChores.keySet().size());<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    // Build list of chores to cancel so we can iterate through a set that won't change<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    // as chores are cancelled. If we tried to cancel each chore while iterating through<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    // keySet the results would be undefined because the keySet would be changing<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    for (ScheduledChore chore : scheduledChores.keySet()) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      choresToCancel.add(chore);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    for (ScheduledChore chore : choresToCancel) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      cancelChore(chore, mayInterruptIfRunning);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    choresToCancel.clear();<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * Prints a summary of important details about the chore. Used for debugging purposes<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   */<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  private void printChoreDetails(final String header, ScheduledChore chore) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    LinkedHashMap&lt;String, String&gt; output = new LinkedHashMap&lt;&gt;();<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    output.put(header, "");<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    output.put("Chore name: ", chore.getName());<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    output.put("Chore period: ", Integer.toString(chore.getPeriod()));<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    output.put("Chore timeBetweenRuns: ", Long.toString(chore.getTimeBetweenRuns()));<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>    for (Entry&lt;String, String&gt; entry : output.entrySet()) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      if (LOG.isTraceEnabled()) LOG.trace(entry.getKey() + entry.getValue());<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  /**<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * Prints a summary of important details about the service. Used for debugging purposes<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   */<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  private void printChoreServiceDetails(final String header) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    LinkedHashMap&lt;String, String&gt; output = new LinkedHashMap&lt;&gt;();<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    output.put(header, "");<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    output.put("ChoreService corePoolSize: ", Integer.toString(getCorePoolSize()));<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    output.put("ChoreService scheduledChores: ", Integer.toString(getNumberOfScheduledChores()));<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    output.put("ChoreService missingStartTimeCount: ",<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      Integer.toString(getNumberOfChoresMissingStartTime()));<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>    for (Entry&lt;String, String&gt; entry : output.entrySet()) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      if (LOG.isTraceEnabled()) LOG.trace(entry.getKey() + entry.getValue());<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>}<a name="line.393"></a>
+<span class="sourceLineNo">153</span>      if (chore.getPeriod() &lt;= 0) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>        LOG.info("The period is {} seconds, {} is disabled", chore.getPeriod(), chore.getName());<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        return false;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      chore.setChoreServicer(this);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      ScheduledFuture&lt;?&gt; future =<a name="line.158"></a>
+<span class="sourceLineNo">159</span>          scheduler.scheduleAtFixedRate(chore, chore.getInitialDelay(), chore.getPeriod(),<a name="line.159"></a>
+<span class="sourceLineNo">160</span>            chore.getTimeUnit());<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      scheduledChores.put(chore, future);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      return true;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    } catch (Exception exception) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      if (LOG.isInfoEnabled()) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        LOG.info("Could not successfully schedule chore: " + chore.getName());<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      return false;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>  /**<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * @param chore The Chore to be rescheduled. If the chore is not scheduled with this ChoreService<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   *          yet then this call is equivalent to a call to scheduleChore.<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   */<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  private synchronized void rescheduleChore(ScheduledChore chore) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    if (chore == null) return;<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    if (scheduledChores.containsKey(chore)) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      ScheduledFuture&lt;?&gt; future = scheduledChores.get(chore);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      future.cancel(false);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    scheduleChore(chore);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  @InterfaceAudience.Private<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @Override<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  public synchronized void cancelChore(ScheduledChore chore) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    cancelChore(chore, true);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  @InterfaceAudience.Private<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  @Override<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public synchronized void cancelChore(ScheduledChore chore, boolean mayInterruptIfRunning) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    if (chore != null &amp;&amp; scheduledChores.containsKey(chore)) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      ScheduledFuture&lt;?&gt; future = scheduledChores.get(chore);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      future.cancel(mayInterruptIfRunning);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      scheduledChores.remove(chore);<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>      // Removing a chore that was missing its start time means it may be possible<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      // to reduce the number of threads<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      if (choresMissingStartTime.containsKey(chore)) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        choresMissingStartTime.remove(chore);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        requestCorePoolDecrease();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  @InterfaceAudience.Private<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  public synchronized boolean isChoreScheduled(ScheduledChore chore) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    return chore != null &amp;&amp; scheduledChores.containsKey(chore)<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        &amp;&amp; !scheduledChores.get(chore).isDone();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>  @InterfaceAudience.Private<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  @Override<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  public synchronized boolean triggerNow(ScheduledChore chore) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    if (chore == null) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return false;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    } else {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      rescheduleChore(chore);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      return true;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>  /**<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @return number of chores that this service currently has scheduled<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  int getNumberOfScheduledChores() {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    return scheduledChores.size();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  /**<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * @return number of chores that this service currently has scheduled that are missing their<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   *         scheduled start time<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  int getNumberOfChoresMissingStartTime() {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return choresMissingStartTime.size();<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  /**<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @return number of threads in the core pool of the underlying ScheduledThreadPoolExecutor<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  int getCorePoolSize() {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    return scheduler.getCorePoolSize();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * Custom ThreadFactory used with the ScheduledThreadPoolExecutor so that all the threads are<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * daemon threads, and thus, don't prevent the JVM from shutting down<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  static class ChoreServiceThreadFactory implements ThreadFactory {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    private final String threadPrefix;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    private final static String THREAD_NAME_SUFFIX = ".Chore.";<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    private AtomicInteger threadNumber = new AtomicInteger(1);<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>    /**<a name="line.257"></a>
+<span class="sourceLineNo">258</span>     * @param threadPrefix The prefix given to all threads created by this factory<a name="line.258"></a>
+<span class="sourceLineNo">259</span>     */<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    public ChoreServiceThreadFactory(final String threadPrefix) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      this.threadPrefix = threadPrefix;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>    @Override<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    public Thread newThread(Runnable r) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      Thread thread =<a name="line.266"></a>
+<span class="sourceLineNo">267</span>          new Thread(r, threadPrefix + THREAD_NAME_SUFFIX + threadNumber.getAndIncrement());<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      thread.setDaemon(true);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      return thread;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  /**<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * Represents a request to increase the number of core pool threads. Typically a request<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * originates from the fact that the current core pool size is not sufficient to service all of<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * the currently running Chores<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * @return true when the request to increase the core pool size succeeds<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  private synchronized boolean requestCorePoolIncrease() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // There is no point in creating more threads than scheduledChores.size since scheduled runs<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    // of the same chore cannot run concurrently (i.e. happen-before behavior is enforced<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    // amongst occurrences of the same chore).<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    if (scheduler.getCorePoolSize() &lt; scheduledChores.size()) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      scheduler.setCorePoolSize(scheduler.getCorePoolSize() + 1);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      printChoreServiceDetails("requestCorePoolIncrease");<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      return true;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    return false;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * Represents a request to decrease the number of core pool threads. Typically a request<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * originates from the fact that the current core pool size is more than sufficient to service the<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * running Chores.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  private synchronized void requestCorePoolDecrease() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    if (scheduler.getCorePoolSize() &gt; MIN_CORE_POOL_SIZE) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      scheduler.setCorePoolSize(scheduler.getCorePoolSize() - 1);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      printChoreServiceDetails("requestCorePoolDecrease");<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>  @InterfaceAudience.Private<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @Override<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public synchronized void onChoreMissedStartTime(ScheduledChore chore) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    if (chore == null || !scheduledChores.containsKey(chore)) return;<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    // If the chore has not caused an increase in the size of the core thread pool then request an<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    // increase. This allows each chore missing its start time to increase the core pool size by<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    // at most 1.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    if (!choresMissingStartTime.containsKey(chore) || !choresMissingStartTime.get(chore)) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      choresMissingStartTime.put(chore, requestCorePoolIncrease());<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span>    // Must reschedule the chore to prevent unnecessary delays of chores in the scheduler. If<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    // the chore is NOT rescheduled, future executions of this chore will be delayed more and<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    // more on each iteration. This hurts us because the ScheduledThreadPoolExecutor allocates<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    // idle threads to chores based on how delayed they are.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    rescheduleChore(chore);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    printChoreDetails("onChoreMissedStartTime", chore);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  /**<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * shutdown the service. Any chores that are scheduled for execution will be cancelled. Any chores<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * in the middle of execution will be interrupted and shutdown. This service will be unusable<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * after this method has been called (i.e. future scheduling attempts will fail).<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  public synchronized void shutdown() {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    scheduler.shutdownNow();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    if (LOG.isInfoEnabled()) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      LOG.info("Chore service for: " + coreThreadPoolPrefix + " had " + scheduledChores.keySet()<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          + " on shutdown");<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    cancelAllChores(true);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    scheduledChores.clear();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    choresMissingStartTime.clear();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  /**<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * @return true when the service is shutdown and thus cannot be used anymore<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  public boolean isShutdown() {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    return scheduler.isShutdown();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>  /**<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @return true when the service is shutdown and all threads have terminated<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   */<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  public boolean isTerminated() {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    return scheduler.isTerminated();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  private void cancelAllChores(final boolean mayInterruptIfRunning) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    ArrayList&lt;ScheduledChore&gt; choresToCancel = new ArrayList&lt;&gt;(scheduledChores.keySet().size());<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    // Build list of chores to cancel so we can iterate through a set that won't change<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    // as chores are cancelled. If we tried to cancel each chore while iterating through<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    // keySet the results would be undefined because the keySet would be changing<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    for (ScheduledChore chore : scheduledChores.keySet()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      choresToCancel.add(chore);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    for (ScheduledChore chore : choresToCancel) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      cancelChore(chore, mayInterruptIfRunning);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    choresToCancel.clear();<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  /**<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * Prints a summary of important details about the chore. Used for debugging purposes<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  private void printChoreDetails(final String header, ScheduledChore chore) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    LinkedHashMap&lt;String, String&gt; output = new LinkedHashMap&lt;&gt;();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    output.put(header, "");<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    output.put("Chore name: ", chore.getName());<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    output.put("Chore period: ", Integer.toString(chore.getPeriod()));<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    output.put("Chore timeBetweenRuns: ", Long.toString(chore.getTimeBetweenRuns()));<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>    for (Entry&lt;String, String&gt; entry : output.entrySet()) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      if (LOG.isTraceEnabled()) LOG.trace(entry.getKey() + entry.getValue());<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
+<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">382</span>  /**<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * Prints a summary of important details about the service. Used for debugging purposes<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   */<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  private void printChoreServiceDetails(final String header) {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    LinkedHashMap&lt;String, String&gt; output = new LinkedHashMap&lt;&gt;();<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    output.put(header, "");<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    output.put("ChoreService corePoolSize: ", Integer.toString(getCorePoolSize()));<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    output.put("ChoreService scheduledChores: ", Integer.toString(getNumberOfScheduledChores()));<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    output.put("ChoreService missingStartTimeCount: ",<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      Integer.toString(getNumberOfChoresMissingStartTime()));<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>    for (Entry&lt;String, String&gt; entry : output.entrySet()) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      if (LOG.isTraceEnabled()) LOG.trace(entry.getKey() + entry.getValue());<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
+<span class="sourceLineNo">397</span>}<a name="line.397"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.html b/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.html
index 84f7531..b70b24d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ChoreService.html
@@ -158,247 +158,251 @@
 <span class="sourceLineNo">150</span>    }<a name="line.150"></a>
 <span class="sourceLineNo">151</span><a name="line.151"></a>
 <span class="sourceLineNo">152</span>    try {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      chore.setChoreServicer(this);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      ScheduledFuture&lt;?&gt; future =<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          scheduler.scheduleAtFixedRate(chore, chore.getInitialDelay(), chore.getPeriod(),<a name="line.155"></a>
-<span class="sourceLineNo">156</span>            chore.getTimeUnit());<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      scheduledChores.put(chore, future);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      return true;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    } catch (Exception exception) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      if (LOG.isInfoEnabled()) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        LOG.info("Could not successfully schedule chore: " + chore.getName());<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      return false;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * @param chore The Chore to be rescheduled. If the chore is not scheduled with this ChoreService<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   *          yet then this call is equivalent to a call to scheduleChore.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  private synchronized void rescheduleChore(ScheduledChore chore) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    if (chore == null) return;<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>    if (scheduledChores.containsKey(chore)) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      ScheduledFuture&lt;?&gt; future = scheduledChores.get(chore);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      future.cancel(false);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    scheduleChore(chore);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>  @InterfaceAudience.Private<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  @Override<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  public synchronized void cancelChore(ScheduledChore chore) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    cancelChore(chore, true);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>  @InterfaceAudience.Private<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  public synchronized void cancelChore(ScheduledChore chore, boolean mayInterruptIfRunning) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    if (chore != null &amp;&amp; scheduledChores.containsKey(chore)) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      ScheduledFuture&lt;?&gt; future = scheduledChores.get(chore);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      future.cancel(mayInterruptIfRunning);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      scheduledChores.remove(chore);<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>      // Removing a chore that was missing its start time means it may be possible<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      // to reduce the number of threads<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      if (choresMissingStartTime.containsKey(chore)) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        choresMissingStartTime.remove(chore);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        requestCorePoolDecrease();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  @InterfaceAudience.Private<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  @Override<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  public synchronized boolean isChoreScheduled(ScheduledChore chore) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    return chore != null &amp;&amp; scheduledChores.containsKey(chore)<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        &amp;&amp; !scheduledChores.get(chore).isDone();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  }<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>  @InterfaceAudience.Private<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  @Override<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  public synchronized boolean triggerNow(ScheduledChore chore) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    if (chore == null) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      return false;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    } else {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      rescheduleChore(chore);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      return true;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>  /**<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @return number of chores that this service currently has scheduled<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   */<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  int getNumberOfScheduledChores() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    return scheduledChores.size();<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  /**<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * @return number of chores that this service currently has scheduled that are missing their<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   *         scheduled start time<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   */<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  int getNumberOfChoresMissingStartTime() {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    return choresMissingStartTime.size();<a name="line.234"></a>
-<span class="sourceLineNo">235</span>  }<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>  /**<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @return number of threads in the core pool of the underlying ScheduledThreadPoolExecutor<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  int getCorePoolSize() {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    return scheduler.getCorePoolSize();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * Custom ThreadFactory used with the ScheduledThreadPoolExecutor so that all the threads are<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * daemon threads, and thus, don't prevent the JVM from shutting down<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  static class ChoreServiceThreadFactory implements ThreadFactory {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    private final String threadPrefix;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    private final static String THREAD_NAME_SUFFIX = ".Chore.";<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    private AtomicInteger threadNumber = new AtomicInteger(1);<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>     * @param threadPrefix The prefix given to all threads created by this factory<a name="line.254"></a>
-<span class="sourceLineNo">255</span>     */<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    public ChoreServiceThreadFactory(final String threadPrefix) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      this.threadPrefix = threadPrefix;<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>    @Override<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    public Thread newThread(Runnable r) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      Thread thread =<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          new Thread(r, threadPrefix + THREAD_NAME_SUFFIX + threadNumber.getAndIncrement());<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      thread.setDaemon(true);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      return thread;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * Represents a request to increase the number of core pool threads. Typically a request<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * originates from the fact that the current core pool size is not sufficient to service all of<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * the currently running Chores<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * @return true when the request to increase the core pool size succeeds<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   */<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  private synchronized boolean requestCorePoolIncrease() {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    // There is no point in creating more threads than scheduledChores.size since scheduled runs<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    // of the same chore cannot run concurrently (i.e. happen-before behavior is enforced<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    // amongst occurrences of the same chore).<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    if (scheduler.getCorePoolSize() &lt; scheduledChores.size()) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      scheduler.setCorePoolSize(scheduler.getCorePoolSize() + 1);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      printChoreServiceDetails("requestCorePoolIncrease");<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      return true;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    return false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>  /**<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * Represents a request to decrease the number of core pool threads. Typically a request<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * originates from the fact that the current core pool size is more than sufficient to service the<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * running Chores.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  private synchronized void requestCorePoolDecrease() {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    if (scheduler.getCorePoolSize() &gt; MIN_CORE_POOL_SIZE) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      scheduler.setCorePoolSize(scheduler.getCorePoolSize() - 1);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      printChoreServiceDetails("requestCorePoolDecrease");<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>  @InterfaceAudience.Private<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  @Override<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  public synchronized void onChoreMissedStartTime(ScheduledChore chore) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    if (chore == null || !scheduledChores.containsKey(chore)) return;<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>    // If the chore has not caused an increase in the size of the core thread pool then request an<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    // increase. This allows each chore missing its start time to increase the core pool size by<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    // at most 1.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    if (!choresMissingStartTime.containsKey(chore) || !choresMissingStartTime.get(chore)) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      choresMissingStartTime.put(chore, requestCorePoolIncrease());<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    // Must reschedule the chore to prevent unnecessary delays of chores in the scheduler. If<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    // the chore is NOT rescheduled, future executions of this chore will be delayed more and<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    // more on each iteration. This hurts us because the ScheduledThreadPoolExecutor allocates<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    // idle threads to chores based on how delayed they are.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    rescheduleChore(chore);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    printChoreDetails("onChoreMissedStartTime", chore);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  /**<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * shutdown the service. Any chores that are scheduled for execution will be cancelled. Any chores<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * in the middle of execution will be interrupted and shutdown. This service will be unusable<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * after this method has been called (i.e. future scheduling attempts will fail).<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  public synchronized void shutdown() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    scheduler.shutdownNow();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    if (LOG.isInfoEnabled()) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      LOG.info("Chore service for: " + coreThreadPoolPrefix + " had " + scheduledChores.keySet()<a name="line.327"></a>
-<span class="sourceLineNo">328</span>          + " on shutdown");<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    cancelAllChores(true);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    scheduledChores.clear();<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    choresMissingStartTime.clear();<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  /**<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * @return true when the service is shutdown and thus cannot be used anymore<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public boolean isShutdown() {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    return scheduler.isShutdown();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span>  /**<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @return true when the service is shutdown and all threads have terminated<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  public boolean isTerminated() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    return scheduler.isTerminated();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private void cancelAllChores(final boolean mayInterruptIfRunning) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    ArrayList&lt;ScheduledChore&gt; choresToCancel = new ArrayList&lt;&gt;(scheduledChores.keySet().size());<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    // Build list of chores to cancel so we can iterate through a set that won't change<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    // as chores are cancelled. If we tried to cancel each chore while iterating through<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    // keySet the results would be undefined because the keySet would be changing<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    for (ScheduledChore chore : scheduledChores.keySet()) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      choresToCancel.add(chore);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    for (ScheduledChore chore : choresToCancel) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      cancelChore(chore, mayInterruptIfRunning);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    choresToCancel.clear();<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * Prints a summary of important details about the chore. Used for debugging purposes<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   */<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  private void printChoreDetails(final String header, ScheduledChore chore) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    LinkedHashMap&lt;String, String&gt; output = new LinkedHashMap&lt;&gt;();<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    output.put(header, "");<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    output.put("Chore name: ", chore.getName());<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    output.put("Chore period: ", Integer.toString(chore.getPeriod()));<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    output.put("Chore timeBetweenRuns: ", Long.toString(chore.getTimeBetweenRuns()));<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>    for (Entry&lt;String, String&gt; entry : output.entrySet()) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      if (LOG.isTraceEnabled()) LOG.trace(entry.getKey() + entry.getValue());<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  /**<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * Prints a summary of important details about the service. Used for debugging purposes<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   */<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  private void printChoreServiceDetails(final String header) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    LinkedHashMap&lt;String, String&gt; output = new LinkedHashMap&lt;&gt;();<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    output.put(header, "");<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    output.put("ChoreService corePoolSize: ", Integer.toString(getCorePoolSize()));<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    output.put("ChoreService scheduledChores: ", Integer.toString(getNumberOfScheduledChores()));<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    output.put("ChoreService missingStartTimeCount: ",<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      Integer.toString(getNumberOfChoresMissingStartTime()));<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>    for (Entry&lt;String, String&gt; entry : output.entrySet()) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      if (LOG.isTraceEnabled()) LOG.trace(entry.getKey() + entry.getValue());<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>}<a name="line.393"></a>
+<span class="sourceLineNo">153</span>      if (chore.getPeriod() &lt;= 0) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>        LOG.info("The period is {} seconds, {} is disabled", chore.getPeriod(), chore.getName());<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        return false;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      }<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      chore.setChoreServicer(this);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      ScheduledFuture&lt;?&gt; future =<a name="line.158"></a>
+<span class="sourceLineNo">159</span>          scheduler.scheduleAtFixedRate(chore, chore.getInitialDelay(), chore.getPeriod(),<a name="line.159"></a>
+<span class="sourceLineNo">160</span>            chore.getTimeUnit());<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      scheduledChores.put(chore, future);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      return true;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    } catch (Exception exception) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      if (LOG.isInfoEnabled()) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        LOG.info("Could not successfully schedule chore: " + chore.getName());<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      return false;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>  /**<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * @param chore The Chore to be rescheduled. If the chore is not scheduled with this ChoreService<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   *          yet then this call is equivalent to a call to scheduleChore.<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   */<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  private synchronized void rescheduleChore(ScheduledChore chore) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    if (chore == null) return;<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    if (scheduledChores.containsKey(chore)) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      ScheduledFuture&lt;?&gt; future = scheduledChores.get(chore);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      future.cancel(false);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    scheduleChore(chore);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  @InterfaceAudience.Private<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @Override<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  public synchronized void cancelChore(ScheduledChore chore) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    cancelChore(chore, true);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  @InterfaceAudience.Private<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  @Override<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public synchronized void cancelChore(ScheduledChore chore, boolean mayInterruptIfRunning) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    if (chore != null &amp;&amp; scheduledChores.containsKey(chore)) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      ScheduledFuture&lt;?&gt; future = scheduledChores.get(chore);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      future.cancel(mayInterruptIfRunning);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      scheduledChores.remove(chore);<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>      // Removing a chore that was missing its start time means it may be possible<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      // to reduce the number of threads<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      if (choresMissingStartTime.containsKey(chore)) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        choresMissingStartTime.remove(chore);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        requestCorePoolDecrease();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  @InterfaceAudience.Private<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  public synchronized boolean isChoreScheduled(ScheduledChore chore) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    return chore != null &amp;&amp; scheduledChores.containsKey(chore)<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        &amp;&amp; !scheduledChores.get(chore).isDone();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>  @InterfaceAudience.Private<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  @Override<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  public synchronized boolean triggerNow(ScheduledChore chore) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    if (chore == null) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return false;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    } else {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      rescheduleChore(chore);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      return true;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>  /**<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @return number of chores that this service currently has scheduled<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   */<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  int getNumberOfScheduledChores() {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    return scheduledChores.size();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  /**<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * @return number of chores that this service currently has scheduled that are missing their<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   *         scheduled start time<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  int getNumberOfChoresMissingStartTime() {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    return choresMissingStartTime.size();<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  /**<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @return number of threads in the core pool of the underlying ScheduledThreadPoolExecutor<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  int getCorePoolSize() {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    return scheduler.getCorePoolSize();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * Custom ThreadFactory used with the ScheduledThreadPoolExecutor so that all the threads are<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * daemon threads, and thus, don't prevent the JVM from shutting down<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  static class ChoreServiceThreadFactory implements ThreadFactory {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    private final String threadPrefix;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    private final static String THREAD_NAME_SUFFIX = ".Chore.";<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    private AtomicInteger threadNumber = new AtomicInteger(1);<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>    /**<a name="line.257"></a>
+<span class="sourceLineNo">258</span>     * @param threadPrefix The prefix given to all threads created by this factory<a name="line.258"></a>
+<span class="sourceLineNo">259</span>     */<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    public ChoreServiceThreadFactory(final String threadPrefix) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      this.threadPrefix = threadPrefix;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>    @Override<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    public Thread newThread(Runnable r) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      Thread thread =<a name="line.266"></a>
+<span class="sourceLineNo">267</span>          new Thread(r, threadPrefix + THREAD_NAME_SUFFIX + threadNumber.getAndIncrement());<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      thread.setDaemon(true);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      return thread;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  /**<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * Represents a request to increase the number of core pool threads. Typically a request<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * originates from the fact that the current core pool size is not sufficient to service all of<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * the currently running Chores<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * @return true when the request to increase the core pool size succeeds<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  private synchronized boolean requestCorePoolIncrease() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // There is no point in creating more threads than scheduledChores.size since scheduled runs<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    // of the same chore cannot run concurrently (i.e. happen-before behavior is enforced<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    // amongst occurrences of the same chore).<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    if (scheduler.getCorePoolSize() &lt; scheduledChores.size()) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      scheduler.setCorePoolSize(scheduler.getCorePoolSize() + 1);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      printChoreServiceDetails("requestCorePoolIncrease");<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      return true;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    return false;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * Represents a request to decrease the number of core pool threads. Typically a request<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * originates from the fact that the current core pool size is more than sufficient to service the<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * running Chores.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  private synchronized void requestCorePoolDecrease() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    if (scheduler.getCorePoolSize() &gt; MIN_CORE_POOL_SIZE) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      scheduler.setCorePoolSize(scheduler.getCorePoolSize() - 1);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      printChoreServiceDetails("requestCorePoolDecrease");<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>  @InterfaceAudience.Private<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @Override<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public synchronized void onChoreMissedStartTime(ScheduledChore chore) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    if (chore == null || !scheduledChores.containsKey(chore)) return;<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    // If the chore has not caused an increase in the size of the core thread pool then request an<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    // increase. This allows each chore missing its start time to increase the core pool size by<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    // at most 1.<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    if (!choresMissingStartTime.containsKey(chore) || !choresMissingStartTime.get(chore)) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      choresMissingStartTime.put(chore, requestCorePoolIncrease());<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span>    // Must reschedule the chore to prevent unnecessary delays of chores in the scheduler. If<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    // the chore is NOT rescheduled, future executions of this chore will be delayed more and<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    // more on each iteration. This hurts us because the ScheduledThreadPoolExecutor allocates<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    // idle threads to chores based on how delayed they are.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    rescheduleChore(chore);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    printChoreDetails("onChoreMissedStartTime", chore);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  /**<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * shutdown the service. Any chores that are scheduled for execution will be cancelled. Any chores<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * in the middle of execution will be interrupted and shutdown. This service will be unusable<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * after this method has been called (i.e. future scheduling attempts will fail).<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  public synchronized void shutdown() {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    scheduler.shutdownNow();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    if (LOG.isInfoEnabled()) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      LOG.info("Chore service for: " + coreThreadPoolPrefix + " had " + scheduledChores.keySet()<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          + " on shutdown");<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    cancelAllChores(true);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    scheduledChores.clear();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    choresMissingStartTime.clear();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  /**<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * @return true when the service is shutdown and thus cannot be used anymore<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  public boolean isShutdown() {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    return scheduler.isShutdown();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>  /**<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @return true when the service is shutdown and all threads have terminated<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   */<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  public boolean isTerminated() {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    return scheduler.isTerminated();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  private void cancelAllChores(final boolean mayInterruptIfRunning) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    ArrayList&lt;ScheduledChore&gt; choresToCancel = new ArrayList&lt;&gt;(scheduledChores.keySet().size());<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    // Build list of chores to cancel so we can iterate through a set that won't change<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    // as chores are cancelled. If we tried to cancel each chore while iterating through<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    // keySet the results would be undefined because the keySet would be changing<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    for (ScheduledChore chore : scheduledChores.keySet()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      choresToCancel.add(chore);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    for (ScheduledChore chore : choresToCancel) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      cancelChore(chore, mayInterruptIfRunning);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    choresToCancel.clear();<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  /**<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * Prints a summary of important details about the chore. Used for debugging purposes<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  private void printChoreDetails(final String header, ScheduledChore chore) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    LinkedHashMap&lt;String, String&gt; output = new LinkedHashMap&lt;&gt;();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    output.put(header, "");<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    output.put("Chore name: ", chore.getName());<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    output.put("Chore period: ", Integer.toString(chore.getPeriod()));<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    output.put("Chore timeBetweenRuns: ", Long.toString(chore.getTimeBetweenRuns()));<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>    for (Entry&lt;String, String&gt; entry : output.entrySet()) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      if (LOG.isTraceEnabled()) LOG.trace(entry.getKey() + entry.getValue());<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
+<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">382</span>  /**<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * Prints a summary of important details about the service. Used for debugging purposes<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   */<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  private void printChoreServiceDetails(final String header) {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    LinkedHashMap&lt;String, String&gt; output = new LinkedHashMap&lt;&gt;();<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    output.put(header, "");<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    output.put("ChoreService corePoolSize: ", Integer.toString(getCorePoolSize()));<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    output.put("ChoreService scheduledChores: ", Integer.toString(getNumberOfScheduledChores()));<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    output.put("ChoreService missingStartTimeCount: ",<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      Integer.toString(getNumberOfChoresMissingStartTime()));<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>    for (Entry&lt;String, String&gt; entry : output.entrySet()) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      if (LOG.isTraceEnabled()) LOG.trace(entry.getKey() + entry.getValue());<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
+<span class="sourceLineNo">397</span>}<a name="line.397"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 26afad6..5d69f66 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,9 +16,9 @@
 <span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
 <span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
-<span class="sourceLineNo">011</span>  public static final String revision = "3250a8021a16fdc78155ad0b2f65875492a64742";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "ef79b40e6e0705fa925f688d12840f32bd0e453a";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Fri Sep 27 14:39:12 UTC 2019";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Sat Sep 28 14:39:06 UTC 2019";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://jenkins-websites-he-de.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
 <span class="sourceLineNo">015</span>  public static final String srcChecksum = "(stdin)=";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
index 74cf147..22caa84 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
@@ -1312,2491 +1312,2486 @@
 <span class="sourceLineNo">1304</span><a name="line.1304"></a>
 <span class="sourceLineNo">1305</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.1305"></a>
 <span class="sourceLineNo">1306</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    } else {<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>      LOG<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>    }<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>  }<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span><a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>  /**<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>   * &lt;p&gt;<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * &lt;/p&gt;<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   * &lt;p&gt;<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>   * Will be overridden in tests.<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>   * &lt;/p&gt;<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>   */<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>  @VisibleForTesting<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>  protected MasterMetaBootstrap createMetaBootstrap() {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>    return new MasterMetaBootstrap(this);<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>  }<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span><a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>  /**<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>   * &lt;p&gt;<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>   * Create a {@link ServerManager} instance.<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>   * &lt;/p&gt;<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>   * &lt;p&gt;<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>   * Will be overridden in tests.<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>   * &lt;/p&gt;<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>   */<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  @VisibleForTesting<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>  protected ServerManager createServerManager(final MasterServices master) throws IOException {<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    // w/ a mocked up ServerManager.<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    setupClusterConnection();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>    return new ServerManager(master);<a name="line.1345"></a>
+<span class="sourceLineNo">1307</span>    this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    getChoreService().scheduleChore(mobCompactChore);<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>  }<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span><a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>  /**<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>   * &lt;p&gt;<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>   * &lt;/p&gt;<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>   * &lt;p&gt;<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>   * Will be overridden in tests.<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>   * &lt;/p&gt;<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>   */<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  @VisibleForTesting<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>  protected MasterMetaBootstrap createMetaBootstrap() {<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    return new MasterMetaBootstrap(this);<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>  }<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span><a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>  /**<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>   * &lt;p&gt;<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>   * Create a {@link ServerManager} instance.<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>   * &lt;/p&gt;<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>   * &lt;p&gt;<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>   * Will be overridden in tests.<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>   * &lt;/p&gt;<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>   */<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>  @VisibleForTesting<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>  protected ServerManager createServerManager(final MasterServices master) throws IOException {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>    // w/ a mocked up ServerManager.<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>    setupClusterConnection();<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>    return new ServerManager(master);<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>  }<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span><a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>  private void waitForRegionServers(final MonitoredTask status)<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>      throws IOException, InterruptedException {<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>    this.serverManager.waitForRegionServers(status);<a name="line.1345"></a>
 <span class="sourceLineNo">1346</span>  }<a name="line.1346"></a>
 <span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>  private void waitForRegionServers(final MonitoredTask status)<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>      throws IOException, InterruptedException {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>    this.serverManager.waitForRegionServers(status);<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>  }<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span><a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>  // Will be overridden in tests<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>  @VisibleForTesting<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>  protected void initClusterSchemaService() throws IOException, InterruptedException {<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    this.clusterSchemaService = new ClusterSchemaServiceImpl(this);<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    this.clusterSchemaService.startAsync();<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>    try {<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>      this.clusterSchemaService.awaitRunning(getConfiguration().getInt(<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>        HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>        DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    } catch (TimeoutException toe) {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>      throw new IOException("Timedout starting ClusterSchemaService", toe);<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    }<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>  }<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>  private void initQuotaManager() throws IOException {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>    MasterQuotaManager quotaManager = new MasterQuotaManager(this);<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    quotaManager.start();<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>    this.quotaManager = quotaManager;<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>  }<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span><a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>  private SpaceQuotaSnapshotNotifier createQuotaSnapshotNotifier() {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    SpaceQuotaSnapshotNotifier notifier =<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>        SpaceQuotaSnapshotNotifierFactory.getInstance().create(getConfiguration());<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>    return notifier;<a name="line.1376"></a>
+<span class="sourceLineNo">1348</span>  // Will be overridden in tests<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>  @VisibleForTesting<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>  protected void initClusterSchemaService() throws IOException, InterruptedException {<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>    this.clusterSchemaService = new ClusterSchemaServiceImpl(this);<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>    this.clusterSchemaService.startAsync();<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>    try {<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>      this.clusterSchemaService.awaitRunning(getConfiguration().getInt(<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>        HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>        DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>    } catch (TimeoutException toe) {<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>      throw new IOException("Timedout starting ClusterSchemaService", toe);<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>    }<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>  }<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span><a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>  private void initQuotaManager() throws IOException {<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>    MasterQuotaManager quotaManager = new MasterQuotaManager(this);<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>    quotaManager.start();<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>    this.quotaManager = quotaManager;<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>  }<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span><a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>  private SpaceQuotaSnapshotNotifier createQuotaSnapshotNotifier() {<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>    SpaceQuotaSnapshotNotifier notifier =<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>        SpaceQuotaSnapshotNotifierFactory.getInstance().create(getConfiguration());<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>    return notifier;<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>  }<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span><a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>  boolean isCatalogJanitorEnabled() {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>    return catalogJanitorChore != null ?<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      catalogJanitorChore.getEnabled() : false;<a name="line.1376"></a>
 <span class="sourceLineNo">1377</span>  }<a name="line.1377"></a>
 <span class="sourceLineNo">1378</span><a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>  boolean isCatalogJanitorEnabled() {<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>    return catalogJanitorChore != null ?<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      catalogJanitorChore.getEnabled() : false;<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>  }<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span><a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>  boolean isCleanerChoreEnabled() {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>    boolean hfileCleanerFlag = true, logCleanerFlag = true;<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span><a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    if (hfileCleaner != null) {<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>      hfileCleanerFlag = hfileCleaner.getEnabled();<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    }<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span><a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    if (logCleaner != null) {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      logCleanerFlag = logCleaner.getEnabled();<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    return (hfileCleanerFlag &amp;&amp; logCleanerFlag);<a name="line.1395"></a>
+<span class="sourceLineNo">1379</span>  boolean isCleanerChoreEnabled() {<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>    boolean hfileCleanerFlag = true, logCleanerFlag = true;<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span><a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>    if (hfileCleaner != null) {<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>      hfileCleanerFlag = hfileCleaner.getEnabled();<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>    }<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span><a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>    if (logCleaner != null) {<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      logCleanerFlag = logCleaner.getEnabled();<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>    }<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span><a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>    return (hfileCleanerFlag &amp;&amp; logCleanerFlag);<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>  }<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span><a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>  @Override<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>  public ServerManager getServerManager() {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    return this.serverManager;<a name="line.1395"></a>
 <span class="sourceLineNo">1396</span>  }<a name="line.1396"></a>
 <span class="sourceLineNo">1397</span><a name="line.1397"></a>
 <span class="sourceLineNo">1398</span>  @Override<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>  public ServerManager getServerManager() {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>    return this.serverManager;<a name="line.1400"></a>
+<span class="sourceLineNo">1399</span>  public MasterFileSystem getMasterFileSystem() {<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>    return this.fileSystemManager;<a name="line.1400"></a>
 <span class="sourceLineNo">1401</span>  }<a name="line.1401"></a>
 <span class="sourceLineNo">1402</span><a name="line.1402"></a>
 <span class="sourceLineNo">1403</span>  @Override<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>  public MasterFileSystem getMasterFileSystem() {<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    return this.fileSystemManager;<a name="line.1405"></a>
+<span class="sourceLineNo">1404</span>  public MasterWalManager getMasterWalManager() {<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    return this.walManager;<a name="line.1405"></a>
 <span class="sourceLineNo">1406</span>  }<a name="line.1406"></a>
 <span class="sourceLineNo">1407</span><a name="line.1407"></a>
 <span class="sourceLineNo">1408</span>  @Override<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>  public MasterWalManager getMasterWalManager() {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    return this.walManager;<a name="line.1410"></a>
+<span class="sourceLineNo">1409</span>  public SplitWALManager getSplitWALManager() {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    return splitWALManager;<a name="line.1410"></a>
 <span class="sourceLineNo">1411</span>  }<a name="line.1411"></a>
 <span class="sourceLineNo">1412</span><a name="line.1412"></a>
 <span class="sourceLineNo">1413</span>  @Override<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>  public SplitWALManager getSplitWALManager() {<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    return splitWALManager;<a name="line.1415"></a>
+<span class="sourceLineNo">1414</span>  public TableStateManager getTableStateManager() {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>    return tableStateManager;<a name="line.1415"></a>
 <span class="sourceLineNo">1416</span>  }<a name="line.1416"></a>
 <span class="sourceLineNo">1417</span><a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>  @Override<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  public TableStateManager getTableStateManager() {<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>    return tableStateManager;<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>  }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>  /*<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>   * Start up all services. If any of these threads gets an unhandled exception<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>   * then they just die with a logged message.  This should be fine because<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>   * in general, we do not expect the master to get such unhandled exceptions<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>   *  as OOMEs; it should be lightly loaded. See what HRegionServer does if<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>   *  need to install an unexpected exception handler.<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>   */<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>  private void startServiceThreads() throws IOException {<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    // Start the executor service pools<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>    this.executorService.startExecutorService(ExecutorType.MASTER_OPEN_REGION, conf.getInt(<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      HConstants.MASTER_OPEN_REGION_THREADS, HConstants.MASTER_OPEN_REGION_THREADS_DEFAULT));<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>    this.executorService.startExecutorService(ExecutorType.MASTER_CLOSE_REGION, conf.getInt(<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>      HConstants.MASTER_CLOSE_REGION_THREADS, HConstants.MASTER_CLOSE_REGION_THREADS_DEFAULT));<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>    this.executorService.startExecutorService(ExecutorType.MASTER_SERVER_OPERATIONS,<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      conf.getInt(HConstants.MASTER_SERVER_OPERATIONS_THREADS,<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>        HConstants.MASTER_SERVER_OPERATIONS_THREADS_DEFAULT));<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>    this.executorService.startExecutorService(ExecutorType.MASTER_META_SERVER_OPERATIONS,<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      conf.getInt(HConstants.MASTER_META_SERVER_OPERATIONS_THREADS,<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>        HConstants.MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT));<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>    this.executorService.startExecutorService(ExecutorType.M_LOG_REPLAY_OPS, conf.getInt(<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      HConstants.MASTER_LOG_REPLAY_OPS_THREADS, HConstants.MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT));<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>    this.executorService.startExecutorService(ExecutorType.MASTER_SNAPSHOT_OPERATIONS, conf.getInt(<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      SnapshotManager.SNAPSHOT_POOL_THREADS_KEY, SnapshotManager.SNAPSHOT_POOL_THREADS_DEFAULT));<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span><a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>   // We depend on there being only one instance of this executor running<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>   // at a time.  To do concurrency, would need fencing of enable/disable of<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>   // tables.<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>   // Any time changing this maxThreads to &gt; 1, pls see the comment at<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>   // AccessController#postCompletedCreateTableAction<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>   this.executorService.startExecutorService(ExecutorType.MASTER_TABLE_OPERATIONS, 1);<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>   startProcedureExecutor();<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    // Create cleaner thread pool<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>    cleanerPool = new DirScanPool(conf);<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>    // Start log cleaner thread<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>    int cleanerInterval = conf.getInt("hbase.master.cleaner.interval", 600 * 1000);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    this.logCleaner = new LogCleaner(cleanerInterval, this, conf,<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      getMasterWalManager().getFileSystem(), getMasterWalManager().getOldLogDir(), cleanerPool);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    getChoreService().scheduleChore(logCleaner);<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span><a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    // start the hfile archive cleaner thread<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>    Path archiveDir = HFileArchiveUtil.getArchivePath(conf);<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>    Map&lt;String, Object&gt; params = new HashMap&lt;&gt;();<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>    params.put(MASTER, this);<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    this.hfileCleaner = new HFileCleaner(cleanerInterval, this, conf,<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      getMasterFileSystem().getFileSystem(), archiveDir, cleanerPool, params);<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    getChoreService().scheduleChore(hfileCleaner);<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>    replicationBarrierCleaner = new ReplicationBarrierCleaner(conf, this, getConnection(),<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>      replicationPeerManager);<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>    getChoreService().scheduleChore(replicationBarrierCleaner);<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span><a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>    final boolean isSnapshotChoreEnabled = this.snapshotCleanupTracker<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        .isSnapshotCleanupEnabled();<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>    this.snapshotCleanerChore = new SnapshotCleanerChore(this, conf, getSnapshotManager());<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>    if (isSnapshotChoreEnabled) {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      getChoreService().scheduleChore(this.snapshotCleanerChore);<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>    } else {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>      if (LOG.isTraceEnabled()) {<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>        LOG.trace("Snapshot Cleaner Chore is disabled. Not starting up the chore..");<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      }<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>    }<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>    serviceStarted = true;<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>    if (LOG.isTraceEnabled()) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>      LOG.trace("Started service threads");<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>    }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>  }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span><a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>  @Override<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>  protected void stopServiceThreads() {<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>    if (masterJettyServer != null) {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>      LOG.info("Stopping master jetty server");<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>      try {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>        masterJettyServer.stop();<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>      } catch (Exception e) {<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>        LOG.error("Failed to stop master jetty server", e);<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>      }<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>    }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>    stopChores();<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    if (this.mobCompactThread != null) {<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>      this.mobCompactThread.close();<a name="line.1503"></a>
+<span class="sourceLineNo">1418</span>  /*<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>   * Start up all services. If any of these threads gets an unhandled exception<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>   * then they just die with a logged message.  This should be fine because<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>   * in general, we do not expect the master to get such unhandled exceptions<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>   *  as OOMEs; it should be lightly loaded. See what HRegionServer does if<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>   *  need to install an unexpected exception handler.<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>   */<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>  private void startServiceThreads() throws IOException {<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    // Start the executor service pools<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    this.executorService.startExecutorService(ExecutorType.MASTER_OPEN_REGION, conf.getInt(<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>      HConstants.MASTER_OPEN_REGION_THREADS, HConstants.MASTER_OPEN_REGION_THREADS_DEFAULT));<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>    this.executorService.startExecutorService(ExecutorType.MASTER_CLOSE_REGION, conf.getInt(<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      HConstants.MASTER_CLOSE_REGION_THREADS, HConstants.MASTER_CLOSE_REGION_THREADS_DEFAULT));<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>    this.executorService.startExecutorService(ExecutorType.MASTER_SERVER_OPERATIONS,<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>      conf.getInt(HConstants.MASTER_SERVER_OPERATIONS_THREADS,<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>        HConstants.MASTER_SERVER_OPERATIONS_THREADS_DEFAULT));<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>    this.executorService.startExecutorService(ExecutorType.MASTER_META_SERVER_OPERATIONS,<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      conf.getInt(HConstants.MASTER_META_SERVER_OPERATIONS_THREADS,<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>        HConstants.MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT));<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>    this.executorService.startExecutorService(ExecutorType.M_LOG_REPLAY_OPS, conf.getInt(<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      HConstants.MASTER_LOG_REPLAY_OPS_THREADS, HConstants.MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT));<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>    this.executorService.startExecutorService(ExecutorType.MASTER_SNAPSHOT_OPERATIONS, conf.getInt(<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      SnapshotManager.SNAPSHOT_POOL_THREADS_KEY, SnapshotManager.SNAPSHOT_POOL_THREADS_DEFAULT));<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span><a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>   // We depend on there being only one instance of this executor running<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>   // at a time.  To do concurrency, would need fencing of enable/disable of<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>   // tables.<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>   // Any time changing this maxThreads to &gt; 1, pls see the comment at<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>   // AccessController#postCompletedCreateTableAction<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>   this.executorService.startExecutorService(ExecutorType.MASTER_TABLE_OPERATIONS, 1);<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>   startProcedureExecutor();<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span><a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    // Create cleaner thread pool<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>    cleanerPool = new DirScanPool(conf);<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>    // Start log cleaner thread<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    int cleanerInterval = conf.getInt("hbase.master.cleaner.interval", 600 * 1000);<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>    this.logCleaner = new LogCleaner(cleanerInterval, this, conf,<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>      getMasterWalManager().getFileSystem(), getMasterWalManager().getOldLogDir(), cleanerPool);<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>    getChoreService().scheduleChore(logCleaner);<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span><a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>    // start the hfile archive cleaner thread<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>    Path archiveDir = HFileArchiveUtil.getArchivePath(conf);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    Map&lt;String, Object&gt; params = new HashMap&lt;&gt;();<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>    params.put(MASTER, this);<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    this.hfileCleaner = new HFileCleaner(cleanerInterval, this, conf,<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>      getMasterFileSystem().getFileSystem(), archiveDir, cleanerPool, params);<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>    getChoreService().scheduleChore(hfileCleaner);<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    replicationBarrierCleaner = new ReplicationBarrierCleaner(conf, this, getConnection(),<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      replicationPeerManager);<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>    getChoreService().scheduleChore(replicationBarrierCleaner);<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span><a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>    final boolean isSnapshotChoreEnabled = this.snapshotCleanupTracker<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        .isSnapshotCleanupEnabled();<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>    this.snapshotCleanerChore = new SnapshotCleanerChore(this, conf, getSnapshotManager());<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>    if (isSnapshotChoreEnabled) {<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>      getChoreService().scheduleChore(this.snapshotCleanerChore);<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>    } else {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>      if (LOG.isTraceEnabled()) {<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        LOG.trace("Snapshot Cleaner Chore is disabled. Not starting up the chore..");<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      }<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    }<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>    serviceStarted = true;<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>    if (LOG.isTraceEnabled()) {<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>      LOG.trace("Started service threads");<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>    }<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>  }<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span><a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>  @Override<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>  protected void stopServiceThreads() {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>    if (masterJettyServer != null) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      LOG.info("Stopping master jetty server");<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      try {<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        masterJettyServer.stop();<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>      } catch (Exception e) {<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        LOG.error("Failed to stop master jetty server", e);<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>      }<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>    }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>    stopChores();<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    if (this.mobCompactThread != null) {<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>      this.mobCompactThread.close();<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    super.stopServiceThreads();<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>    if (cleanerPool != null) {<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>      cleanerPool.shutdownNow();<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>      cleanerPool = null;<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span>    }<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    super.stopServiceThreads();<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    if (cleanerPool != null) {<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>      cleanerPool.shutdownNow();<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      cleanerPool = null;<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    }<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span><a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    LOG.debug("Stopping service threads");<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    if (this.quotaManager != null) {<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>      this.quotaManager.stop();<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    }<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span><a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    if (this.activeMasterManager != null) {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      this.activeMasterManager.stop();<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>    if (this.serverManager != null) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      this.serverManager.stop();<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    if (this.assignmentManager != null) {<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>      this.assignmentManager.stop();<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    stopProcedureExecutor();<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span><a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    if (this.walManager != null) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      this.walManager.stop();<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>    if (this.fileSystemManager != null) {<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      this.fileSystemManager.stop();<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>    }<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    if (this.mpmHost != null) {<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      this.mpmHost.stop("server shutting down.");<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    }<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    if (this.regionServerTracker != null) {<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>      this.regionServerTracker.stop();<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    }<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>  }<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span><a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>  private void createProcedureExecutor() throws IOException {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>    MasterProcedureEnv procEnv = new MasterProcedureEnv(this);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>    procedureStore =<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      new WALProcedureStore(conf, new MasterProcedureEnv.WALStoreLeaseRecovery(this));<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    procedureStore.registerListener(new ProcedureStoreListener() {<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span><a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>      @Override<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>      public void abortProcess() {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>        abort("The Procedure Store lost the lease", null);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>      }<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>    });<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>    MasterProcedureScheduler procedureScheduler = procEnv.getProcedureScheduler();<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    procedureExecutor = new ProcedureExecutor&lt;&gt;(conf, procEnv, procedureStore, procedureScheduler);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    configurationManager.registerObserver(procEnv);<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span><a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    int cpus = Runtime.getRuntime().availableProcessors();<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    final int numThreads = conf.getInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, Math.max(<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>      (cpus &gt; 0 ? cpus / 4 : 0), MasterProcedureConstants.DEFAULT_MIN_MASTER_PROCEDURE_THREADS));<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    final boolean abortOnCorruption =<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      conf.getBoolean(MasterProcedureConstants.EXECUTOR_ABORT_ON_CORRUPTION,<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>        MasterProcedureConstants.DEFAULT_EXECUTOR_ABORT_ON_CORRUPTION);<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>    procedureStore.start(numThreads);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>    // Just initialize it but do not start the workers, we will start the workers later by calling<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    // startProcedureExecutor. See the javadoc for finishActiveMasterInitialization for more<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    // details.<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    procedureExecutor.init(numThreads, abortOnCorruption);<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    procEnv.getRemoteDispatcher().start();<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>  }<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span><a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>  private void startProcedureExecutor() throws IOException {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    procedureExecutor.startWorkers();<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>  }<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span><a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>  /**<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>   * Turn on/off Snapshot Cleanup Chore<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>   *<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>   * @param on indicates whether Snapshot Cleanup Chore is to be run<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>   */<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>  void switchSnapshotCleanup(final boolean on, final boolean synchronous) {<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    if (synchronous) {<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      synchronized (this.snapshotCleanerChore) {<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>        switchSnapshotCleanup(on);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    } else {<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      switchSnapshotCleanup(on);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>    }<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  }<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>  private void switchSnapshotCleanup(final boolean on) {<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>    try {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      snapshotCleanupTracker.setSnapshotCleanupEnabled(on);<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      if (on) {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>        if (!getChoreService().isChoreScheduled(this.snapshotCleanerChore)) {<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>          getChoreService().scheduleChore(this.snapshotCleanerChore);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>        }<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      } else {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>        getChoreService().cancelChore(this.snapshotCleanerChore);<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      }<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>    } catch (KeeperException e) {<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>      LOG.error("Error updating snapshot cleanup mode to {}", on, e);<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    }<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span><a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  private void stopProcedureExecutor() {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    if (procedureExecutor != null) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      configurationManager.deregisterObserver(procedureExecutor.getEnvironment());<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>      procedureExecutor.getEnvironment().getRemoteDispatcher().stop();<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      procedureExecutor.stop();<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      procedureExecutor.join();<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>      procedureExecutor = null;<a name="line.1613"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    LOG.debug("Stopping service threads");<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span><a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>    if (this.quotaManager != null) {<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      this.quotaManager.stop();<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    }<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span><a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>    if (this.activeMasterManager != null) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>      this.activeMasterManager.stop();<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    }<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>    if (this.serverManager != null) {<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>      this.serverManager.stop();<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>    }<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    if (this.assignmentManager != null) {<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>      this.assignmentManager.stop();<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>    }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span><a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    stopProcedureExecutor();<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span><a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    if (this.walManager != null) {<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      this.walManager.stop();<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>    }<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    if (this.fileSystemManager != null) {<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      this.fileSystemManager.stop();<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>    if (this.mpmHost != null) {<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      this.mpmHost.stop("server shutting down.");<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    }<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>    if (this.regionServerTracker != null) {<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      this.regionServerTracker.stop();<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    }<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  }<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span><a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  private void createProcedureExecutor() throws IOException {<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>    MasterProcedureEnv procEnv = new MasterProcedureEnv(this);<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    procedureStore =<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      new WALProcedureStore(conf, new MasterProcedureEnv.WALStoreLeaseRecovery(this));<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>    procedureStore.registerListener(new ProcedureStoreListener() {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>      @Override<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>      public void abortProcess() {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>        abort("The Procedure Store lost the lease", null);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      }<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>    });<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>    MasterProcedureScheduler procedureScheduler = procEnv.getProcedureScheduler();<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>    procedureExecutor = new ProcedureExecutor&lt;&gt;(conf, procEnv, procedureStore, procedureScheduler);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    configurationManager.registerObserver(procEnv);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span><a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    int cpus = Runtime.getRuntime().availableProcessors();<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>    final int numThreads = conf.getInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, Math.max(<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>      (cpus &gt; 0 ? cpus / 4 : 0), MasterProcedureConstants.DEFAULT_MIN_MASTER_PROCEDURE_THREADS));<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>    final boolean abortOnCorruption =<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>      conf.getBoolean(MasterProcedureConstants.EXECUTOR_ABORT_ON_CORRUPTION,<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>        MasterProcedureConstants.DEFAULT_EXECUTOR_ABORT_ON_CORRUPTION);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>    procedureStore.start(numThreads);<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    // Just initialize it but do not start the workers, we will start the workers later by calling<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>    // startProcedureExecutor. See the javadoc for finishActiveMasterInitialization for more<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    // details.<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    procedureExecutor.init(numThreads, abortOnCorruption);<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>    procEnv.getRemoteDispatcher().start();<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>  }<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span><a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>  private void startProcedureExecutor() throws IOException {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>    procedureExecutor.startWorkers();<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>  }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>  /**<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>   * Turn on/off Snapshot Cleanup Chore<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>   *<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>   * @param on indicates whether Snapshot Cleanup Chore is to be run<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>   */<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>  void switchSnapshotCleanup(final boolean on, final boolean synchronous) {<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>    if (synchronous) {<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      synchronized (this.snapshotCleanerChore) {<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        switchSnapshotCleanup(on);<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      }<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>    } else {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      switchSnapshotCleanup(on);<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span><a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>  private void switchSnapshotCleanup(final boolean on) {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    try {<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>      snapshotCleanupTracker.setSnapshotCleanupEnabled(on);<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      if (on) {<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        if (!getChoreService().isChoreScheduled(this.snapshotCleanerChore)) {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>          getChoreService().scheduleChore(this.snapshotCleanerChore);<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>        }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      } else {<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>        getChoreService().cancelChore(this.snapshotCleanerChore);<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      }<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>    } catch (KeeperException e) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>      LOG.error("Error updating snapshot cleanup mode to {}", on, e);<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    }<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>  }<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span><a name="line.1600"></a>
+<span class="sourceLineNo">1601</span><a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>  private void stopProcedureExecutor() {<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    if (procedureExecutor != null) {<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      configurationManager.deregisterObserver(procedureExecutor.getEnvironment());<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      procedureExecutor.getEnvironment().getRemoteDispatcher().stop();<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>      procedureExecutor.stop();<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      procedureExecutor.join();<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      procedureExecutor = null;<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>    }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span><a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>    if (procedureStore != null) {<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>      procedureStore.stop(isAborted());<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>      procedureStore = null;<a name="line.1613"></a>
 <span class="sourceLineNo">1614</span>    }<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span><a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    if (procedureStore != null) {<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>      procedureStore.stop(isAborted());<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>      procedureStore = null;<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    }<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>  }<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span><a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>  private void stopChores() {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    ChoreService choreService = getChoreService();<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    if (choreService != null) {<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      choreService.cancelChore(this.expiredMobFileCleanerChore);<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>      choreService.cancelChore(this.mobCompactChore);<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>      choreService.cancelChore(this.balancerChore);<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>      choreService.cancelChore(this.normalizerChore);<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>      choreService.cancelChore(this.clusterStatusChore);<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      choreService.cancelChore(this.catalogJanitorChore);<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>      choreService.cancelChore(this.clusterStatusPublisherChore);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      choreService.cancelChore(this.snapshotQuotaChore);<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      choreService.cancelChore(this.logCleaner);<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>      choreService.cancelChore(this.hfileCleaner);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      choreService.cancelChore(this.replicationBarrierCleaner);<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      choreService.cancelChore(this.snapshotCleanerChore);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>      choreService.cancelChore(this.hbckChore);<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    }<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>  }<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span><a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>  /**<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>   * @return Get remote side's InetAddress<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>   */<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>  InetAddress getRemoteInetAddress(final int port,<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      final long serverStartCode) throws UnknownHostException {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>    // Do it out here in its own little method so can fake an address when<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>    // mocking up in tests.<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    InetAddress ia = RpcServer.getRemoteIp();<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span><a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    // The call could be from the local regionserver,<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    // in which case, there is no remote address.<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    if (ia == null &amp;&amp; serverStartCode == startcode) {<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>      InetSocketAddress isa = rpcServices.getSocketAddress();<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>      if (isa != null &amp;&amp; isa.getPort() == port) {<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>        ia = isa.getAddress();<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      }<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    return ia;<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>  }<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span><a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>  /**<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>   * @return Maximum time we should run balancer for<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>   */<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>  private int getMaxBalancingTime() {<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>    int maxBalancingTime = getConfiguration().getInt(HConstants.HBASE_BALANCER_MAX_BALANCING, -1);<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>    if (maxBalancingTime == -1) {<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      // if max balancing time isn't set, defaulting it to period time<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      maxBalancingTime = getConfiguration().getInt(HConstants.HBASE_BALANCER_PERIOD,<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>        HConstants.DEFAULT_HBASE_BALANCER_PERIOD);<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>    }<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    return maxBalancingTime;<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  }<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span><a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>  /**<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>   * @return Maximum number of regions in transition<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>   */<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>  private int getMaxRegionsInTransition() {<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>    int numRegions = this.assignmentManager.getRegionStates().getRegionAssignments().size();<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>    return Math.max((int) Math.floor(numRegions * this.maxRitPercent), 1);<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>  }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>  /**<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>   * It first sleep to the next balance plan start time. Meanwhile, throttling by the max<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>   * number regions in transition to protect availability.<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>   * @param nextBalanceStartTime The next balance plan start time<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>   * @param maxRegionsInTransition max number of regions in transition<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>   * @param cutoffTime when to exit balancer<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>   */<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>  private void balanceThrottling(long nextBalanceStartTime, int maxRegionsInTransition,<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      long cutoffTime) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    boolean interrupted = false;<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span><a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>    // Sleep to next balance plan start time<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>    // But if there are zero regions in transition, it can skip sleep to speed up.<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>    while (!interrupted &amp;&amp; System.currentTimeMillis() &lt; nextBalanceStartTime<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        &amp;&amp; this.assignmentManager.getRegionStates().hasRegionsInTransition()) {<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      try {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>        Thread.sleep(100);<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>      } catch (InterruptedException ie) {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>        interrupted = true;<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>      }<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>    }<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span><a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>    // Throttling by max number regions in transition<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    while (!interrupted<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>        &amp;&amp; maxRegionsInTransition &gt; 0<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>        &amp;&amp; this.assignmentManager.getRegionStates().getRegionsInTransitionCount()<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>        &gt;= maxRegionsInTransition &amp;&amp; System.currentTimeMillis() &lt;= cutoffTime) {<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>      try {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>        // sleep if the number of regions in transition exceeds the limit<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>        Thread.sleep(100);<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>      } catch (InterruptedException ie) {<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>        interrupted = true;<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>      }<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    }<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span><a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    if (interrupted) Thread.currentThread().interrupt();<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>  }<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span><a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>  public boolean balance() throws IOException {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>    return balance(false);<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>  }<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span><a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>  public boolean balance(boolean force) throws IOException {<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    // if master not initialized, don't run balancer.<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>    if (!isInitialized()) {<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>      LOG.debug("Master has not been initialized, don't run balancer.");<a name="line.1727"></a>
+<span class="sourceLineNo">1615</span>  }<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span><a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>  private void stopChores() {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>    ChoreService choreService = getChoreService();<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>    if (choreService != null) {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>      choreService.cancelChore(this.expiredMobFileCleanerChore);<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>      choreService.cancelChore(this.mobCompactChore);<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      choreService.cancelChore(this.balancerChore);<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>      choreService.cancelChore(this.normalizerChore);<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      choreService.cancelChore(this.clusterStatusChore);<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      choreService.cancelChore(this.catalogJanitorChore);<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      choreService.cancelChore(this.clusterStatusPublisherChore);<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      choreService.cancelChore(this.snapshotQuotaChore);<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      choreService.cancelChore(this.logCleaner);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      choreService.cancelChore(this.hfileCleaner);<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      choreService.cancelChore(this.replicationBarrierCleaner);<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>      choreService.cancelChore(this.snapshotCleanerChore);<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      choreService.cancelChore(this.hbckChore);<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>    }<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>  }<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span><a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  /**<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>   * @return Get remote side's InetAddress<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>   */<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>  InetAddress getRemoteInetAddress(final int port,<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>      final long serverStartCode) throws UnknownHostException {<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>    // Do it out here in its own little method so can fake an address when<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>    // mocking up in tests.<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    InetAddress ia = RpcServer.getRemoteIp();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span><a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    // The call could be from the local regionserver,<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>    // in which case, there is no remote address.<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>    if (ia == null &amp;&amp; serverStartCode == startcode) {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>      InetSocketAddress isa = rpcServices.getSocketAddress();<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      if (isa != null &amp;&amp; isa.getPort() == port) {<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>        ia = isa.getAddress();<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      }<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>    }<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>    return ia;<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>  }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span><a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>  /**<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>   * @return Maximum time we should run balancer for<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>   */<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>  private int getMaxBalancingTime() {<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    int maxBalancingTime = getConfiguration().getInt(HConstants.HBASE_BALANCER_MAX_BALANCING, -1);<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    if (maxBalancingTime == -1) {<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      // if max balancing time isn't set, defaulting it to period time<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>      maxBalancingTime = getConfiguration().getInt(HConstants.HBASE_BALANCER_PERIOD,<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>        HConstants.DEFAULT_HBASE_BALANCER_PERIOD);<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    }<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    return maxBalancingTime;<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>  }<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span><a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>  /**<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>   * @return Maximum number of regions in transition<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>   */<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>  private int getMaxRegionsInTransition() {<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>    int numRegions = this.assignmentManager.getRegionStates().getRegionAssignments().size();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>    return Math.max((int) Math.floor(numRegions * this.maxRitPercent), 1);<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>  }<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span><a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>  /**<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>   * It first sleep to the next balance plan start time. Meanwhile, throttling by the max<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>   * number regions in transition to protect availability.<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>   * @param nextBalanceStartTime The next balance plan start time<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>   * @param maxRegionsInTransition max number of regions in transition<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>   * @param cutoffTime when to exit balancer<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>   */<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>  private void balanceThrottling(long nextBalanceStartTime, int maxRegionsInTransition,<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      long cutoffTime) {<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>    boolean interrupted = false;<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span><a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>    // Sleep to next balance plan start time<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>    // But if there are zero regions in transition, it can skip sleep to speed up.<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>    while (!interrupted &amp;&amp; System.currentTimeMillis() &lt; nextBalanceStartTime<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        &amp;&amp; this.assignmentManager.getRegionStates().hasRegionsInTransition()) {<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      try {<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>        Thread.sleep(100);<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      } catch (InterruptedException ie) {<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>        interrupted = true;<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>      }<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>    }<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span><a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    // Throttling by max number regions in transition<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    while (!interrupted<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>        &amp;&amp; maxRegionsInTransition &gt; 0<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        &amp;&amp; this.assignmentManager.getRegionStates().getRegionsInTransitionCount()<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>        &gt;= maxRegionsInTransition &amp;&amp; System.currentTimeMillis() &lt;= cutoffTime) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>      try {<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>        // sleep if the number of regions in transition exceeds the limit<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>        Thread.sleep(100);<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>      } catch (InterruptedException ie) {<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>        interrupted = true;<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>      }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>    }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span><a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    if (interrupted) Thread.currentThread().interrupt();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>  }<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span><a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>  public boolean balance() throws IOException {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>    return balance(false);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>  }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span><a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>  public boolean balance(boolean force) throws IOException {<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>    // if master not initialized, don't run balancer.<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    if (!isInitialized()) {<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>      LOG.debug("Master has not been initialized, don't run balancer.");<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      return false;<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>    }<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span><a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>    if (isInMaintenanceMode()) {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>      LOG.info("Master is in maintenanceMode mode, don't run balancer.");<a name="line.1727"></a>
 <span class="sourceLineNo">1728</span>      return false;<a name="line.1728"></a>
 <span class="sourceLineNo">1729</span>    }<a name="line.1729"></a>
 <span class="sourceLineNo">1730</span><a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>    if (isInMaintenanceMode()) {<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      LOG.info("Master is in maintenanceMode mode, don't run balancer.");<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      return false;<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>    }<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span><a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>    synchronized (this.balancer) {<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>      // If balance not true, don't run balancer.<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      if (!this.loadBalancerTracker.isBalancerOn()) return false;<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>        // Only allow one balance run at at time.<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>      if (this.assignmentManager.hasRegionsInTransition()) {<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>        List&lt;RegionStateNode&gt; regionsInTransition = assignmentManager.getRegionsInTransition();<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        // if hbase:meta region is in transition, result of assignment cannot be recorded<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>        // ignore the force flag in that case<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        boolean metaInTransition = assignmentManager.isMetaRegionInTransition();<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        String prefix = force &amp;&amp; !metaInTransition ? "R" : "Not r";<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        List&lt;RegionStateNode&gt; toPrint = regionsInTransition;<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>        int max = 5;<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>        boolean truncated = false;<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        if (regionsInTransition.size() &gt; max) {<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>          toPrint = regionsInTransition.subList(0, max);<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>          truncated = true;<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>        LOG.info(prefix + "unning balancer because " + regionsInTransition.size() +<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>          " region(s) in transition: " + toPrint + (truncated? "(truncated list)": ""));<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        if (!force || metaInTransition) return false;<a name="line.1755"></a>
+<span class="sourceLineNo">1731</span>    synchronized (this.balancer) {<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>      // If balance not true, don't run balancer.<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>      if (!this.loadBalancerTracker.isBalancerOn()) return false;<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>        // Only allow one balance run at at time.<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>      if (this.assignmentManager.hasRegionsInTransition()) {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>        List&lt;RegionStateNode&gt; regionsInTransition = assignmentManager.getRegionsInTransition();<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        // if hbase:meta region is in transition, result of assignment cannot be recorded<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>        // ignore the force flag in that case<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        boolean metaInTransition = assignmentManager.isMetaRegionInTransition();<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>        String prefix = force &amp;&amp; !metaInTransition ? "R" : "Not r";<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        List&lt;RegionStateNode&gt; toPrint = regionsInTransition;<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        int max = 5;<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        boolean truncated = false;<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        if (regionsInTransition.size() &gt; max) {<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>          toPrint = regionsInTransition.subList(0, max);<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>          truncated = true;<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>        }<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        LOG.info(prefix + "unning balancer because " + regionsInTransition.size() +<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>          " region(s) in transition: " + toPrint + (truncated? "(truncated list)": ""));<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>        if (!force || metaInTransition) return false;<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>      }<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>      if (this.serverManager.areDeadServersInProgress()) {<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        LOG.info("Not running balancer because processing dead regionserver(s): " +<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>          this.serverManager.getDeadServers());<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        return false;<a name="line.1755"></a>
 <span class="sourceLineNo">1756</span>      }<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      if (this.serverManager.areDeadServersInProgress()) {<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>        LOG.info("Not running balancer because processing dead regionserver(s): " +<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>          this.serverManager.getDeadServers());<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        return false;<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span><a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>      if (this.cpHost != null) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>        try {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>          if (this.cpHost.preBalance()) {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>            LOG.debug("Coprocessor bypassing balancer request");<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>            return false;<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>          }<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>        } catch (IOException ioe) {<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>          LOG.error("Error invoking master coprocessor preBalance()", ioe);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>          return false;<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>        }<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>      }<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span><a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      boolean isByTable = getConfiguration().getBoolean("hbase.master.loadbalance.bytable", false);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; assignments =<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>          this.assignmentManager.getRegionStates().getAssignmentsForBalancer(isByTable);<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>      for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; serverMap : assignments.values()) {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>        serverMap.keySet().removeAll(this.serverManager.getDrainingServersList());<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>      }<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span><a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>      //Give the balancer the current cluster state.<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>      this.balancer.setClusterLoad(assignments);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span><a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>      List&lt;RegionPlan&gt; plans = new ArrayList&lt;&gt;();<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      for (Entry&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; e : assignments.entrySet()) {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>        List&lt;RegionPlan&gt; partialPlans = this.balancer.balanceCluster(e.getKey(), e.getValue());<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>        if (partialPlans != null) {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>          plans.addAll(partialPlans);<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>        }<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      }<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span><a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>      List&lt;RegionPlan&gt; sucRPs = executeRegionPlansWithThrottling(plans);<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>      if (this.cpHost != null) {<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>        try {<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>          this.cpHost.postBalance(sucRPs);<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        } catch (IOException ioe) {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          // balancing already succeeded so don't change the result<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          LOG.error("Error invoking master coprocessor postBalance()", ioe);<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>        }<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>      }<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    }<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>    // If LoadBalancer did not generate any plans, it means the cluster is already balanced.<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>    // Return true indicating a success.<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>    return true;<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  public List&lt;RegionPlan&gt; executeRegionPlansWithThrottling(List&lt;RegionPlan&gt; plans) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    List&lt;RegionPlan&gt; sucRPs = new ArrayList&lt;&gt;();<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>    int maxRegionsInTransition = getMaxRegionsInTransition();<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>    long balanceStartTime = System.currentTimeMillis();<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>    long cutoffTime = balanceStartTime + this.maxBlancingTime;<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    int rpCount = 0;  // number of RegionPlans balanced so far<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>    if (plans != null &amp;&amp; !plans.isEmpty()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      int balanceInterval = this.maxBlancingTime / plans.size();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      LOG.info("Balancer plans size is " + plans.size() + ", the balance interval is "<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>          + balanceInterval + " ms, and the max number regions in transition is "<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>          + maxRegionsInTransition);<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span><a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>      for (RegionPlan plan: plans) {<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.info("balance " + plan);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>        //TODO: bulk assign<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>        try {<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>          this.assignmentManager.moveAsync(plan);<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>        } catch (HBaseIOException hioe) {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>          //should ignore failed plans here, avoiding the whole balance plans be aborted<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          //later calls of balance() can fetch up the failed and skipped plans<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>          LOG.warn("Failed balance plan: {}, just skip it", plan, hioe);<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>        }<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        //rpCount records balance plans processed, does not care if a plan succeeds<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        rpCount++;<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span><a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>        balanceThrottling(balanceStartTime + rpCount * balanceInterval, maxRegionsInTransition,<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>            cutoffTime);<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span><a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>        // if performing next balance exceeds cutoff time, exit the loop<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>        if (rpCount &lt; plans.size() &amp;&amp; System.currentTimeMillis() &gt; cutoffTime) {<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>          // TODO: After balance, there should not be a cutoff time (keeping it as<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>          // a security net for now)<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>          LOG.debug("No more balancing till next balance run; maxBalanceTime="<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>              + this.maxBlancingTime);<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>          break;<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>        }<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>      }<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    }<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>    return sucRPs;<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>  }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span><a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>  @Override<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>  @VisibleForTesting<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>  public RegionNormalizer getRegionNormalizer() {<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>    return this.normalizer;<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>  }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span><a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>  /**<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>   * Perform normalization of cluster (invoked by {@link RegionNormalizerChore}).<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>   *<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>   * @return true if normalization step was performed successfully, false otherwise<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>   *    (specifically, if HMaster hasn't been initialized properly or normalization<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>   *    is globally disabled)<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>   */<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>  public boolean normalizeRegions() throws IOException {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    if (!isInitialized()) {<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>      LOG.debug("Master has not been initialized, don't run region normalizer.");<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      return false;<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>    }<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>    if (this.getServerManager().isClusterShutdown()) {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>      LOG.info("Cluster is shutting down, don't run region normalizer.");<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      return false;<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>    }<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>    if (isInMaintenanceMode()) {<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      LOG.info("Master is in maintenance mode, don't run region normalizer.");<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      return false;<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    }<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>    if (!this.regionNormalizerTracker.isNormalizerOn()) {<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>      LOG.debug("Region normalization is disabled, don't run region normalizer.");<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>      return false;<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1757</span><a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      if (this.cpHost != null) {<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>        try {<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>          if (this.cpHost.preBalance()) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>            LOG.debug("Coprocessor bypassing balancer request");<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>            return false;<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>          }<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>        } catch (IOException ioe) {<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>          LOG.error("Error invoking master coprocessor preBalance()", ioe);<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>          return false;<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>        }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>      }<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span><a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>      boolean isByTable = getConfiguration().getBoolean("hbase.master.loadbalance.bytable", false);<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>      Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; assignments =<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>          this.assignmentManager.getRegionStates().getAssignmentsForBalancer(isByTable);<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>      for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; serverMap : assignments.values()) {<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>        serverMap.keySet().removeAll(this.serverManager.getDrainingServersList());<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>      }<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span><a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>      //Give the balancer the current cluster state.<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>      this.balancer.setClusterMetrics(getClusterMetricsWithoutCoprocessor());<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>      this.balancer.setClusterLoad(assignments);<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span><a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>      List&lt;RegionPlan&gt; plans = new ArrayList&lt;&gt;();<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>      for (Entry&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; e : assignments.entrySet()) {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>        List&lt;RegionPlan&gt; partialPlans = this.balancer.balanceCluster(e.getKey(), e.getValue());<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>        if (partialPlans != null) {<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>          plans.addAll(partialPlans);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>        }<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>      }<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span><a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      List&lt;RegionPlan&gt; sucRPs = executeRegionPlansWithThrottling(plans);<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span><a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>      if (this.cpHost != null) {<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>        try {<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>          this.cpHost.postBalance(sucRPs);<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>        } catch (IOException ioe) {<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>          // balancing already succeeded so don't change the result<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>          LOG.error("Error invoking master coprocessor postBalance()", ioe);<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>        }<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>      }<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>    }<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    // If LoadBalancer did not generate any plans, it means the cluster is already balanced.<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    // Return true indicating a success.<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    return true;<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>  }<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span><a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>  public List&lt;RegionPlan&gt; executeRegionPlansWithThrottling(List&lt;RegionPlan&gt; plans) {<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>    List&lt;RegionPlan&gt; sucRPs = new ArrayList&lt;&gt;();<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    int maxRegionsInTransition = getMaxRegionsInTransition();<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>    long balanceStartTime = System.currentTimeMillis();<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    long cutoffTime = balanceStartTime + this.maxBlancingTime;<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    int rpCount = 0;  // number of RegionPlans balanced so far<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    if (plans != null &amp;&amp; !plans.isEmpty()) {<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      int balanceInterval = this.maxBlancingTime / plans.size();<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      LOG.info("Balancer plans size is " + plans.size() + ", the balance interval is "<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>          + balanceInterval + " ms, and the max number regions in transition is "<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>          + maxRegionsInTransition);<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span><a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>      for (RegionPlan plan: plans) {<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>        LOG.info("balance " + plan);<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>        //TODO: bulk assign<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>        try {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>          this.assignmentManager.moveAsync(plan);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        } catch (HBaseIOException hioe) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>          //should ignore failed plans here, avoiding the whole balance plans be aborted<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>          //later calls of balance() can fetch up the failed and skipped plans<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>          LOG.warn("Failed balance plan: {}, just skip it", plan, hioe);<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>        }<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>        //rpCount records balance plans processed, does not care if a plan succeeds<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>        rpCount++;<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span><a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>        balanceThrottling(balanceStartTime + rpCount * balanceInterval, maxRegionsInTransition,<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>            cutoffTime);<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span><a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>        // if performing next balance exceeds cutoff time, exit the loop<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>        if (rpCount &lt; plans.size() &amp;&amp; System.currentTimeMillis() &gt; cutoffTime) {<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>          // TODO: After balance, there should not be a cutoff time (keeping it as<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>          // a security net for now)<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>          LOG.debug("No more balancing till next balance run; maxBalanceTime="<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>              + this.maxBlancingTime);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>          break;<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>        }<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>      }<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>    }<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>    return sucRPs;<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>  }<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span><a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  @Override<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>  @VisibleForTesting<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>  public RegionNormalizer getRegionNormalizer() {<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    return this.normalizer;<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  /**<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>   * Perform normalization of cluster (invoked by {@link RegionNormalizerChore}).<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>   *<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>   * @return true if normalization step was performed successfully, false otherwise<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>   *    (specifically, if HMaster hasn't been initialized properly or normalization<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>   *    is globally disabled)<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>   */<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>  public boolean normalizeRegions() throws IOException {<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>    if (!isInitialized()) {<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      LOG.debug("Master has not been initialized, don't run region normalizer.");<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      return false;<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    }<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    if (this.getServerManager().isClusterShutdown()) {<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      LOG.info("Cluster is shutting down, don't run region normalizer.");<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      return false;<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    }<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    if (isInMaintenanceMode()) {<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      LOG.info("Master is in maintenance mode, don't run region normalizer.");<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      return false;<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    }<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>    if (!this.regionNormalizerTracker.isNormalizerOn()) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      LOG.debug("Region normalization is disabled, don't run region normalizer.");<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      return false;<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span><a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>    synchronized (this.normalizer) {<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      // Don't run the normalizer concurrently<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      List&lt;TableName&gt; allEnabledTables = new ArrayList&lt;&gt;(<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>        this.tableStateManager.getTablesInStates(TableState.State.ENABLED));<a name="line.1880"></a>
 <span class="sourceLineNo">1881</span><a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>    synchronized (this.normalizer) {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>      // Don't run the normalizer concurrently<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>      List&lt;TableName&gt; allEnabledTables = new ArrayList&lt;&gt;(<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>        this.tableStateManager.getTablesInStates(TableState.State.ENABLED));<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span><a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>      Collections.shuffle(allEnabledTables);<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span><a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>      for (TableName table : allEnabledTables) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>        if (isInMaintenanceMode()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>          LOG.debug("Master is in maintenance mode, stop running region normalizer.");<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>          return false;<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        }<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span><a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        TableDescriptor tblDesc = getTableDescriptors().get(table);<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>        if (table.isSystemTable() || (tblDesc != null &amp;&amp;<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>            !tblDesc.isNormalizationEnabled())) {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>          LOG.trace("Skipping normalization for {}, as it's either system"<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>              + " table or doesn't have auto normalization turned on", table);<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>          continue;<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>        }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        List&lt;NormalizationPlan&gt; plans = this.normalizer.computePlanForTable(table);<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>        if (plans != null) {<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>          for (NormalizationPlan plan : plans) {<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>            plan.execute(asyncClusterConnection.toConnection().getAdmin());<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>            if (plan.getType() == PlanType.SPLIT) {<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>              splitPlanCount++;<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>            } else if (plan.getType() == PlanType.MERGE) {<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>              mergePlanCount++;<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>            }<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>          }<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>        }<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      }<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>    }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    // If Region did not generate any plans, it means the cluster is already balanced.<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    // Return true indicating a success.<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>    return true;<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>  }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span><a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>  /**<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>   * @return Client info for use as prefix on an audit log string; who did an action<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>   */<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>  @Override<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>  public String getClientIdAuditPrefix() {<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    return "Client=" + RpcServer.getRequestUserName().orElse(null)<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>        + "/" + RpcServer.getRemoteAddress().orElse(null);<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>  }<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span><a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>  /**<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>   * Switch for the background CatalogJanitor thread.<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>   * Used for testing.  The thread will continue to run.  It will just be a noop<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>   * if disabled.<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>   * @param b If false, the catalog janitor won't do anything.<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>   */<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  public void setCatalogJanitorEnabled(final boolean b) {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>    this.catalogJanitorChore.setEnabled(b);<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>  }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span><a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>  @Override<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  public long mergeRegions(<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      final RegionInfo[] regionsToMerge,<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>      final boolean forcible,<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      final long ng,<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      final long nonce) throws IOException {<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>    checkInitialized();<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span><a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>    final String mergeRegionsStr = Arrays.stream(regionsToMerge).<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>      map(r -&gt; RegionInfo.getShortNameToLog(r)).collect(Collectors.joining(", "));<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    return MasterProcedureUtil.submitProcedure(new NonceProcedureRunnable(this, ng, nonce) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>      @Override<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>      protected void run() throws IOException {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>        getMaster().getMasterCoprocessorHost().preMergeRegions(regionsToMerge);<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>        String aid = getClientIdAuditPrefix();<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>        LOG.info("{} merge regions {}", aid, mergeRegionsStr);<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>        submitProcedure(new MergeTableRegionsProcedure(procedureExecutor.getEnvironment(),<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>            regionsToMerge, forcible));<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>        getMaster().getMasterCoprocessorHost().postMergeRegions(regionsToMerge);<a name="line.1957"></a>
+<span class="sourceLineNo">1882</span>      Collections.shuffle(allEnabledTables);<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>      for (TableName table : allEnabledTables) {<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>        if (isInMaintenanceMode()) {<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>          LOG.debug("Master is in maintenance mode, stop running region normalizer.");<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>          return false;<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>        }<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>        TableDescriptor tblDesc = getTableDescriptors().get(table);<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>        if (table.isSystemTable() || (tblDesc != null &amp;&amp;<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>            !tblDesc.isNormalizationEnabled())) {<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>          LOG.trace("Skipping normalization for {}, as it's either system"<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>              + " table or doesn't have auto normalization turned on", table);<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>          continue;<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>        }<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>        List&lt;NormalizationPlan&gt; plans = this.normalizer.computePlanForTable(table);<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>        if (plans != null) {<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>          for (NormalizationPlan plan : plans) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>            plan.execute(asyncClusterConnection.toConnection().getAdmin());<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>            if (plan.getType() == PlanType.SPLIT) {<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>              splitPlanCount++;<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>            } else if (plan.getType() == PlanType.MERGE) {<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>              mergePlanCount++;<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>            }<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>          }<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>        }<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>      }<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>    }<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>    // If Region did not generate any plans, it means the cluster is already balanced.<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>    // Return true indicating a success.<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>    return true;<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>  }<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span><a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>  /**<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>   * @return Client info for use as prefix on an audit log string; who did an action<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>   */<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>  @Override<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>  public String getClientIdAuditPrefix() {<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    return "Client=" + RpcServer.getRequestUserName().orElse(null)<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>        + "/" + RpcServer.getRemoteAddress().orElse(null);<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  /**<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>   * Switch for the background CatalogJanitor thread.<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>   * Used for testing.  The thread will continue to run.  It will just be a noop<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>   * if disabled.<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>   * @param b If false, the catalog janitor won't do anything.<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>   */<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>  public void setCatalogJanitorEnabled(final boolean b) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>    this.catalogJanitorChore.setEnabled(b);<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>  }<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span><a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>  @Override<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>  public long mergeRegions(<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>      final RegionInfo[] regionsToMerge,<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>      final boolean forcible,<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>      final long ng,<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>      final long nonce) throws IOException {<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>    checkInitialized();<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span><a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    final String mergeRegionsStr = Arrays.stream(regionsToMerge).<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>      map(r -&gt; RegionInfo.getShortNameToLog(r)).collect(Collectors.joining(", "));<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>    return MasterProcedureUtil.submitProcedure(new NonceProcedureRunnable(this, ng, nonce) {<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      @Override<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>      protected void run() throws IOException {<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>        getMaster().getMasterCoprocessorHost().preMergeRegions(regionsToMerge);<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>        String aid = getClientIdAuditPrefix();<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>        LOG.info("{} merge regions {}", aid, mergeRegionsStr);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>        submitProcedure(new MergeTableRegionsProcedure(procedureExecutor.getEnvironment(),<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>            regionsToMerge, forcible));<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>        getMaster().getMasterCoprocessorHost().postMergeRegions(regionsToMerge);<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>      }<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span><a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>      @Override<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>      protected String getDescription() {<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>        return "MergeTableProcedure";<a name="line.1957"></a>
 <span class="sourceLineNo">1958</span>      }<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span><a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      @Override<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      protected String getDescription() {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        return "MergeTableProcedure";<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      }<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>    });<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>  }<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span><a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>  @Override<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  public long splitRegion(final RegionInfo regionInfo, final byte[] splitRow,<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>      final long nonceGroup, final long nonce)<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  throws IOException {<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>    checkInitialized();<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>    return MasterProcedureUtil.submitProcedure(<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>      @Override<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>      protected void run() throws IOException {<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        getMaster().getMasterCoprocessorHost().preSplitRegion(regionInfo.getTable(), splitRow);<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        LOG.info(getClientIdAuditPrefix() + " split " + regionInfo.getRegionNameAsString());<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span><a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>        // Execute the operation asynchronously<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>        submitProcedure(getAssignmentManager().createSplitProcedure(regionInfo, splitRow));<a name="line.1980"></a>
+<span class="sourceLineNo">1959</span>    });<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>  }<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span><a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>  @Override<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>  public long splitRegion(final RegionInfo regionInfo, final byte[] splitRow,<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      final long nonceGroup, final long nonce)<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>  throws IOException {<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>    checkInitialized();<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>    return MasterProcedureUtil.submitProcedure(<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>      @Override<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>      protected void run() throws IOException {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>        getMaster().getMasterCoprocessorHost().preSplitRegion(regionInfo.getTable(), splitRow);<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>        LOG.info(getClientIdAuditPrefix() + " split " + regionInfo.getRegionNameAsString());<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span><a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>        // Execute the operation asynchronously<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>        submitProcedure(getAssignmentManager().createSplitProcedure(regionInfo, splitRow));<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>      }<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span><a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>      @Override<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>      protected String getDescription() {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>        return "SplitTableProcedure";<a name="line.1980"></a>
 <span class="sourceLineNo">1981</span>      }<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span><a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>      @Override<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>      protected String getDescription() {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>        return "SplitTableProcedure";<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>      }<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    });<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>  }<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span><a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>  private void warmUpRegion(ServerName server, RegionInfo region) {<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    FutureUtils.addListener(asyncClusterConnection.getRegionServerAdmin(server)<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      .warmupRegion(RequestConverter.buildWarmupRegionRequest(region)), (r, e) -&gt; {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        if (e != null) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>          LOG.warn("Failed to warm up region {} on server {}", region, server, e);<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>        }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>      });<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>  }<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>  // Public so can be accessed by tests. Blocks until move is done.<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>  // Replace with an async implementation from which you can get<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>  // a success/failure result.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>  @VisibleForTesting<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>  public void move(final byte[] encodedRegionName, byte[] destServerName) throws HBaseIOException {<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    RegionState regionState = assignmentManager.getRegionStates().<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>      getRegionState(Bytes.toString(encodedRegionName));<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span><a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>    RegionInfo hri;<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    if (regionState != null) {<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>      hri = regionState.getRegion();<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    } else {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      throw new UnknownRegionException(Bytes.toStringBinary(encodedRegionName));<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span><a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>    ServerName dest;<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>    List&lt;ServerName&gt; exclude = hri.getTable().isSystemTable() ? assignmentManager.getExcludedServersForSystemTable()<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>        : new ArrayList&lt;&gt;(1);<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>    if (destServerName != null &amp;&amp; exclude.contains(ServerName.valueOf(Bytes.toString(destServerName)))) {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>      LOG.info(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>          Bytes.toString(encodedRegionName) + " can not move to " + Bytes.toString(destServerName)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>              + " because the server is in exclude list");<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>      destServerName = null;<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>    }<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    if (destServerName == null || destServerName.length == 0) {<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      LOG.info("Passed destination servername is null/empty so " +<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>        "choosing a server at random");<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>      exclude.add(regionState.getServerName());<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      final List&lt;ServerName&gt; destServers = this.serverManager.createDestinationServersList(exclude);<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>      dest = balancer.randomAssignment(hri, destServers);<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      if (dest == null) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.debug("Unable to determine a plan to assign " + hri);<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        return;<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>      }<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>    } else {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>      ServerName candidate = ServerName.valueOf(Bytes.toString(destServerName));<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>      dest = balancer.randomAssignment(hri, Lists.newArrayList(candidate));<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>      if (dest == null) {<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        LOG.debug("Unable to determine a plan to assign " + hri);<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>        return;<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>      }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      // TODO: What is this? I don't get it.<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>      if (dest.equals(serverName) &amp;&amp; balancer instanceof BaseLoadBalancer<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>          &amp;&amp; !((BaseLoadBalancer)balancer).shouldBeOnMaster(hri)) {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>        // To avoid unnecessary region moving later by balancer. Don't put user<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>        // regions on master.<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>        LOG.debug("Skipping move of region " + hri.getRegionNameAsString()<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>          + " to avoid unnecessary region moving later by load balancer,"<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>          + " because it should not be on master");<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>        return;<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      }<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>    }<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span><a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    if (dest.equals(regionState.getServerName())) {<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>      LOG.debug("Skipping move of region " + hri.getRegionNameAsString()<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>        + " because region already assigned to the same server " + dest + ".");<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      return;<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span><a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>    // Now we can do the move<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>    RegionPlan rp = new RegionPlan(hri, regionState.getServerName(), dest);<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>    assert rp.getDestination() != null: rp.toString() + " " + dest;<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span><a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>    try {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      checkInitialized();<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>      if (this.cpHost != null) {<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        this.cpHost.preMove(hri, rp.getSource(), rp.getDestination());<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>      }<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span><a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      TransitRegionStateProcedure proc =<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>        this.assignmentManager.createMoveRegionProcedure(rp.getRegionInfo(), rp.getDestination());<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      // Warmup the region on the destination before initiating the move.<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>      // A region server could reject the close request because it either does not<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      // have the specified region or the region is being split.<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>      warmUpRegion(rp.getDestination(), hri);<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span><a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      LOG.info(getClientIdAuditPrefix() + " move " + rp + ", running balancer");<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      Future&lt;byte[]&gt; future = ProcedureSyncWait.submitProcedure(this.procedureExecutor, proc);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      try {<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>        // Is this going to work? Will we throw exception on error?<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>        // TODO: CompletableFuture rather than this stunted Future.<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>        future.get();<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>      } catch (InterruptedException | ExecutionException e) {<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>        throw new HBaseIOException(e);<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>      }<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>      if (this.cpHost != null) {<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>        this.cpHost.postMove(hri, rp.getSource(), rp.getDestination());<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      }<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    } catch (IOException ioe) {<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>      if (ioe instanceof HBaseIOException) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>        throw (HBaseIOException)ioe;<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      }<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      throw new HBaseIOException(ioe);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>    }<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>  }<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span><a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>  @Override<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>  public long createTable(final TableDescriptor tableDescriptor, final byte[][] splitKeys,<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>    checkInitialized();<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>    TableDescriptor desc = getMasterCoprocessorHost().preCreateTableRegionsInfos(tableDescriptor);<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>    if (desc == null) {<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>      throw new IOException("Creation for " + tableDescriptor + " is canceled by CP");<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>    }<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>    String namespace = desc.getTableName().getNamespaceAsString();<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>    this.clusterSchemaService.getNamespace(namespace);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span><a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>    RegionInfo[] newRegions = ModifyRegionUtils.createRegionInfos(desc, splitKeys);<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    TableDescriptorChecker.sanityCheck(conf, desc);<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span><a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    return MasterProcedureUtil<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      .submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        @Override<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>        protected void run() throws IOException {<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          getMaster().getMasterCoprocessorHost().preCreateTable(desc, newRegions);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span><a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>          LOG.info(getClientIdAuditPrefix() + " create " + desc);<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span><a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          // TODO: We can handle/merge duplicate requests, and differentiate the case of<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>          // TableExistsException by saying if the schema is the same or not.<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          //<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>          // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>          // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>          ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>          submitProcedure(<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>            new CreateTableProcedure(procedureExecutor.getEnvironment(), desc, newRegions, latch));<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>          latch.await();<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span><a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>          getMaster().getMasterCoprocessorHost().postCreateTable(desc, newRegions);<a name="line.2127"></a>
+<span class="sourceLineNo">1982</span>    });<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>  }<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span><a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>  private void warmUpRegion(ServerName server, RegionInfo region) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>    FutureUtils.addListener(asyncClusterConnection.getRegionServerAdmin(server)<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      .warmupRegion(RequestConverter.buildWarmupRegionRequest(region)), (r, e) -&gt; {<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>        if (e != null) {<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>          LOG.warn("Failed to warm up region {} on server {}", region, server, e);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>        }<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>      });<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>  }<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span><a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>  // Public so can be accessed by tests. Blocks until move is done.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>  // Replace with an async implementation from which you can get<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>  // a success/failure result.<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>  @VisibleForTesting<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>  public void move(final byte[] encodedRegionName, byte[] destServerName) throws HBaseIOException {<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>    RegionState regionState = assignmentManager.getRegionStates().<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>      getRegionState(Bytes.toString(encodedRegionName));<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span><a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    RegionInfo hri;<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>    if (regionState != null) {<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>      hri = regionState.getRegion();<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    } else {<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>      throw new UnknownRegionException(Bytes.toStringBinary(encodedRegionName));<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    }<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span><a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    ServerName dest;<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    List&lt;ServerName&gt; exclude = hri.getTable().isSystemTable() ? assignmentManager.getExcludedServersForSystemTable()<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>        : new ArrayList&lt;&gt;(1);<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>    if (destServerName != null &amp;&amp; exclude.contains(ServerName.valueOf(Bytes.toString(destServerName)))) {<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>      LOG.info(<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>          Bytes.toString(encodedRegionName) + " can not move to " + Bytes.toString(destServerName)<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>              + " because the server is in exclude list");<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      destServerName = null;<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>    if (destServerName == null || destServerName.length == 0) {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>      LOG.info("Passed destination servername is null/empty so " +<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>        "choosing a server at random");<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>      exclude.add(regionState.getServerName());<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>      final List&lt;ServerName&gt; destServers = this.serverManager.createDestinationServersList(exclude);<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>      dest = balancer.randomAssignment(hri, destServers);<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>      if (dest == null) {<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>        LOG.debug("Unable to determine a plan to assign " + hri);<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>        return;<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      }<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    } else {<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>      ServerName candidate = ServerName.valueOf(Bytes.toString(destServerName));<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>      dest = balancer.randomAssignment(hri, Lists.newArrayList(candidate));<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>      if (dest == null) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>        LOG.debug("Unable to determine a plan to assign " + hri);<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        return;<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      }<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>      // TODO: What is this? I don't get it.<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>      if (dest.equals(serverName) &amp;&amp; balancer instanceof BaseLoadBalancer<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          &amp;&amp; !((BaseLoadBalancer)balancer).shouldBeOnMaster(hri)) {<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        // To avoid unnecessary region moving later by balancer. Don't put user<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>        // regions on master.<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        LOG.debug("Skipping move of region " + hri.getRegionNameAsString()<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          + " to avoid unnecessary region moving later by load balancer,"<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>          + " because it should not be on master");<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>        return;<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>      }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>    }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span><a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    if (dest.equals(regionState.getServerName())) {<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      LOG.debug("Skipping move of region " + hri.getRegionNameAsString()<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>        + " because region already assigned to the same server " + dest + ".");<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>      return;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span><a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>    // Now we can do the move<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>    RegionPlan rp = new RegionPlan(hri, regionState.getServerName(), dest);<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>    assert rp.getDestination() != null: rp.toString() + " " + dest;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span><a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>    try {<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>      checkInitialized();<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>      if (this.cpHost != null) {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>        this.cpHost.preMove(hri, rp.getSource(), rp.getDestination());<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>      }<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span><a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>      TransitRegionStateProcedure proc =<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        this.assignmentManager.createMoveRegionProcedure(rp.getRegionInfo(), rp.getDestination());<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>      // Warmup the region on the destination before initiating the move.<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>      // A region server could reject the close request because it either does not<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>      // have the specified region or the region is being split.<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>      warmUpRegion(rp.getDestination(), hri);<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span><a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>      LOG.info(getClientIdAuditPrefix() + " move " + rp + ", running balancer");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>      Future&lt;byte[]&gt; future = ProcedureSyncWait.submitProcedure(this.procedureExecutor, proc);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      try {<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>        // Is this going to work? Will we throw exception on error?<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>        // TODO: CompletableFuture rather than this stunted Future.<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>        future.get();<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>      } catch (InterruptedException | ExecutionException e) {<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>        throw new HBaseIOException(e);<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      }<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>      if (this.cpHost != null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>        this.cpHost.postMove(hri, rp.getSource(), rp.getDestination());<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>      }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    } catch (IOException ioe) {<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>      if (ioe instanceof HBaseIOException) {<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        throw (HBaseIOException)ioe;<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>      }<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>      throw new HBaseIOException(ioe);<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>    }<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>  }<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span><a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>  @Override<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  public long createTable(final TableDescriptor tableDescriptor, final byte[][] splitKeys,<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    checkInitialized();<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>    TableDescriptor desc = getMasterCoprocessorHost().preCreateTableRegionsInfos(tableDescriptor);<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>    if (desc == null) {<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      throw new IOException("Creation for " + tableDescriptor + " is canceled by CP");<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>    String namespace = desc.getTableName().getNamespaceAsString();<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>    this.clusterSchemaService.getNamespace(namespace);<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span><a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>    RegionInfo[] newRegions = ModifyRegionUtils.createRegionInfos(desc, splitKeys);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>    TableDescriptorChecker.sanityCheck(conf, desc);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span><a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>    return MasterProcedureUtil<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>      .submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>        @Override<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        protected void run() throws IOException {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          getMaster().getMasterCoprocessorHost().preCreateTable(desc, newRegions);<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span><a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>          LOG.info(getClientIdAuditPrefix() + " create " + desc);<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span><a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>          // TODO: We can handle/merge duplicate requests, and differentiate the case of<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>          // TableExistsException by saying if the schema is the same or not.<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>          //<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>          // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>          // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          submitProcedure(<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>            new CreateTableProcedure(procedureExecutor.getEnvironment(), desc, newRegions, latch));<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>          latch.await();<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span><a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          getMaster().getMasterCoprocessorHost().postCreateTable(desc, newRegions);<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        }<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span><a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>        @Override<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        protected String getDescription() {<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          return "CreateTableProcedure";<a name="line.2127"></a>
 <span class="sourceLineNo">2128</span>        }<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span><a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>        @Override<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>        protected String getDescription() {<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>          return "CreateTableProcedure";<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>        }<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      });<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>  }<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span><a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>  @Override<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  public long createSystemTable(final TableDescriptor tableDescriptor) throws IOException {<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>    if (isStopped()) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>      throw new MasterNotRunningException();<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    }<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span><a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>    TableName tableName = tableDescriptor.getTableName();<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>    if (!(tableName.isSystemTable())) {<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      throw new IllegalArgumentException(<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>        "Only system table creation can use this createSystemTable API");<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>    }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>    RegionInfo[] newRegions = ModifyRegionUtils.createRegionInfos(tableDescriptor, null);<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span><a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>    LOG.info(getClientIdAuditPrefix() + " create " + tableDescriptor);<a name="line.2151"></a>
+<span class="sourceLineNo">2129</span>      });<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span><a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  @Override<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span>  public long createSystemTable(final TableDescriptor tableDescriptor) throws IOException {<a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>    if (isStopped()) {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>      throw new MasterNotRunningException();<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>    }<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span><a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>    TableName tableName = tableDescriptor.getTableName();<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    if (!(tableName.isSystemTable())) {<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>      throw new IllegalArgumentException(<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>        "Only system table creation can use this createSystemTable API");<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>    }<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span><a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    RegionInfo[] newRegions = ModifyRegionUtils.createRegionInfos(tableDescriptor, null);<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span><a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>    LOG.info(getClientIdAuditPrefix() + " create " + tableDescriptor);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span><a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>    // This special create table is called locally to master.  Therefore, no RPC means no need<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>    // to use nonce to detect duplicated RPC call.<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>    long procId = this.procedureExecutor.submitProcedure(<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>      new CreateTableProcedure(procedureExecutor.getEnvironment(), tableDescriptor, newRegions));<a name="line.2151"></a>
 <span class="sourceLineNo">2152</span><a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    // This special create table is called locally to master.  Therefore, no RPC means no need<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>    // to use nonce to detect duplicated RPC call.<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>    long procId = this.procedureExecutor.submitProcedure(<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>      new CreateTableProcedure(procedureExecutor.getEnvironment(), tableDescriptor, newRegions));<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span><a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>    return procId;<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  }<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span><a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>  private void startActiveMasterManager(int infoPort) throws KeeperException {<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    String backupZNode = ZNodePaths.joinZNode(<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>      zooKeeper.getZNodePaths().backupMasterAddressesZNode, serverName.toString());<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>    /*<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>    * Add a ZNode for ourselves in the backup master directory since we<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>    * may not become the active master. If so, we want the actual active<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    * master to know we are backup masters, so that it won't assign<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    * regions to us if so configured.<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    *<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    * If we become the active master later, ActiveMasterManager will delete<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    * this node explicitly.  If we crash before then, ZooKeeper will delete<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    * this node for us since it is ephemeral.<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    */<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>    LOG.info("Adding backup master ZNode " + backupZNode);<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    if (!MasterAddressTracker.setMasterAddress(zooKeeper, backupZNode, serverName, infoPort)) {<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>      LOG.warn("Failed create of " + backupZNode + " by " + serverName);<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    }<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    this.activeMasterManager.setInfoPort(infoPort);<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    int timeout = conf.getInt(HConstants.ZK_SESSION_TIMEOUT, HConstants.DEFAULT_ZK_SESSION_TIMEOUT);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    // If we're a backup master, stall until a primary to write this address<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>    if (conf.getBoolean(HConstants.MASTER_TYPE_BACKUP, HConstants.DEFAULT_MASTER_TYPE_BACKUP)) {<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>      LOG.debug("HMaster started in backup mode. Stalling until master znode is written.");<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>      // This will only be a minute or so while the cluster starts up,<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>      // so don't worry about setting watches on the parent znode<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>      while (!activeMasterManager.hasActiveMaster()) {<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>        LOG.debug("Waiting for master address and cluster state znode to be written.");<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>        Threads.sleep(timeout);<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>      }<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>    }<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>    MonitoredTask status = TaskMonitor.get().createStatus("Master startup");<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>    status.setDescription("Master startup");<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>    try {<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>      if (activeMasterManager.blockUntilBecomingActiveMaster(timeout, status)) {<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>        finishActiveMasterInitialization(status);<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>      }<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    } catch (Throwable t) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      status.setStatus("Failed to become active: " + t.getMessage());<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      LOG.error(HBaseMarkers.FATAL, "Failed to become active master", t);<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>      // HBASE-5680: Likely hadoop23 vs hadoop 20.x/1.x incompatibility<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      if (t instanceof NoClassDefFoundError &amp;&amp; t.getMessage().<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>          contains("org/apache/hadoop/hdfs/protocol/HdfsConstants$SafeModeAction")) {<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>        // improved error message for this special case<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>        abort("HBase is having a problem with its Hadoop jars.  You may need to recompile " +<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>          "HBase against Hadoop version " + org.apache.hadoop.util.VersionInfo.getVersion() +<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>          " or change your hadoop jars to start properly", t);<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      } else {<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>        abort("Unhandled exception. Starting shutdown.", t);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>      }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>    } finally {<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>      status.cleanup();<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    }<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>  }<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span><a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>  private static boolean isCatalogTable(final TableName tableName) {<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    return tableName.equals(TableName.META_TABLE_NAME);<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>  }<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span><a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>  @Override<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>  public long deleteTable(<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      final TableName tableName,<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      final long nonceGroup,<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      final long nonce) throws IOException {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>    checkInitialized();<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span><a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      @Override<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>      protected void run() throws IOException {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>        getMaster().getMasterCoprocessorHost().preDeleteTable(tableName);<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span><a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        LOG.info(getClientIdAuditPrefix() + " delete " + tableName);<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span><a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>        // TODO: We can handle/merge duplicate request<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>        //<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        submitProcedure(new DeleteTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>            tableName, latch));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>        latch.await();<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span><a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        getMaster().getMasterCoprocessorHost().postDeleteTable(tableName);<a name="line.2242"></a>
+<span class="sourceLineNo">2153</span>    return procId;<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span><a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>  private void startActiveMasterManager(int infoPort) throws KeeperException {<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>    String backupZNode = ZNodePaths.joinZNode(<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>      zooKeeper.getZNodePaths().backupMasterAddressesZNode, serverName.toString());<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>    /*<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>    * Add a ZNode for ourselves in the backup master directory since we<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>    * may not become the active master. If so, we want the actual active<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>    * master to know we are backup masters, so that it won't assign<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>    * regions to us if so configured.<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>    *<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>    * If we become the active master later, ActiveMasterManager will delete<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>    * this node explicitly.  If we crash before then, ZooKeeper will delete<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>    * this node for us since it is ephemeral.<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>    */<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>    LOG.info("Adding backup master ZNode " + backupZNode);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>    if (!MasterAddressTracker.setMasterAddress(zooKeeper, backupZNode, serverName, infoPort)) {<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>      LOG.warn("Failed create of " + backupZNode + " by " + serverName);<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>    }<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>    this.activeMasterManager.setInfoPort(infoPort);<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>    int timeout = conf.getInt(HConstants.ZK_SESSION_TIMEOUT, HConstants.DEFAULT_ZK_SESSION_TIMEOUT);<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>    // If we're a backup master, stall until a primary to write this address<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>    if (conf.getBoolean(HConstants.MASTER_TYPE_BACKUP, HConstants.DEFAULT_MASTER_TYPE_BACKUP)) {<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>      LOG.debug("HMaster started in backup mode. Stalling until master znode is written.");<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>      // This will only be a minute or so while the cluster starts up,<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>      // so don't worry about setting watches on the parent znode<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>      while (!activeMasterManager.hasActiveMaster()) {<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>        LOG.debug("Waiting for master address and cluster state znode to be written.");<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>        Threads.sleep(timeout);<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>      }<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>    }<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>    MonitoredTask status = TaskMonitor.get().createStatus("Master startup");<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>    status.setDescription("Master startup");<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    try {<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>      if (activeMasterManager.blockUntilBecomingActiveMaster(timeout, status)) {<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>        finishActiveMasterInitialization(status);<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>      }<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>    } catch (Throwable t) {<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>      status.setStatus("Failed to become active: " + t.getMessage());<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>      LOG.error(HBaseMarkers.FATAL, "Failed to become active master", t);<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>      // HBASE-5680: Likely hadoop23 vs hadoop 20.x/1.x incompatibility<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>      if (t instanceof NoClassDefFoundError &amp;&amp; t.getMessage().<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>          contains("org/apache/hadoop/hdfs/protocol/HdfsConstants$SafeModeAction")) {<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>        // improved error message for this special case<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>        abort("HBase is having a problem with its Hadoop jars.  You may need to recompile " +<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>          "HBase against Hadoop version " + org.apache.hadoop.util.VersionInfo.getVersion() +<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>          " or change your hadoop jars to start properly", t);<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>      } else {<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>        abort("Unhandled exception. Starting shutdown.", t);<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>      }<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    } finally {<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      status.cleanup();<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>    }<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>  }<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span><a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>  private static boolean isCatalogTable(final TableName tableName) {<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    return tableName.equals(TableName.META_TABLE_NAME);<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>  }<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span><a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>  @Override<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>  public long deleteTable(<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>      final TableName tableName,<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>      final long nonceGroup,<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      final long nonce) throws IOException {<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>    checkInitialized();<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span><a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>      @Override<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      protected void run() throws IOException {<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        getMaster().getMasterCoprocessorHost().preDeleteTable(tableName);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span><a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>        LOG.info(getClientIdAuditPrefix() + " delete " + tableName);<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span><a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        // TODO: We can handle/merge duplicate request<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>        //<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>        submitProcedure(new DeleteTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>            tableName, latch));<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        latch.await();<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span><a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>        getMaster().getMasterCoprocessorHost().postDeleteTable(tableName);<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>      }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>      @Override<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      protected String getDescription() {<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>        return "DeleteTableProcedure";<a name="line.2242"></a>
 <span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span><a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>      @Override<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      protected String getDescription() {<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>        return "DeleteTableProcedure";<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>      }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>    });<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  }<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span><a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>  @Override<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>  public long truncateTable(<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      final TableName tableName,<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      final boolean preserveSplits,<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      final long nonceGroup,<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>      final long nonce) throws IOException {<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>    checkInitialized();<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>      @Override<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>      protected void run() throws IOException {<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>        getMaster().getMasterCoprocessorHost().preTruncateTable(tableName);<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span><a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>        LOG.info(getClientIdAuditPrefix() + " truncate " + tableName);<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createLatch(2, 0);<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>        submitProcedure(new TruncateTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>            tableName, preserveSplits, latch));<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>        latch.await();<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span><a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>        getMaster().getMasterCoprocessorHost().postTruncateTable(tableName);<a name="line.2272"></a>
+<span class="sourceLineNo">2244</span>    });<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>  }<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span><a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>  @Override<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>  public long truncateTable(<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>      final TableName tableName,<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>      final boolean preserveSplits,<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      final long nonceGroup,<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>      final long nonce) throws IOException {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    checkInitialized();<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span><a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>      @Override<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      protected void run() throws IOException {<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        getMaster().getMasterCoprocessorHost().preTruncateTable(tableName);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span><a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>        LOG.info(getClientIdAuditPrefix() + " truncate " + tableName);<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createLatch(2, 0);<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>        submitProcedure(new TruncateTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>            tableName, preserveSplits, latch));<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>        latch.await();<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span><a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>        getMaster().getMasterCoprocessorHost().postTruncateTable(tableName);<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>      }<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span><a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>      @Override<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>      protected String getDescription() {<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>        return "TruncateTableProcedure";<a name="line.2272"></a>
 <span class="sourceLineNo">2273</span>      }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>      @Override<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>      protected String getDescription() {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>        return "TruncateTableProcedure";<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      }<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    });<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>  }<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span><a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>  @Override<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>  public long addColumn(final TableName tableName, final ColumnFamilyDescriptor column,<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>    checkInitialized();<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    checkTableExists(tableName);<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span><a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span><a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>      @Override<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      public TableDescriptor get() throws IOException {<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>        TableDescriptor old = getTableDescriptors().get(tableName);<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>        if (old.hasColumnFamily(column.getName())) {<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>          throw new InvalidFamilyOperationException("Column family '" + column.getNameAsString()<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>              + "' in table '" + tableName + "' already exists so cannot be added");<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>        }<a name="line.2296"></a>
+<span class="sourceLineNo">2274</span>    });<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>  }<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span><a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  @Override<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>  public long addColumn(final TableName tableName, final ColumnFamilyDescriptor column,<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>    checkInitialized();<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>    checkTableExists(tableName);<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span><a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span><a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>      @Override<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>      public TableDescriptor get() throws IOException {<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>        TableDescriptor old = getTableDescriptors().get(tableName);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>        if (old.hasColumnFamily(column.getName())) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>          throw new InvalidFamilyOperationException("Column family '" + column.getNameAsString()<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>              + "' in table '" + tableName + "' already exists so cannot be added");<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>        }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span><a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        return TableDescriptorBuilder.newBuilder(old).setColumnFamily(column).build();<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>      }<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>    }, nonceGroup, nonce, true);<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>  }<a name="line.2296"></a>
 <span class="sourceLineNo">2297</span><a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        return TableDescriptorBuilder.newBuilder(old).setColumnFamily(column).build();<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      }<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    }, nonceGroup, nonce, true);<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>  }<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span><a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>  /**<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>   * Implement to return TableDescriptor after pre-checks<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>   */<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>  protected interface TableDescriptorGetter {<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>    TableDescriptor get() throws IOException;<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>  }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span><a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>  @Override<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>  public long modifyColumn(final TableName tableName, final ColumnFamilyDescriptor descriptor,<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    checkInitialized();<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    checkTableExists(tableName);<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      @Override<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      public TableDescriptor get() throws IOException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>        TableDescriptor old = getTableDescriptors().get(tableName);<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>        if (!old.hasColumnFamily(descriptor.getName())) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>          throw new InvalidFamilyOperationException("Family '" + descriptor.getNameAsString()<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>              + "' does not exist, so it cannot be modified");<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>        }<a name="line.2323"></a>
+<span class="sourceLineNo">2298</span>  /**<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * Implement to return TableDescriptor after pre-checks<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  protected interface TableDescriptorGetter {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    TableDescriptor get() throws IOException;<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>  }<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>  @Override<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>  public long modifyColumn(final TableName tableName, final ColumnFamilyDescriptor descriptor,<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>    checkInitialized();<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>    checkTableExists(tableName);<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span><a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      @Override<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      public TableDescriptor get() throws IOException {<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>        TableDescriptor old = getTableDescriptors().get(tableName);<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>        if (!old.hasColumnFamily(descriptor.getName())) {<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>          throw new InvalidFamilyOperationException("Family '" + descriptor.getNameAsString()<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>              + "' does not exist, so it cannot be modified");<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        }<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span><a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>        return TableDescriptorBuilder.newBuilder(old).modifyColumnFamily(descriptor).build();<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      }<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }, nonceGroup, nonce, true);<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>  }<a name="line.2323"></a>
 <span class="sourceLineNo">2324</span><a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>        return TableDescriptorBuilder.newBuilder(old).modifyColumnFamily(descriptor).build();<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>      }<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>    }, nonceGroup, nonce, true);<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>  }<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span><a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>  @Override<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>  public long deleteColumn(final TableName tableName, final byte[] columnName,<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>    checkInitialized();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    checkTableExists(tableName);<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span><a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span><a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>      @Override<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>      public TableDescriptor get() throws IOException {<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        TableDescriptor old = getTableDescriptors().get(tableName);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span><a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        if (!old.hasColumnFamily(columnName)) {<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>          throw new InvalidFamilyOperationException("Family '" + Bytes.toString(columnName)<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>              + "' does not exist, so it cannot be deleted");<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>        if (old.getColumnFamilyCount() == 1) {<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>          throw new InvalidFamilyOperationException("Family '" + Bytes.toString(columnName)<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>              + "' is the only column family in the table, so it cannot be deleted");<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>        }<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        return TableDescriptorBuilder.newBuilder(old).removeColumnFamily(columnName).build();<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      }<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    }, nonceGroup, nonce, true);<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  }<a name="line.2353"></a>
+<span class="sourceLineNo">2325</span>  @Override<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>  public long deleteColumn(final TableName tableName, final byte[] columnName,<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    checkInitialized();<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>    checkTableExists(tableName);<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span><a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      @Override<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>      public TableDescriptor get() throws IOException {<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        TableDescriptor old = getTableDescriptors().get(tableName);<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span><a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>        if (!old.hasColumnFamily(columnName)) {<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>          throw new InvalidFamilyOperationException("Family '" + Bytes.toString(columnName)<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>              + "' does not exist, so it cannot be deleted");<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>        }<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        if (old.getColumnFamilyCount() == 1) {<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>          throw new InvalidFamilyOperationException("Family '" + Bytes.toString(columnName)<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>              + "' is the only column family in the table, so it cannot be deleted");<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        }<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>        return TableDescriptorBuilder.newBuilder(old).removeColumnFamily(columnName).build();<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>    }, nonceGroup, nonce, true);<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span><a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>  @Override<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>  public long enableTable(final TableName tableName, final long nonceGroup, final long nonce)<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throws IOException {<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>    checkInitialized();<a name="line.2353"></a>
 <span class="sourceLineNo">2354</span><a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>  @Override<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>  public long enableTable(final TableName tableName, final long nonceGroup, final long nonce)<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>      throws IOException {<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    checkInitialized();<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span><a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>      @Override<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>      protected void run() throws IOException {<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>        getMaster().getMasterCoprocessorHost().preEnableTable(tableName);<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span><a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>        // Normally, it would make sense for this authorization check to exist inside<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>        // AccessController, but because the authorization check is done based on internal state<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>        // (rather than explicit permissions) we'll do the check here instead of in the<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>        // coprocessor.<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>        MasterQuotaManager quotaManager = getMasterQuotaManager();<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>        if (quotaManager != null) {<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>          if (quotaManager.isQuotaInitialized()) {<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>              SpaceQuotaSnapshot currSnapshotOfTable =<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>                  QuotaTableUtil.getCurrentSnapshotFromQuotaTable(getConnection(), tableName);<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>              if (currSnapshotOfTable != null) {<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>                SpaceQuotaStatus quotaStatus = currSnapshotOfTable.getQuotaStatus();<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>                if (quotaStatus.isInViolation()<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>                    &amp;&amp; SpaceViolationPolicy.DISABLE == quotaStatus.getPolicy().orElse(null)) {<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>                throw new AccessDeniedException("Enabling the table '" + tableName<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>                    + "' is disallowed due to a violated space quota.");<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>              }<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>            }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>          } else if (LOG.isTraceEnabled()) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>            LOG.trace("Unable to check for space quotas as the MasterQuotaManager is not enabled");<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>          }<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>        }<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span><a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>        LOG.info(getClientIdAuditPrefix() + " enable " + tableName);<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span><a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>        // Execute the operation asynchronously - client will check the progress of the operation<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>        // In case the request is from a &lt;1.1 client before returning,<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>        // we want to make sure that the table is prepared to be<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>        // enabled (the table is locked and the table state is set).<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>        // Note: if the procedure throws exception, we will catch it and rethrow.<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>        final ProcedurePrepareLatch prepareLatch = ProcedurePrepareLatch.createLatch();<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>        submitProcedure(new EnableTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>            tableName, prepareLatch));<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>        prepareLatch.await();<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span><a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>        getMaster().getMasterCoprocessorHost().postEnableTable(tableName);<a name="line.2400"></a>
+<span class="sourceLineNo">2355</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      @Override<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>      protected void run() throws IOException {<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>        getMaster().getMasterCoprocessorHost().preEnableTable(tableName);<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>        // Normally, it would make sense for this authorization check to exist inside<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>        // AccessController, but because the authorization check is done based on internal state<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>        // (rather than explicit permissions) we'll do the check here instead of in the<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>        // coprocessor.<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>        MasterQuotaManager quotaManager = getMasterQuotaManager();<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>        if (quotaManager != null) {<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>          if (quotaManager.isQuotaInitialized()) {<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>              SpaceQuotaSnapshot currSnapshotOfTable =<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>                  QuotaTableUtil.getCurrentSnapshotFromQuotaTable(getConnection(), tableName);<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>              if (currSnapshotOfTable != null) {<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>                SpaceQuotaStatus quotaStatus = currSnapshotOfTable.getQuotaStatus();<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>                if (quotaStatus.isInViolation()<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>                    &amp;&amp; SpaceViolationPolicy.DISABLE == quotaStatus.getPolicy().orElse(null)) {<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>                throw new AccessDeniedException("Enabling the table '" + tableName<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>                    + "' is disallowed due to a violated space quota.");<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>              }<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>            }<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>          } else if (LOG.isTraceEnabled()) {<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>            LOG.trace("Unable to check for space quotas as the MasterQuotaManager is not enabled");<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>          }<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>        }<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span><a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>        LOG.info(getClientIdAuditPrefix() + " enable " + tableName);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span><a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>        // Execute the operation asynchronously - client will check the progress of the operation<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>        // In case the request is from a &lt;1.1 client before returning,<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>        // we want to make sure that the table is prepared to be<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>        // enabled (the table is locked and the table state is set).<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>        // Note: if the procedure throws exception, we will catch it and rethrow.<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>        final ProcedurePrepareLatch prepareLatch = ProcedurePrepareLatch.createLatch();<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>        submitProcedure(new EnableTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>            tableName, prepareLatch));<a name="line.2392"></a>
+<span class="sourceLineNo">2393</span>        prepareLatch.await();<a name="line.2393"></a>
+<span class="sourceLineNo">2394</span><a name="line.2394"></a>
+<span class="sourceLineNo">2395</span>        getMaster().getMasterCoprocessorHost().postEnableTable(tableName);<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>      }<a name="line.2396"></a>
+<span class="sourceLineNo">2397</span><a name="line.2397"></a>
+<span class="sourceLineNo">2398</span>      @Override<a name="line.2398"></a>
+<span class="sourceLineNo">2399</span>      protected String getDescription() {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>        return "EnableTableProcedure";<a name="line.2400"></a>
 <span class="sourceLineNo">2401</span>      }<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span><a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>      @Override<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>      protected String getDescription() {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>        return "EnableTableProcedure";<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      }<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    });<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>  }<a name="line.2408"></a>
+<span class="sourceLineNo">2402</span>    });<a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  }<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span><a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>  @Override<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  public long disableTable(final TableName tableName, final long nonceGroup, final long nonce)<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span>      throws IOException {<a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>    checkInitialized();<a name="line.2408"></a>
 <span class="sourceLineNo">2409</span><a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>  @Override<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>  public long disableTable(final TableName tableName, final long nonceGroup, final long nonce)<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>      throws IOException {<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>    checkInitialized();<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span><a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>      @Override<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>      protected void run() throws IOException {<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        getMaster().getMasterCoprocessorHost().preDisableTable(tableName);<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span><a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>        LOG.info(getClientIdAuditPrefix() + " disable " + tableName);<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span><a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>        // Execute the operation asynchronously - client will check the progress of the operation<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>        // In case the request is from a &lt;1.1 client before returning,<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>        // we want to make sure that the table is prepared to be<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        // enabled (the table is locked and the table state is set).<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>        // Note: if the procedure throws exception, we will catch it and rethrow.<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>        //<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        final ProcedurePrepareLatch prepareLatch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>        submitProcedure(new DisableTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>            tableName, false, prepareLatch));<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>        prepareLatch.await();<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span><a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>        getMaster().getMasterCoprocessorHost().postDisableTable(tableName);<a name="line.2436"></a>
+<span class="sourceLineNo">2410</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>      @Override<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>      protected void run() throws IOException {<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span>        getMaster().getMasterCoprocessorHost().preDisableTable(tableName);<a name="line.2414"></a>
+<span class="sourceLineNo">2415</span><a name="line.2415"></a>
+<span class="sourceLineNo">2416</span>        LOG.info(getClientIdAuditPrefix() + " disable " + tableName);<a name="line.2416"></a>
+<span class="sourceLineNo">2417</span><a name="line.2417"></a>
+<span class="sourceLineNo">2418</span>        // Execute the operation asynchronously - client will check the progress of the operation<a name="line.2418"></a>
+<span class="sourceLineNo">2419</span>        // In case the request is from a &lt;1.1 client before returning,<a name="line.2419"></a>
+<span class="sourceLineNo">2420</span>        // we want to make sure that the table is prepared to be<a name="line.2420"></a>
+<span class="sourceLineNo">2421</span>        // enabled (the table is locked and the table state is set).<a name="line.2421"></a>
+<span class="sourceLineNo">2422</span>        // Note: if the procedure throws exception, we will catch it and rethrow.<a name="line.2422"></a>
+<span class="sourceLineNo">2423</span>        //<a name="line.2423"></a>
+<span class="sourceLineNo">2424</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2424"></a>
+<span class="sourceLineNo">2425</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2425"></a>
+<span class="sourceLineNo">2426</span>        final ProcedurePrepareLatch prepareLatch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2426"></a>
+<span class="sourceLineNo">2427</span>        submitProcedure(new DisableTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2427"></a>
+<span class="sourceLineNo">2428</span>            tableName, false, prepareLatch));<a name="line.2428"></a>
+<span class="sourceLineNo">2429</span>        prepareLatch.await();<a name="line.2429"></a>
+<span class="sourceLineNo">2430</span><a name="line.2430"></a>
+<span class="sourceLineNo">2431</span>        getMaster().getMasterCoprocessorHost().postDisableTable(tableName);<a name="line.2431"></a>
+<span class="sourceLineNo">2432</span>      }<a name="line.2432"></a>
+<span class="sourceLineNo">2433</span><a name="line.2433"></a>
+<span class="sourceLineNo">2434</span>      @Override<a name="line.2434"></a>
+<span class="sourceLineNo">2435</span>      protected String getDescription() {<a name="line.2435"></a>
+<span class="sourceLineNo">2436</span>        return "DisableTableProcedure";<a name="line.2436"></a>
 <span class="sourceLineNo">2437</span>      }<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span><a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>      @Override<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>      protected String getDescription() {<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        return "DisableTableProcedure";<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>      }<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>    });<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>  }<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span><a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>  private long modifyTable(final TableName tableName,<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>      final TableDescriptorGetter newDescriptorGetter, final long nonceGroup, final long nonce,<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>      final boolean shouldCheckDescriptor) throws IOException {<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    return MasterProcedureUtil<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>        .submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>          @Override<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>          protected void run() throws IOException {<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>            TableDescriptor oldDescriptor = getMaster().getTableDescriptors().get(tableName);<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>            TableDescriptor newDescriptor = getMaster().getMasterCoprocessorHost()<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>                .preModifyTable(tableName, oldDescriptor, newDescriptorGetter.get());<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>            TableDescriptorChecker.sanityCheck(conf, newDescriptor);<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>            LOG.info("{} modify table {} from {} to {}", getClientIdAuditPrefix(), tableName,<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>                oldDescriptor, newDescriptor);<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span><a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>            // Execute the operation synchronously - wait for the operation completes before<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>            // continuing.<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>            //<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>            // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>            // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>            ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>            submitProcedure(new ModifyTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>                newDescriptor, latch, oldDescriptor, shouldCheckDescriptor));<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>            latch.await();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span><a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>            getMaster().getMasterCoprocessorHost().postModifyTable(tableName, oldDescriptor,<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>              newDescriptor);<a name="line.2471"></a>
+<span class="sourceLineNo">2438</span>    });<a name="line.2438"></a>
+<span class="sourceLineNo">2439</span>  }<a name="line.2439"></a>
+<span class="sourceLineNo">2440</span><a name="line.2440"></a>
+<span class="sourceLineNo">2441</span>  private long modifyTable(final TableName tableName,<a name="line.2441"></a>
+<span class="sourceLineNo">2442</span>      final TableDescriptorGetter newDescriptorGetter, final long nonceGroup, final long nonce,<a name="line.2442"></a>
+<span class="sourceLineNo">2443</span>      final boolean shouldCheckDescriptor) throws IOException {<a name="line.2443"></a>
+<span class="sourceLineNo">2444</span>    return MasterProcedureUtil<a name="line.2444"></a>
+<span class="sourceLineNo">2445</span>        .submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2445"></a>
+<span class="sourceLineNo">2446</span>          @Override<a name="line.2446"></a>
+<span class="sourceLineNo">2447</span>          protected void run() throws IOException {<a name="line.2447"></a>
+<span class="sourceLineNo">2448</span>            TableDescriptor oldDescriptor = getMaster().getTableDescriptors().get(tableName);<a name="line.2448"></a>
+<span class="sourceLineNo">2449</span>            TableDescriptor newDescriptor = getMaster().getMasterCoprocessorHost()<a name="line.2449"></a>
+<span class="sourceLineNo">2450</span>                .preModifyTable(tableName, oldDescriptor, newDescriptorGetter.get());<a name="line.2450"></a>
+<span class="sourceLineNo">2451</span>            TableDescriptorChecker.sanityCheck(conf, newDescriptor);<a name="line.2451"></a>
+<span class="sourceLineNo">2452</span>            LOG.info("{} modify table {} from {} to {}", getClientIdAuditPrefix(), tableName,<a name="line.2452"></a>
+<span class="sourceLineNo">2453</span>                oldDescriptor, newDescriptor);<a name="line.2453"></a>
+<span class="sourceLineNo">2454</span><a name="line.2454"></a>
+<span class="sourceLineNo">2455</span>            // Execute the operation synchronously - wait for the operation completes before<a name="line.2455"></a>
+<span class="sourceLineNo">2456</span>            // continuing.<a name="line.2456"></a>
+<span class="sourceLineNo">2457</span>            //<a name="line.2457"></a>
+<span class="sourceLineNo">2458</span>            // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.2458"></a>
+<span class="sourceLineNo">2459</span>            // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.2459"></a>
+<span class="sourceLineNo">2460</span>            ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.2460"></a>
+<span class="sourceLineNo">2461</span>            submitProcedure(new ModifyTableProcedure(procedureExecutor.getEnvironment(),<a name="line.2461"></a>
+<span class="sourceLineNo">2462</span>                newDescriptor, latch, oldDescriptor, shouldCheckDescriptor));<a name="line.2462"></a>
+<span class="sourceLineNo">2463</span>            latch.await();<a name="line.2463"></a>
+<span class="sourceLineNo">2464</span><a name="line.2464"></a>
+<span class="sourceLineNo">2465</span>            getMaster().getMasterCoprocessorHost().postModifyTable(tableName, oldDescriptor,<a name="line.2465"></a>
+<span class="sourceLineNo">2466</span>              newDescriptor);<a name="line.2466"></a>
+<span class="sourceLineNo">2467</span>          }<a name="line.2467"></a>
+<span class="sourceLineNo">2468</span><a name="line.2468"></a>
+<span class="sourceLineNo">2469</span>          @Override<a name="line.2469"></a>
+<span class="sourceLineNo">2470</span>          protected String getDescription() {<a name="line.2470"></a>
+<span class="sourceLineNo">2471</span>            return "ModifyTableProcedure";<a name="line.2471"></a>
 <span class="sourceLineNo">2472</span>          }<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span><a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>          @Override<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>          protected String getDescription() {<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>            return "ModifyTableProcedure";<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>          }<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>        });<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span><a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>  }<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span><a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>  @Override<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>  public long modifyTable(final TableName tableName, final TableDescriptor newDescriptor,<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    checkInitialized();<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>      @Override<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>      public TableDescriptor get() throws IOException {<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>        return newDescriptor;<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>      }<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    }, nonceGroup, nonce, false);<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span><a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>  }<a name="line.2493"></a>
+<span class="sourceLineNo">2473</span>        });<a name="line.2473"></a>
+<span class="sourceLineNo">2474</span><a name="line.2474"></a>
+<span class="sourceLineNo">2475</span>  }<a name="line.2475"></a>
+<span class="sourceLineNo">2476</span><a name="line.2476"></a>
+<span class="sourceLineNo">2477</span>  @Override<a name="line.2477"></a>
+<span class="sourceLineNo">2478</span>  public long modifyTable(final TableName tableName, final TableDescriptor newDescriptor,<a name="line.2478"></a>
+<span class="sourceLineNo">2479</span>      final long nonceGroup, final long nonce) throws IOException {<a name="line.2479"></a>
+<span class="sourceLineNo">2480</span>    checkInitialized();<a name="line.2480"></a>
+<span class="sourceLineNo">2481</span>    return modifyTable(tableName, new TableDescriptorGetter() {<a name="line.2481"></a>
+<span class="sourceLineNo">2482</span>      @Override<a name="line.2482"></a>
+<span class="sourceLineNo">2483</span>      public TableDescriptor get() throws IOException {<a name="line.2483"></a>
+<span class="sourceLineNo">2484</span>        return newDescriptor;<a name="line.2484"></a>
+<span class="sourceLineNo">2485</span>      }<a name="line.2485"></a>
+<span class="sourceLineNo">2486</span>    }, nonceGroup, nonce, false);<a name="line.2486"></a>
+<span class="sourceLineNo">2487</span><a name="line.2487"></a>
+<span class="sourceLineNo">2488</span>  }<a name="line.2488"></a>
+<span class="sourceLineNo">2489</span><a name="line.2489"></a>
+<span class="sourceLineNo">2490</span>  public long restoreSnapshot(final SnapshotDescription snapshotDesc,<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>      final long nonceGroup, final long nonce, final boolean restoreAcl) throws IOException {<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span>    checkInitialized();<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span>    getSnapshotManager().checkSnapshotSupport();<a name="line.2493"></a>
 <span class="sourceLineNo">2494</span><a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>  public long restoreSnapshot(final SnapshotDescription snapshotDesc,<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>      final long nonceGroup, final long nonce, final boolean restoreAcl) throws IOException {<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    checkInitialized();<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    getSnapshotManager().checkSnapshotSupport();<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span><a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    // Ensure namespace exists. Will throw exception if non-known NS.<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    final TableName dstTable = TableName.valueOf(snapshotDesc.getTable());<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    getClusterSchema().getNamespace(dstTable.getNamespaceAsString());<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span><a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>      @Override<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>      protected void run() throws IOException {<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>          setProcId(<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>            getSnapshotManager().restoreOrCloneSnapshot(snapshotDesc, getNonceKey(), restoreAcl));<a name="line.2509"></a>
+<span class="sourceLineNo">2495</span>    // Ensure namespace exists. Will throw exception if non-known NS.<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span>    final TableName dstTable = TableName.valueOf(snapshotDesc.getTable());<a name="line.2496"></a>
+<span class="sourceLineNo">2497</span>    getClusterSchema().getNamespace(dstTable.getNamespaceAsString());<a name="line.2497"></a>
+<span class="sourceLineNo">2498</span><a name="line.2498"></a>
+<span class="sourceLineNo">2499</span>    return MasterProcedureUtil.submitProcedure(<a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>        new MasterProcedureUtil.NonceProcedureRunnable(this, nonceGroup, nonce) {<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>      @Override<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span>      protected void run() throws IOException {<a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>          setProcId(<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span>            getSnapshotManager().restoreOrCloneSnapshot(snapshotDesc, getNonceKey(), restoreAcl));<a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>      }<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span><a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>      @Override<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span>      protected String getDescription() {<a name="line.2508"></a>
+<span class="sourceLineNo">2509</span>        return "RestoreSnapshotProcedure";<a name="line.2509"></a>
 <span class="sourceLineNo">2510</span>      }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>      @Override<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      protected String getDescription() {<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>        return "RestoreSnapshotProcedure";<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      }<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>    });<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>  }<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span><a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>  private void checkTableExists(final TableName tableName)<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>      throws IOException, TableNotFoundException {<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    if (!MetaTableAccessor.tableExists(getConnection(), tableName)) {<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>      throw new TableNotFoundException(tableName);<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>    }<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>  }<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span><a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>  @Override<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>  public void checkTableModifiable(final TableName tableName)<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>      throws IOException, TableNotFoundException, TableNotDisabledException {<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>    if (isCatalogTable(tableName)) {<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      throw new IOException("Can't modify catalog tables");<a name="line.2530"></a>
+<span class="sourceLineNo">2511</span>    });<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>  }<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span><a name="line.2513"></a>
+<span class="sourceLineNo">2514</span>  private void checkTableExists(final TableName tableName)<a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>      throws IOException, TableNotFoundException {<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span>    if (!MetaTableAccessor.tableExists(getConnection(), tableName)) {<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>      throw new TableNotFoundException(tableName);<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span>    }<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span>  }<a name="line.2519"></a>
+<span class="sourceLineNo">2520</span><a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>  @Override<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>  public void checkTableModifiable(final TableName tableName)<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>      throws IOException, TableNotFoundException, TableNotDisabledException {<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>    if (isCatalogTable(tableName)) {<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>      throw new IOException("Can't modify catalog tables");<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>    }<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>    checkTableExists(tableName);<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>    TableState ts = getTableStateManager().getTableState(tableName);<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>    if (!ts.isDisabled()) {<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>      throw new TableNotDisabledException("Not DISABLED; " + ts);<a name="line.2530"></a>
 <span class="sourceLineNo">2531</span>    }<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>    checkTableExists(tableName);<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>    TableState ts = getTableStateManager().getTableState(tableName);<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>    if (!ts.isDisabled()) {<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      throw new TableNotDisabledException("Not DISABLED; " + ts);<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>    }<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>  }<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span><a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>  public ClusterMetrics getClusterMetricsWithoutCoprocessor() throws InterruptedIOException {<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>    return getClusterMetricsWithoutCoprocessor(EnumSet.allOf(Option.class));<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>  }<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span><a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>  public ClusterMetrics getClusterMetricsWithoutCoprocessor(EnumSet&lt;Option&gt; options)<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>      throws InterruptedIOException {<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    ClusterMetricsBuilder builder = ClusterMetricsBuilder.newBuilder();<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>    // given that hbase1 can't submit the request with Option,<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>    // we return all information to client if the list of Option is empty.<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>    if (options.isEmpty()) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>      options = EnumSet.allOf(Option.class);<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>    }<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span><a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>    for (Option opt : options) {<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      switch (opt) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>        case HBASE_VERSION: builder.setHBaseVersion(VersionInfo.getVersion()); break;<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        case CLUSTER_ID: builder.setClusterId(getClusterId()); break;<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        case MASTER: builder.setMasterName(getServerName()); break;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>        case BACKUP_MASTERS: builder.setBackerMasterNames(getBackupMasters()); break;<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>        case LIVE_SERVERS: {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>          if (serverManager != null) {<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>            builder.setLiveServerMetrics(serverManager.getOnlineServers().entrySet().stream()<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>              .collect(Collectors.toMap(e -&gt; e.getKey(), e -&gt; e.getValue())));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>          }<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>          break;<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>        }<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        case DEAD_SERVERS: {<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>          if (serverManager != null) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>            builder.setDeadServerNames(new ArrayList&lt;&gt;(<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>              serverManager.getDeadServers().copyServerNames()));<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>          }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>          break;<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>        }<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>        case MASTER_COPROCESSORS: {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          if (cpHost != null) {<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>            builder.setMasterCoprocessorNames(Arrays.asList(getMasterCoprocessors()));<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>          }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>          break;<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>        }<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>        case REGIONS_IN_TRANSITION: {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>          if (assignmentManager != null) {<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>            builder.setRegionsInTransition(assignmentManager.getRegionStates()<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>                .getRegionsStateInTransition());<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>          }<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>          break;<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>        }<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        case BALANCER_ON: {<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          if (loadBalancerTracker != null) {<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>            builder.setBalancerOn(loadBalancerTracker.isBalancerOn());<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          }<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>          break;<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>        }<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        case MASTER_INFO_PORT: {<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>          if (infoServer != null) {<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>            builder.setMasterInfoPort(infoServer.getPort());<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>          }<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>          break;<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>        }<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        case SERVERS_NAME: {<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>          if (serverManager != null) {<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>            builder.setServerNames(serverManager.getOnlineServersList());<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>          }<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>          break;<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>        }<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      }<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>    }<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>    return builder.build();<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>  }<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span><a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>  /**<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>   * @return cluster status<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>   */<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>  public ClusterMetrics getClusterMetrics() throws IOException {<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>    return getClusterMetrics(EnumSet.allOf(Option.class));<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>  }<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span><a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>  public ClusterMetrics getClusterMetrics(EnumSet&lt;Option&gt; options) throws IOException {<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>    if (cpHost != null) {<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      cpHost.preGetClusterMetrics();<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>    }<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>    ClusterMetrics status = getClusterMetricsWithoutCoprocessor(options);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>    if (cpHost != null) {<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      cpHost.postGetClusterMetrics(status);<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>    }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>    return status;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>  }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>  private List&lt;ServerName&gt; getBackupMasters() throws InterruptedIOException {<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>    // Build Set of backup masters from ZK nodes<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>    List&lt;String&gt; backupMasterStrings;<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>    try {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>      backupMasterStrings = ZKUtil.listChildrenNoWatch(this.zooKeeper,<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>        this.zooKeeper.getZNodePaths().backupMasterAddressesZNode);<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>    } catch (KeeperException e) {<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>      LOG.warn(this.zooKeeper.prefix("Unable to list backup servers"), e);<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      backupMasterStrings = null;<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>    }<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span><a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>    List&lt;ServerName&gt; backupMasters = Collections.emptyList();<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>    if (backupMasterStrings != null &amp;&amp; !backupMasterStrings.isEmpty()) {<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      backupMasters = new ArrayList&lt;&gt;(backupMasterStrings.size());<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      for (String s: backupMasterStrings) {<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>        try {<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>          byte [] bytes;<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>          try {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>            bytes = ZKUtil.getData(this.zooKeeper, ZNodePaths.joinZNode(<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>                this.zooKeeper.getZNodePaths().backupMasterAddressesZNode, s));<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>          } catch (InterruptedException e) {<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>            throw new InterruptedIOException();<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>          }<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>          if (bytes != null) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>            ServerName sn;<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>            try {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>              sn = ProtobufUtil.parseServerNameFrom(bytes);<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>            } catch (DeserializationException e) {<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>              LOG.warn("Failed parse, skipping registering backup server", e);<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>              continue;<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>            }<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>            backupMasters.add(sn);<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>          }<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        } catch (KeeperException e) {<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>          LOG.warn(this.zooKeeper.prefix("Unable to get information about " +<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>                   "backup servers"), e);<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>        }<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      }<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      Collections.sort(backupMasters, new Comparator&lt;ServerName&gt;() {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        @Override<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        public int compare(ServerName s1, ServerName s2) {<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>          return s1.getServerName().compareTo(s2.getServerName());<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>        }});<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>    }<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>    return backupMasters;<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>  }<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span><a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>  /**<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>   * The set of loaded coprocessors is stored in a static set. Since it's<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>   * statically allocated, it does not require that HMaster's cpHost be<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>   * initialized prior to accessing it.<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>   * @return a String representation of the set of names of the loaded coprocessors.<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>   */<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>  public static String getLoadedCoprocessors() {<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>    return CoprocessorHost.getLoadedCoprocessors().toString();<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>  }<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span><a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>  /**<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>   * @return timestamp in millis when HMaster was started.<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>   */<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>  public long getMasterStartTime() {<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>    return startcode;<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>  }<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span><a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>  /**<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>   * @return timestamp in millis when HMaster became the active master.<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>   */<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>  public long getMasterActiveTime() {<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>    return masterActiveTime;<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>  }<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span><a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>  /**<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>   * @return timestamp in millis when HMaster finished becoming the active master<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>   */<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>  public long getMasterFinishedInitializationTime() {<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>    return masterFinishedInitializationTime;<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>  }<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span><a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>  public int getNumWALFiles() {<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>    return procedureStore != null ? procedureStore.getActiveLogs().size() : 0;<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>  }<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span><a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>  public WALProcedureStore getWalProcedureStore() {<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>    return procedureStore;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>  }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>  public int getRegionServerInfoPort(final ServerName sn) {<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>    int port = this.serverManager.getInfoPort(sn);<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>    return port == 0 ? conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT) : port;<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>  }<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span><a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>  @Override<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>  public String getRegionServerVersion(ServerName sn) {<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>    // Will return "0.0.0" if the server is not online to prevent move system region to unknown<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>    // version RS.<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>    return this.serverManager.getVersion(sn);<a name="line.2722"></a>
+<span class="sourceLineNo">2532</span>  }<a name="line.2532"></a>
+<span class="sourceLineNo">2533</span><a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>  public ClusterMetrics getClusterMetricsWithoutCoprocessor() throws InterruptedIOException {<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>    return getClusterMetricsWithoutCoprocessor(EnumSet.allOf(Option.class));<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>  }<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span><a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>  public ClusterMetrics getClusterMetricsWithoutCoprocessor(EnumSet&lt;Option&gt; options)<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>      throws InterruptedIOException {<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>    ClusterMetricsBuilder builder = ClusterMetricsBuilder.newBuilder();<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>    // given that hbase1 can't submit the request with Option,<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>    // we return all information to client if the list of Option is empty.<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>    if (options.isEmpty()) {<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>      options = EnumSet.allOf(Option.class);<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>    }<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span><a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>    for (Option opt : options) {<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>      switch (opt) {<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>        case HBASE_VERSION: builder.setHBaseVersion(VersionInfo.getVersion()); break;<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>        case CLUSTER_ID: builder.setClusterId(getClusterId()); break;<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>        case MASTER: builder.setMasterName(getServerName()); break;<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>        case BACKUP_MASTERS: builder.setBackerMasterNames(getBackupMasters()); break;<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>        case LIVE_SERVERS: {<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span>          if (serverManager != null) {<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>            builder.setLiveServerMetrics(serverManager.getOnlineServers().entrySet().stream()<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>              .collect(Collectors.toMap(e -&gt; e.getKey(), e -&gt; e.getValue())));<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>          }<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>          break;<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>        }<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>        case DEAD_SERVERS: {<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>          if (serverManager != null) {<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>            builder.setDeadServerNames(new ArrayList&lt;&gt;(<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>              serverManager.getDeadServers().copyServerNames()));<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>          }<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>          break;<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>        }<a name="line.2566"></a>
+<span class="sourceLineNo">2567</span>        case MASTER_COPROCESSORS: {<a name="line.2567"></a>
+<span class="sourceLineNo">2568</span>          if (cpHost != null) {<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>            builder.setMasterCoprocessorNames(Arrays.asList(getMasterCoprocessors()));<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>          }<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>          break;<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>        }<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>        case REGIONS_IN_TRANSITION: {<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span>          if (assignmentManager != null) {<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>            builder.setRegionsInTransition(assignmentManager.getRegionStates()<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>                .getRegionsStateInTransition());<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>          }<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>          break;<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>        }<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>        case BALANCER_ON: {<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>          if (loadBalancerTracker != null) {<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>            builder.setBalancerOn(loadBalancerTracker.isBalancerOn());<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>          }<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>          break;<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>        }<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>        case MASTER_INFO_PORT: {<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>          if (infoServer != null) {<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>            builder.setMasterInfoPort(infoServer.getPort());<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>          }<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>          break;<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>        }<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>        case SERVERS_NAME: {<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>          if (serverManager != null) {<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>            builder.setServerNames(serverManager.getOnlineServersList());<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>          }<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>          break;<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>        }<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span>      }<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>    }<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>    return builder.build();<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>  }<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span><a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>  /**<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>   * @return cluster status<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>   */<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>  public ClusterMetrics getClusterMetrics() throws IOException {<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>    return getClusterMetrics(EnumSet.allOf(Option.class));<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>  }<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span><a name="line.2609"></a>
+<span class="sourceLineNo">2610</span>  public ClusterMetrics getClusterMetrics(EnumSet&lt;Option&gt; options) throws IOException {<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>    if (cpHost != null) {<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>      cpHost.preGetClusterMetrics();<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>    }<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>    ClusterMetrics status = getClusterMetricsWithoutCoprocessor(options);<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>    if (cpHost != null) {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>      cpHost.postGetClusterMetrics(status);<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>    }<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>    return status;<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>  }<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span><a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>  private List&lt;ServerName&gt; getBackupMasters() throws InterruptedIOException {<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>    // Build Set of backup masters from ZK nodes<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>    List&lt;String&gt; backupMasterStrings;<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>    try {<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>      backupMasterStrings = ZKUtil.listChildrenNoWatch(this.zooKeeper,<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>        this.zooKeeper.getZNodePaths().backupMasterAddressesZNode);<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>    } catch (KeeperException e) {<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>      LOG.warn(this.zooKeeper.prefix("Unable to list backup servers"), e);<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span>      backupMasterStrings = null;<a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>    }<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span><a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>    List&lt;ServerName&gt; backupMasters = Collections.emptyList();<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span>    if (backupMasterStrings != null &amp;&amp; !backupMasterStrings.isEmpty()) {<a name="line.2633"></a>
+<span class="sourceLineNo">2634</span>      backupMasters = new ArrayList&lt;&gt;(backupMasterStrings.size());<a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>      for (String s: backupMasterStrings) {<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>        try {<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span>          byte [] bytes;<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>          try {<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>            bytes = ZKUtil.getData(this.zooKeeper, ZNodePaths.joinZNode(<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>                this.zooKeeper.getZNodePaths().backupMasterAddressesZNode, s));<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>          } catch (InterruptedException e) {<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>            throw new InterruptedIOException();<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span>          }<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>          if (bytes != null) {<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>            ServerName sn;<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>            try {<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>              sn = ProtobufUtil.parseServerNameFrom(bytes);<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>            } catch (DeserializationException e) {<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>              LOG.warn("Failed parse, skipping registering backup server", e);<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>              continue;<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>            }<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>            backupMasters.add(sn);<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>          }<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span>        } catch (KeeperException e) {<a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>          LOG.warn(this.zooKeeper.prefix("Unable to get information about " +<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>                   "backup servers"), e);<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span>        }<a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>      }<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>      Collections.sort(backupMasters, new Comparator&lt;ServerName&gt;() {<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>        @Override<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>        public int compare(ServerName s1, ServerName s2) {<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>          return s1.getServerName().compareTo(s2.getServerName());<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>        }});<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>    }<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>    return backupMasters;<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>  }<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span><a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>  /**<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>   * The set of loaded coprocessors is stored in a static set. Since it's<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>   * statically allocated, it does not require that HMaster's cpHost be<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>   * initialized prior to accessing it.<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>   * @return a String representation of the set of names of the loaded coprocessors.<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span>   */<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span>  public static String getLoadedCoprocessors() {<a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>    return CoprocessorHost.getLoadedCoprocessors().toString();<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>  }<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span><a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>  /**<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>   * @return timestamp in millis when HMaster was started.<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>   */<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>  public long getMasterStartTime() {<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>    return startcode;<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>  }<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span><a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>  /**<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>   * @return timestamp in millis when HMaster became the active master.<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>   */<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>  public long getMasterActiveTime() {<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>    return masterActiveTime;<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>  }<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span><a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>  /**<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>   * @return timestamp in millis when HMaster finished becoming the active master<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>   */<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>  public long getMasterFinishedInitializationTime() {<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span>    return masterFinishedInitializationTime;<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span>  }<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span><a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>  public int getNumWALFiles() {<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>    return procedureStore != null ? procedureStore.getActiveLogs().size() : 0;<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>  }<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span><a name="line.2702"></a>
+<span class="sourceLineNo">2703</span>  public WALProcedureStore getWalProcedureStore() {<a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>    return procedureStore;<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>  }<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span><a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>  public int getRegionServerInfoPort(final ServerName sn) {<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>    int port = this.serverManager.getInfoPort(sn);<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>    return port == 0 ? conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT) : port;<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>  }<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span><a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>  @Override<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>  public String getRegionServerVersion(ServerName sn) {<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>    // Will return "0.0.0" if the server is not online to prevent move system region to unknown<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>    // version RS.<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>    return this.serverManager.getVersion(sn);<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>  }<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span><a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>  @Override<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>  public void checkIfShouldMoveSystemRegionAsync() {<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.2722"></a>
 <span class="sourceLineNo">2723</span>  }<a name="line.2723"></a>
 <span class="sourceLineNo">2724</span><a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>  @Override<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>  public void checkIfShouldMoveSystemRegionAsync() {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>    assignmentManager.checkIfShouldMoveSystemRegionAsync();<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>  }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span><a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>  /**<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>   * @return array of coprocessor SimpleNames.<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>   */<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>  public String[] getMasterCoprocessors() {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>    Set&lt;String&gt; masterCoprocessors = getMasterCoprocessorHost().getCoprocessors();<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>    return masterCoprocessors.toArray(new String[masterCoprocessors.size()]);<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>  }<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span><a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>  @Override<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>  public void abort(String reason, Throwable cause) {<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span>    if (isAborted() || isStopped()) {<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      return;<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>    }<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>    setAbortRequested();<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>    if (cpHost != null) {<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      // HBASE-4014: dump a list of loaded coprocessors.<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>      LOG.error(HBaseMarkers.FATAL, "Master server abort: loaded coprocessors are: " +<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>          getLoadedCoprocessors());<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>    }<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>    String msg = "***** ABORTING master " + this + ": " + reason + " *****";<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>    if (cause != null) {<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>    } else {<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>    }<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span><a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    try {<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>      stopMaster();<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>    } catch (IOException e) {<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>      LOG.error("Exception occurred while stopping master", e);<a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>    }<a name="line.2760"></a>
+<span class="sourceLineNo">2725</span>  /**<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>   * @return array of coprocessor SimpleNames.<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span>   */<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>  public String[] getMasterCoprocessors() {<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span>    Set&lt;String&gt; masterCoprocessors = getMasterCoprocessorHost().getCoprocessors();<a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>    return masterCoprocessors.toArray(new String[masterCoprocessors.size()]);<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>  }<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span><a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>  @Override<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>  public void abort(String reason, Throwable cause) {<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>    if (isAborted() || isStopped()) {<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>      return;<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>    }<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>    setAbortRequested();<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>    if (cpHost != null) {<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span>      // HBASE-4014: dump a list of loaded coprocessors.<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span>      LOG.error(HBaseMarkers.FATAL, "Master server abort: loaded coprocessors are: " +<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>          getLoadedCoprocessors());<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>    }<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>    String msg = "***** ABORTING master " + this + ": " + reason + " *****";<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>    if (cause != null) {<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>    } else {<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>    }<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span><a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>    try {<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>      stopMaster();<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>    } catch (IOException e) {<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>      LOG.error("Exception occurred while stopping master", e);<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>    }<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>  }<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span><a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>  @Override<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>  public ZKWatcher getZooKeeper() {<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>    return zooKeeper;<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span>  }<a name="line.2761"></a>
 <span class="sourceLineNo">2762</span><a name="line.2762"></a>
 <span class="sourceLineNo">2763</span>  @Override<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>  public ZKWatcher getZooKeeper() {<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>    return zooKeeper;<a name="line.2765"></a>
+<span class="sourceLineNo">2764</span>  public MasterCoprocessorHost getMasterCoprocessorHost() {<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>    return cpHost;<a name="line.2765"></a>
 <span class="sourceLineNo">2766</span>  }<a name="line.2766"></a>
 <span class="sourceLineNo">2767</span><a name="line.2767"></a>
 <span class="sourceLineNo">2768</span>  @Override<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>  public MasterCoprocessorHost getMasterCoprocessorHost() {<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>    return cpHost;<a name="line.2770"></a>
+<span class="sourceLineNo">2769</span>  public MasterQuotaManager getMasterQuotaManager() {<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>    return quotaManager;<a name="line.2770"></a>
 <span class="sourceLineNo">2771</span>  }<a name="line.2771"></a>
 <span class="sourceLineNo">2772</span><a name="line.2772"></a>
 <span class="sourceLineNo">2773</span>  @Override<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>  public MasterQuotaManager getMasterQuotaManager() {<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>    return quotaManager;<a name="line.2775"></a>
+<span class="sourceLineNo">2774</span>  public ProcedureExecutor&lt;MasterProcedureEnv&gt; getMasterProcedureExecutor() {<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>    return procedureExecutor;<a name="line.2775"></a>
 <span class="sourceLineNo">2776</span>  }<a name="line.2776"></a>
 <span class="sourceLineNo">2777</span><a name="line.2777"></a>
 <span class="sourceLineNo">2778</span>  @Override<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>  public ProcedureExecutor&lt;MasterProcedureEnv&gt; getMasterProcedureExecutor() {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>    return procedureExecutor;<a name="line.2780"></a>
+<span class="sourceLineNo">2779</span>  public ServerName getServerName() {<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>    return this.serverName;<a name="line.2780"></a>
 <span class="sourceLineNo">2781</span>  }<a name="line.2781"></a>
 <span class="sourceLineNo">2782</span><a name="line.2782"></a>
 <span class="sourceLineNo">2783</span>  @Override<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>  public ServerName getServerName() {<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>    return this.serverName;<a name="line.2785"></a>
+<span class="sourceLineNo">2784</span>  public AssignmentManager getAssignmentManager() {<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>    return this.assignmentManager;<a name="line.2785"></a>
 <span class="sourceLineNo">2786</span>  }<a name="line.2786"></a>
 <span class="sourceLineNo">2787</span><a name="line.2787"></a>
 <span class="sourceLineNo">2788</span>  @Override<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>  public AssignmentManager getAssignmentManager() {<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>    return this.assignmentManager;<a name="line.2790"></a>
+<span class="sourceLineNo">2789</span>  public CatalogJanitor getCatalogJanitor() {<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>    return this.catalogJanitorChore;<a name="line.2790"></a>
 <span class="sourceLineNo">2791</span>  }<a name="line.2791"></a>
 <span class="sourceLineNo">2792</span><a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>  @Override<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>  public CatalogJanitor getCatalogJanitor() {<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>    return this.catalogJanitorChore;<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>  }<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span><a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>  public MemoryBoundedLogMessageBuffer getRegionServerFatalLogBuffer() {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>    return rsFatals;<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>  }<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span><a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>  /**<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>   * Shutdown the cluster.<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>   * Master runs a coordinated stop of all RegionServers and then itself.<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>   */<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>  public void shutdown() throws IOException {<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>    if (cpHost != null) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>      cpHost.preShutdown();<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>    }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>    // Tell the servermanager cluster shutdown has been called. This makes it so when Master is<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>    // last running server, it'll stop itself. Next, we broadcast the cluster shutdown by setting<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>    // the cluster status as down. RegionServers will notice this change in state and will start<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>    // shutting themselves down. When last has exited, Master can go down.<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>    if (this.serverManager != null) {<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>      this.serverManager.shutdownCluster();<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>    }<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>    if (this.clusterStatusTracker != null) {<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      try {<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>        this.clusterStatusTracker.setClusterDown();<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>      } catch (KeeperException e) {<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>        LOG.error("ZooKeeper exception trying to set cluster as down in ZK", e);<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>      }<a name="line.2822"></a>
+<span class="sourceLineNo">2793</span>  public MemoryBoundedLogMessageBuffer getRegionServerFatalLogBuffer() {<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>    return rsFatals;<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>  }<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span><a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>  /**<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>   * Shutdown the cluster.<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>   * Master runs a coordinated stop of all RegionServers and then itself.<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>   */<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>  public void shutdown() throws IOException {<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>    if (cpHost != null) {<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>      cpHost.preShutdown();<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>    }<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>    // Tell the servermanager cluster shutdown has been called. This makes it so when Master is<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>    // last running server, it'll stop itself. Next, we broadcast the cluster shutdown by setting<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>    // the cluster status as down. RegionServers will notice this change in state and will start<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>    // shutting themselves down. When last has exited, Master can go down.<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>    if (this.serverManager != null) {<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>      this.serverManager.shutdownCluster();<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>    }<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>    if (this.clusterStatusTracker != null) {<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>      try {<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>        this.clusterStatusTracker.setClusterDown();<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>      } catch (KeeperException e) {<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>        LOG.error("ZooKeeper exception trying to set cluster as down in ZK", e);<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>      }<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>    }<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>    // Stop the procedure executor. Will stop any ongoing assign, unassign, server crash etc.,<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span>    // processing so we can go down.<a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>    if (this.procedureExecutor != null) {<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>      this.procedureExecutor.stop();<a name="line.2822"></a>
 <span class="sourceLineNo">2823</span>    }<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>    // Stop the procedure executor. Will stop any ongoing assign, unassign, server crash etc.,<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    // processing so we can go down.<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if (this.procedureExecutor != null) {<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>      this.procedureExecutor.stop();<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    }<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>    // Shutdown our cluster connection. This will kill any hosted RPCs that might be going on;<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>    // this is what we want especially if the Master is in startup phase doing call outs to<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    // hbase:meta, etc. when cluster is down. Without ths connection close, we'd have to wait on<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>    // the rpc to timeout.<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>    if (this.asyncClusterConnection != null) {<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      this.asyncClusterConnection.close();<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    }<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>  }<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span><a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>  public void stopMaster() throws IOException {<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    if (cpHost != null) {<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>      cpHost.preStopMaster();<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>    }<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>    stop("Stopped by " + Thread.currentThread().getName());<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>  }<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span><a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  @Override<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>  public void stop(String msg) {<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>    if (!isStopped()) {<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>      super.stop(msg);<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>      if (this.activeMasterManager != null) {<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>        this.activeMasterManager.stop();<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>      }<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    }<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>  }<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span><a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>  @VisibleForTesting<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>  protected void checkServiceStarted() throws ServerNotRunningYetException {<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    if (!serviceStarted) {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      throw new ServerNotRunningYetException("Server is not running yet");<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>    }<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>  }<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>  public static class MasterStoppedException extends DoNotRetryIOException {<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>    MasterStoppedException() {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>      super();<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>    }<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>  }<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span><a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>  void checkInitialized() throws PleaseHoldException, ServerNotRunningYetException,<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      MasterNotRunningException, MasterStoppedException {<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>    checkServiceStarted();<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>    if (!isInitialized()) {<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      throw new PleaseHoldException("Master is initializing");<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>    }<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>    if (isStopped()) {<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      throw new MasterStoppedException();<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>    }<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>  }<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span><a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>  /**<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>   * Report whether this master is currently the active master or not.<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>   * If not active master, we are parked on ZK waiting to become active.<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>   *<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>   * This method is used for testing.<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>   *<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>   * @return true if active master, false if not.<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>   */<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>  @Override<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>  public boolean isActiveMaster() {<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>    return activeMaster;<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>  }<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span><a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>  /**<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>   * Report whether this master has completed with its initialization and is<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span>   * ready.  If ready, the master is also the active master.  A standby master<a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>   * is never ready.<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>   *<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>   * This method is used for testing.<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>   *<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span>   * @return true if master is ready to go, false if not.<a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>   */<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>  @Override<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>  public boolean isInitialized() {<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span>    return initialized.isReady();<a name="line.2903"></a>
-<span class="sourceLineNo">2904</span>  }<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span><a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>  /**<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>   * Report whether this master is in maintenance mode.<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>   *<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>   * @return true if master is in maintenanceMode<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>   */<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>  @Override<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>  public boolean isInMaintenanceMode() {<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span>    return maintenanceMode;<a name="line.2913"></a>
+<span class="sourceLineNo">2824</span>    // Shutdown our cluster connection. This will kill any hosted RPCs that might be going on;<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>    // this is what we want especially if the Master is in startup phase doing call outs to<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>    // hbase:meta, etc. when cluster is down. Without ths connection close, we'd have to wait on<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>    // the rpc to timeout.<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>    if (this.asyncClusterConnection != null) {<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>      this.asyncClusterConnection.close();<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>    }<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>  }<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span><a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>  public void stopMaster() throws IOException {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>    if (cpHost != null) {<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>      cpHost.preStopMaster();<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>    }<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>    stop("Stopped by " + Thread.currentThread().getName());<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>  }<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span><a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>  @Override<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>  public void stop(String msg) {<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>    if (!isStopped()) {<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>      super.stop(msg);<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>      if (this.activeMasterManager != null) {<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>        this.activeMasterManager.stop();<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>      }<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span>    }<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>  }<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span><a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>  @VisibleForTesting<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>  protected void checkServiceStarted() throws ServerNotRunningYetException {<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span>    if (!serviceStarted) {<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>      throw new ServerNotRunningYetException("Server is not running yet");<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>    }<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>  }<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span><a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>  public static class MasterStoppedException extends DoNotRetryIOException {<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>    MasterStoppedException() {<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>      super();<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>    }<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>  }<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span><a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>  void checkInitialized() throws PleaseHoldException, ServerNotRunningYetException,<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>      MasterNotRunningException, MasterStoppedException {<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>    checkServiceStarted();<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>    if (!isInitialized()) {<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>      throw new PleaseHoldException("Master is initializing");<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>    }<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>    if (isStopped()) {<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>      throw new MasterStoppedException();<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>    }<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>  }<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span><a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>  /**<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>   * Report whether this master is currently the active master or not.<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>   * If not active master, we are parked on ZK waiting to become active.<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>   *<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>   * This method is used for testing.<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>   *<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span>   * @return true if active master, false if not.<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span>   */<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>  @Override<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>  public boolean isActiveMaster() {<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>    return activeMaster;<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>  }<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span><a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>  /**<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>   * Report whether this master has completed with its initialization and is<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span>   * ready.  If ready, the master is also the active master.  A standby master<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>   * is never ready.<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>   *<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>   * This method is used for testing.<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>   *<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span>   * @return true if master is ready to go, false if not.<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span>   */<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>  @Override<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>  public boolean isInitialized() {<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>    return initialized.isReady();<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>  }<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span><a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>  /**<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span>   * Report whether this master is in maintenance mode.<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>   *<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span>   * @return true if master is in maintenanceMode<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>   */<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span>  @Override<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span>  public boolean isInMaintenanceMode() {<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>    return maintenanceMode;<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>  }<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span><a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>  @VisibleForTesting<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span>  public void setInitialized(boolean isInitialized) {<a name="line.2912"></a>
+<span class="sourceLineNo">2913</span>    procedureExecutor.getEnvironment().setEventReady(initialized, isInitialized);<a name="line.2913"></a>
 <span class="sourceLineNo">2914</span>  }<a name="line.2914"></a>
 <span class="sourceLineNo">2915</span><a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>  @VisibleForTesting<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>  public void setInitialized(boolean isInitialized) {<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span>    procedureExecutor.getEnvironment().setEventReady(initialized, isInitialized);<a name="line.2918"></a>
+<span class="sourceLineNo">2916</span>  @Override<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>  public ProcedureEvent&lt;?&gt; getInitializedEvent() {<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>    return initialized;<a name="line.2918"></a>
 <span class="sourceLineNo">2919</span>  }<a name="line.2919"></a>
 <span class="sourceLineNo">2920</span><a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>  @Override<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>  public ProcedureEvent&lt;?&gt; getInitializedEvent() {<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span>    return initialized;<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>  }<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span><a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>  /**<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>   * Compute the average load across all region servers.<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>   * Currently, this uses a very naive computation - just uses the number of<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>   * regions being served, ignoring stats about number of requests.<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>   * @return the average load<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>   */<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>  public double getAverageLoad() {<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>    if (this.assignmentManager == null) {<a name="line.2933"></a>
+<span class="sourceLineNo">2921</span>  /**<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>   * Compute the average load across all region servers.<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span>   * Currently, this uses a very naive computation - just uses the number of<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>   * regions being served, ignoring stats about number of requests.<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>   * @return the average load<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>   */<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>  public double getAverageLoad() {<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>    if (this.assignmentManager == null) {<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>      return 0;<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span>    }<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span><a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>    RegionStates regionStates = this.assignmentManager.getRegionStates();<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>    if (regionStates == null) {<a name="line.2933"></a>
 <span class="sourceLineNo">2934</span>      return 0;<a name="line.2934"></a>
 <span class="sourceLineNo">2935</span>    }<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span><a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>    RegionStates regionStates = this.assignmentManager.getRegionStates();<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    if (regionStates == null) {<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>      return 0;<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>    }<a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>    return regionStates.getAverageLoad();<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span>  }<a name="line.2942"></a>
-<span class="sourceLineNo">2943</span><a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>  /*<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>   * @return the count of region split plans executed<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>   */<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>  public long getSplitPlanCount() {<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>    return splitPlanCount;<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>  }<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span><a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>  /*<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>   * @return the count of region merge plans executed<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>   */<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>  public long getMergePlanCount() {<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>    return mergePlanCount;<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>  }<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span><a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>  @Override<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>  public boolean registerService(Service instance) {<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>    /*<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>     * No stacking of instances is allowed for a single service name<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>     */<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>    Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>      LOG.error("Coprocessor service "+serviceName+<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>          " already registered, rejecting request from "+instance<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>      );<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>      return false;<a name="line.2969"></a>
+<span class="sourceLineNo">2936</span>    return regionStates.getAverageLoad();<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>  }<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span><a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>  /*<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>   * @return the count of region split plans executed<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span>   */<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span>  public long getSplitPlanCount() {<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span>    return splitPlanCount;<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>  }<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span><a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>  /*<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>   * @return the count of region merge plans executed<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>   */<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>  public long getMergePlanCount() {<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>    return mergePlanCount;<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span>  }<a name="line.2951"></a>
+<span class="sourceLineNo">2952</span><a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>  @Override<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>  public boolean registerService(Service instance) {<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>    /*<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>     * No stacking of instances is allowed for a single service name<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>     */<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>    Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span>      LOG.error("Coprocessor service "+serviceName+<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>          " already registered, rejecting request from "+instance<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>      );<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>      return false;<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>    }<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span><a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>    if (LOG.isDebugEnabled()) {<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span>      LOG.debug("Registered master coprocessor service: service="+serviceName);<a name="line.2969"></a>
 <span class="sourceLineNo">2970</span>    }<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span><a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>    if (LOG.isDebugEnabled()) {<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>      LOG.debug("Registered master coprocessor service: service="+serviceName);<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>    }<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span>    return true;<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>  }<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span><a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>  /**<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>   * Utility for constructing an instance of the passed HMaster class.<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span>   * @param masterClass<a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>   * @return HMaster instance.<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>   */<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>  public static HMaster constructMaster(Class&lt;? extends HMaster&gt; masterClass,<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>      final Configuration conf)  {<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span>    try {<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>      Constructor&lt;? extends HMaster&gt; c = masterClass.getConstructor(Configuration.class);<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span>      return c.newInstance(conf);<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>    } catch(Exception e) {<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>      Throwable error = e;<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>      if (e instanceof InvocationTargetException &amp;&amp;<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>          ((InvocationTargetException)e).getTargetException() != null) {<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span>        error = ((InvocationTargetException)e).getTargetException();<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>      }<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>      throw new RuntimeException("Failed construction of Master: " + masterClass.toString() + ". "<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>        , error);<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>    }<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>  }<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span><a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>  /**<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>   * @see org.apache.hadoop.hbase.master.HMasterCommandLine<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>   */<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>  public static void main(String [] args) {<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span>    LOG.info("STARTING service " + HMaster.class.getSimpleName());<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>    VersionInfo.logVersion();<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>    new HMasterCommandLine(HMaster.class).doMain(args);<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>  }<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span><a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>  public HFileCleaner getHFileCleaner() {<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span>    return this.hfileCleaner;<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>  }<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span><a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>  public LogCleaner getLogCleaner() {<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>    return this.logCleaner;<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>  }<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span><a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>  /**<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>   * @return the underlying snapshot manager<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>   */<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>  @Override<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>  public SnapshotManager getSnapshotManager() {<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>    return this.snapshotManager;<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>  }<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span><a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>  /**<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>   * @return the underlying MasterProcedureManagerHost<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>   */<a name="line.3027"></a>
+<span class="sourceLineNo">2971</span>    return true;<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>  }<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span><a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>  /**<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>   * Utility for constructing an instance of the passed HMaster class.<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>   * @param masterClass<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>   * @return HMaster instance.<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>   */<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>  public static HMaster constructMaster(Class&lt;? extends HMaster&gt; masterClass,<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>      final Configuration conf)  {<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>    try {<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>      Constructor&lt;? extends HMaster&gt; c = masterClass.getConstructor(Configuration.class);<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>      return c.newInstance(conf);<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span>    } catch(Exception e) {<a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>      Throwable error = e;<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>      if (e instanceof InvocationTargetException &amp;&amp;<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>          ((InvocationTargetException)e).getTargetException() != null) {<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>        error = ((InvocationTargetException)e).getTargetException();<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>      }<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>      throw new RuntimeException("Failed construction of Master: " + masterClass.toString() + ". "<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>        , error);<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>    }<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>  }<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span><a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>  /**<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>   * @see org.apache.hadoop.hbase.master.HMasterCommandLine<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>   */<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>  public static void main(String [] args) {<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>    LOG.info("STARTING service " + HMaster.class.getSimpleName());<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>    VersionInfo.logVersion();<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>    new HMasterCommandLine(HMaster.class).doMain(args);<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>  }<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span><a name="line.3003"></a>
+<span class="sourceLineNo">3004</span>  public HFileCleaner getHFileCleaner() {<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>    return this.hfileCleaner;<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>  }<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span><a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>  public LogCleaner getLogCleaner() {<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>    return this.logCleaner;<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>  }<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span><a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>  /**<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>   * @return the underlying snapshot manager<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>   */<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>  @Override<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>  public SnapshotManager getSnapshotManager() {<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>    return this.snapshotManager;<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>  }<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span><a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>  /**<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>   * @return the underlying MasterProcedureManagerHost<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>   */<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>  @Override<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>  public MasterProcedureManagerHost getMasterProcedureManagerHost() {<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>    return mpmHost;<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>  }<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span><a name="line.3027"></a>
 <span class="sourceLineNo">3028</span>  @Override<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>  public MasterProcedureManagerHost getMasterProcedureManagerHost() {<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>    return mpmHost;<a name="line.3030"></a>
+<span class="sourceLineNo">3029</span>  public ClusterSchema getClusterSchema() {<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>    return this.clusterSchemaService;<a name="line.3030"></a>
 <span class="sourceLineNo">3031</span>  }<a name="line.3031"></a>
 <span class="sourceLineNo">3032</span><a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>  @Override<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span>  public ClusterSchema getClusterSchema() {<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>    return this.clusterSchemaService;<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>  }<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span><a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>  /**<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>   * Create a new Namespace.<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>   * @param namespaceDescriptor descriptor for new Namespace<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>   * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>   * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>   * &lt;code&gt;nonceGroup&lt;/code&gt; (the source must ensure each operation gets a unique id).<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>   * @return procedure id<a name="line.3044"></a>
-<span class="sourceLineNo">3045</span>   */<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>  long createNamespace(final NamespaceDescriptor namespaceDescriptor, final long nonceGroup,<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span>      final long nonce) throws IOException {<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span>    checkInitialized();<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span><a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>    TableName.isLegalNamespaceName(Bytes.toBytes(namespaceDescriptor.getName()));<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span><a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>    return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>          nonceGroup, nonce) {<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>      @Override<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>      protected void run() throws IOException {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>        getMaster().getMasterCoprocessorHost().preCreateNamespace(namespaceDescriptor);<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3058"></a>
-<span class="sourceLineNo">3059</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span>        LOG.info(getClientIdAuditPrefix() + " creating " + namespaceDescriptor);<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>        // Execute the operation synchronously - wait for the operation to complete before<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span>        // continuing.<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>        setProcId(getClusterSchema().createNamespace(namespaceDescriptor, getNonceKey(), latch));<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>        latch.await();<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>        getMaster().getMasterCoprocessorHost().postCreateNamespace(namespaceDescriptor);<a name="line.3065"></a>
+<span class="sourceLineNo">3033</span>  /**<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>   * Create a new Namespace.<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>   * @param namespaceDescriptor descriptor for new Namespace<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>   * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span>   * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>   * &lt;code&gt;nonceGroup&lt;/code&gt; (the source must ensure each operation gets a unique id).<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>   * @return procedure id<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>   */<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>  long createNamespace(final NamespaceDescriptor namespaceDescriptor, final long nonceGroup,<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span>      final long nonce) throws IOException {<a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>    checkInitialized();<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span><a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>    TableName.isLegalNamespaceName(Bytes.toBytes(namespaceDescriptor.getName()));<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span><a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>    return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>          nonceGroup, nonce) {<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>      @Override<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>      protected void run() throws IOException {<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span>        getMaster().getMasterCoprocessorHost().preCreateNamespace(namespaceDescriptor);<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>        LOG.info(getClientIdAuditPrefix() + " creating " + namespaceDescriptor);<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span>        // Execute the operation synchronously - wait for the operation to complete before<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>        // continuing.<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>        setProcId(getClusterSchema().createNamespace(namespaceDescriptor, getNonceKey(), latch));<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>        latch.await();<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>        getMaster().getMasterCoprocessorHost().postCreateNamespace(namespaceDescriptor);<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span>      }<a name="line.3061"></a>
+<span class="sourceLineNo">3062</span><a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>      @Override<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>      protected String getDescription() {<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>        return "CreateNamespaceProcedure";<a name="line.3065"></a>
 <span class="sourceLineNo">3066</span>      }<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span><a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>      @Override<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>      protected String getDescription() {<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span>        return "CreateNamespaceProcedure";<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>      }<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>    });<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>  }<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span><a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>  /**<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>   * Modify an existing Namespace.<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>   * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>   * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>   * &lt;code&gt;nonceGroup&lt;/code&gt; (the source must ensure each operation gets a unique id).<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>   * @return procedure id<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>   */<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>  long modifyNamespace(final NamespaceDescriptor newNsDescriptor, final long nonceGroup,<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>      final long nonce) throws IOException {<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>    checkInitialized();<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span><a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>    TableName.isLegalNamespaceName(Bytes.toBytes(newNsDescriptor.getName()));<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span><a name="line.3087"></a>
-<span class="sourceLineNo">3088</span>    return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>          nonceGroup, nonce) {<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>      @Override<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>      protected void run() throws IOException {<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>        NamespaceDescriptor oldNsDescriptor = getNamespace(newNsDescriptor.getName());<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>        getMaster().getMasterCoprocessorHost().preModifyNamespace(oldNsDescriptor, newNsDescriptor);<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>        LOG.info(getClientIdAuditPrefix() + " modify " + newNsDescriptor);<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>        // Execute the operation synchronously - wait for the operation to complete before<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>        // continuing.<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>        setProcId(getClusterSchema().modifyNamespace(newNsDescriptor, getNonceKey(), latch));<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>        latch.await();<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>        getMaster().getMasterCoprocessorHost().postModifyNamespace(oldNsDescriptor,<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span>          newNsDescriptor);<a name="line.3103"></a>
+<span class="sourceLineNo">3067</span>    });<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span>  }<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span><a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>  /**<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>   * Modify an existing Namespace.<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>   * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>   * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>   * &lt;code&gt;nonceGroup&lt;/code&gt; (the source must ensure each operation gets a unique id).<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>   * @return procedure id<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>   */<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>  long modifyNamespace(final NamespaceDescriptor newNsDescriptor, final long nonceGroup,<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>      final long nonce) throws IOException {<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>    checkInitialized();<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span><a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>    TableName.isLegalNamespaceName(Bytes.toBytes(newNsDescriptor.getName()));<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span><a name="line.3082"></a>
+<span class="sourceLineNo">3083</span>    return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>          nonceGroup, nonce) {<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>      @Override<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span>      protected void run() throws IOException {<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span>        NamespaceDescriptor oldNsDescriptor = getNamespace(newNsDescriptor.getName());<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>        getMaster().getMasterCoprocessorHost().preModifyNamespace(oldNsDescriptor, newNsDescriptor);<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span>        LOG.info(getClientIdAuditPrefix() + " modify " + newNsDescriptor);<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>        // Execute the operation synchronously - wait for the operation to complete before<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>        // continuing.<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>        setProcId(getClusterSchema().modifyNamespace(newNsDescriptor, getNonceKey(), latch));<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>        latch.await();<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>        getMaster().getMasterCoprocessorHost().postModifyNamespace(oldNsDescriptor,<a name="line.3097"></a>
+<span class="sourceLineNo">3098</span>          newNsDescriptor);<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>      }<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span><a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>      @Override<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span>      protected String getDescription() {<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span>        return "ModifyNamespaceProcedure";<a name="line.3103"></a>
 <span class="sourceLineNo">3104</span>      }<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span><a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>      @Override<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>      protected String getDescription() {<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>        return "ModifyNamespaceProcedure";<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>      }<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>    });<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>  }<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span><a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>  /**<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>   * Delete an existing Namespace. Only empty Namespaces (no tables) can be removed.<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>   * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>   * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>   * &lt;code&gt;nonceGroup&lt;/code&gt; (the source must ensure each operation gets a unique id).<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>   * @return procedure id<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>   */<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>  long deleteNamespace(final String name, final long nonceGroup, final long nonce)<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>      throws IOException {<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>    checkInitialized();<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span><a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>    return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>          nonceGroup, nonce) {<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>      @Override<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>      protected void run() throws IOException {<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>        getMaster().getMasterCoprocessorHost().preDeleteNamespace(name);<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>        LOG.info(getClientIdAuditPrefix() + " delete " + name);<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>        // Execute the operation synchronously - wait for the operation to complete before<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>        // continuing.<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>        //<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>        setProcId(submitProcedure(<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>              new DeleteNamespaceProcedure(procedureExecutor.getEnvironment(), name, latch)));<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>        latch.await();<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>        // Will not be invoked in the face of Exception thrown by the Procedure's execution<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>        getMaster().getMasterCoprocessorHost().postDeleteNamespace(name);<a name="line.3140"></a>
+<span class="sourceLineNo">3105</span>    });<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>  }<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span><a name="line.3107"></a>
+<span class="sourceLineNo">3108</span>  /**<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>   * Delete an existing Namespace. Only empty Namespaces (no tables) can be removed.<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>   * @param nonceGroup Identifier for the source of the request, a client or process.<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>   * @param nonce A unique identifier for this operation from the client or process identified by<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>   * &lt;code&gt;nonceGroup&lt;/code&gt; (the source must ensure each operation gets a unique id).<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span>   * @return procedure id<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span>   */<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>  long deleteNamespace(final String name, final long nonceGroup, final long nonce)<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>      throws IOException {<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span>    checkInitialized();<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span><a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>    return MasterProcedureUtil.submitProcedure(new MasterProcedureUtil.NonceProcedureRunnable(this,<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>          nonceGroup, nonce) {<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>      @Override<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>      protected void run() throws IOException {<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>        getMaster().getMasterCoprocessorHost().preDeleteNamespace(name);<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>        LOG.info(getClientIdAuditPrefix() + " delete " + name);<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>        // Execute the operation synchronously - wait for the operation to complete before<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>        // continuing.<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>        //<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>        // We need to wait for the procedure to potentially fail due to "prepare" sanity<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>        // checks. This will block only the beginning of the procedure. See HBASE-19953.<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>        ProcedurePrepareLatch latch = ProcedurePrepareLatch.createBlockingLatch();<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>        setProcId(submitProcedure(<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span>              new DeleteNamespaceProcedure(procedureExecutor.getEnvironment(), name, latch)));<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>        latch.await();<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>        // Will not be invoked in the face of Exception thrown by the Procedure's execution<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>        getMaster().getMasterCoprocessorHost().postDeleteNamespace(name);<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>      }<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span><a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>      @Override<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>      protected String getDescription() {<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span>        return "DeleteNamespaceProcedure";<a name="line.3140"></a>
 <span class="sourceLineNo">3141</span>      }<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span><a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>      @Override<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>      protected String getDescription() {<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span>        return "DeleteNamespaceProcedure";<a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>      }<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>    });<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span>  }<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span><a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>  /**<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>   * Get a Namespace<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>   * @param name Name of the Namespace<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>   * @return Namespace descriptor for &lt;code&gt;name&lt;/code&gt;<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>   */<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>  NamespaceDescriptor getNamespace(String name) throws IOException {<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>    checkInitialized();<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>    if (this.cpHost != null) this.cpHost.preGetNamespaceDescriptor(name);<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>    NamespaceDescriptor nsd = this.clusterSchemaService.getNamespace(name);<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>    if (this.cpHost != null) this.cpHost.postGetNamespaceDescriptor(nsd);<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>    return nsd;<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>  }<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span><a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>  /**<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>   * Get all Namespaces<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>   * @return All Namespace descriptors<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>   */<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>  List&lt;NamespaceDescriptor&gt; getNamespaces() throws IOException {<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>    checkInitialized();<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>    final List&lt;NamespaceDescriptor&gt; nsds = new ArrayList&lt;&gt;();<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span>    if (cpHost != null) {<a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>      cpHost.preListNamespaceDescriptors(nsds);<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>    }<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>    nsds.addAll(this.clusterSchemaService.getNamespaces());<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>    if (this.cpHost != null) {<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>      this.cpHost.postListNamespaceDescriptors(nsds);<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>    }<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>    return nsds;<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>  }<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span><a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>  /**<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span>   * List namespace names<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>   * @return All namespace names<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>   */<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>  public List&lt;String&gt; listNamespaces() throws IOException {<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>    checkInitialized();<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>    List&lt;String&gt; namespaces = new ArrayList&lt;&gt;();<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>    if (cpHost != null) {<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>      cpHost.preListNamespaces(namespaces);<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>    }<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>    for (NamespaceDescriptor namespace : clusterSchemaService.getNamespaces()) {<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>      namespaces.add(namespace.getName());<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>    }<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>    if (cpHost != null) {<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>      cpHost.postListNamespaces(namespaces);<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>    }<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>    return namespaces;<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>  }<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span><a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>  @Override<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>  public List&lt;TableName&gt; listTableNamesByNamespace(String name) throws IOException {<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>    checkInitialized();<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>    return listTableNames(name, null, true);<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>  }<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span><a name="line.3204"></a>
-<span class="sourceLineNo">3205</span>  @Override<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>  public List&lt;TableDescriptor&gt; listTableDescriptorsByNamespace(String name) throws IOException {<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>    checkInitialized();<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>    return listTableDescriptors(name, null, null, true);<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>  }<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span><a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>  @Override<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>  public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning)<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>      throws IOException {<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>    if (cpHost != null) {<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>      cpHost.preAbortProcedure(this.procedureExecutor, procId);<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>    }<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span><a name="line.3217"></a>
-<span class="sourceLineNo">3218</span>    final boolean result = this.procedureExecutor.abort(procId, mayInterruptIfRunning);<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span><a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>    if (cpHost != null) {<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span>      cpHost.postAbortProcedure();<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>    }<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span><a name="line.3223"></a>
-<span class="sourceLineNo">3224</span>    return result;<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span>  }<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span><a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>  @Override<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>  public List&lt;Procedure&lt;?&gt;&gt; getProcedures() throws IOException {<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>    if (cpHost != null) {<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>      cpHost.preGetProcedures();<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span>    }<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span><a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>    @SuppressWarnings({ "unchecked", "rawtypes" })<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span>    List&lt;Procedure&lt;?&gt;&gt; procList = (List) this.procedureExecutor.getProcedures();<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span><a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>    if (cpHost != null) {<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span>      cpHost.postGetProcedures(procList);<a name="line.3237"></a>
-<span class="sourceLineNo">3238</span>    }<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span><a name="line.3239"></a>
-<span class="sourceLineNo">3240</span>    return procList;<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>  }<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span><a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>  @Override<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span>  public List&lt;LockedResource&gt; getLocks() throws IOException {<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span>    if (cpHost != null) {<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span>      cpHost.preGetLocks();<a name="line.3246"></a>
-<span class="sourceLineNo">3247</span>    }<a name="line.3247"></a>
+<span class="sourceLineNo">3142</span>    });<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span>  }<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span><a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>  /**<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>   * Get a Namespace<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>   * @param name Name of the Namespace<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>   * @return Namespace descriptor for &lt;code&gt;name&lt;/code&gt;<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span>   */<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span>  NamespaceDescriptor getNamespace(String name) throws IOException {<a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>    checkInitialized();<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>    if (this.cpHost != null) this.cpHost.preGetNamespaceDescriptor(name);<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>    NamespaceDescriptor nsd = this.clusterSchemaService.getNamespace(name);<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span>    if (this.cpHost != null) this.cpHost.postGetNamespaceDescriptor(nsd);<a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>    return nsd;<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>  }<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span><a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>  /**<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>   * Get all Namespaces<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span>   * @return All Namespace descriptors<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>   */<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>  List&lt;NamespaceDescriptor&gt; getNamespaces() throws IOException {<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span>    checkInitialized();<a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>    final List&lt;NamespaceDescriptor&gt; nsds = new ArrayList&lt;&gt;();<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>    if (cpHost != null) {<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>      cpHost.preListNamespaceDescriptors(nsds);<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span>    }<a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>    nsds.addAll(this.clusterSchemaService.getNamespaces());<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>    if (this.cpHost != null) {<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>      this.cpHost.postListNamespaceDescriptors(nsds);<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>    }<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>    return nsds;<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>  }<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span><a name="line.3174"></a>
+<span class="sourceLineNo">3175</span>  /**<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>   * List namespace names<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>   * @return All namespace names<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>   */<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>  public List&lt;String&gt; listNamespaces() throws IOException {<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>    checkInitialized();<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>    List&lt;String&gt; namespaces = new ArrayList&lt;&gt;();<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>    if (cpHost != null) {<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>      cpHost.preListNamespaces(namespaces);<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>    }<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>    for (NamespaceDescriptor namespace : clusterSchemaService.getNamespaces()) {<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span>      namespaces.add(namespace.getName());<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span>    }<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>    if (cpHost != null) {<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>      cpHost.postListNamespaces(namespaces);<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>    }<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>    return namespaces;<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>  }<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span><a name="line.3193"></a>
+<span class="sourceLineNo">3194</span>  @Override<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span>  public List&lt;TableName&gt; listTableNamesByNamespace(String name) throws IOException {<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span>    checkInitialized();<a name="line.3196"></a>
+<span class="sourceLineNo">3197</span>    return listTableNames(name, null, true);<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span>  }<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span><a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>  @Override<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span>  public List&lt;TableDescriptor&gt; listTableDescriptorsByNamespace(String name) throws IOException {<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>    checkInitialized();<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span>    return listTableDescriptors(name, null, null, true);<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>  }<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span><a name="line.3205"></a>
+<span class="sourceLineNo">3206</span>  @Override<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span>  public boolean abortProcedure(final long procId, final boolean mayInterruptIfRunning)<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span>      throws IOException {<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span>    if (cpHost != null) {<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span>      cpHost.preAbortProcedure(this.procedureExecutor, procId);<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span>    }<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span><a name="line.3212"></a>
+<span class="sourceLineNo">3213</span>    final boolean result = this.procedureExecutor.abort(procId, mayInterruptIfRunning);<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span><a name="line.3214"></a>
+<span class="sourceLineNo">3215</span>    if (cpHost != null) {<a name="line.3215"></a>
+<span class="sourceLineNo">3216</span>      cpHost.postAbortProcedure();<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span>    }<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span><a name="line.3218"></a>
+<span class="sourceLineNo">3219</span>    return result;<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span>  }<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span><a name="line.3221"></a>
+<span class="sourceLineNo">3222</span>  @Override<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span>  public List&lt;Procedure&lt;?&gt;&gt; getProcedures() throws IOException {<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span>    if (cpHost != null) {<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span>      cpHost.preGetProcedures();<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span>    }<a name="line.3226"></a>
+<span class="sourceLineNo">3227</span><a name="line.3227"></a>
+<span class="sourceLineNo">3228</span>    @SuppressWarnings({ "unchecked", "rawtypes" })<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span>    List&lt;Procedure&lt;?&gt;&gt; procList = (List) this.procedureExecutor.getProcedures();<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span><a name="line.3230"></a>
+<span class="sourceLineNo">3231</span>    if (cpHost != null) {<a name="line.3231"></a>
+<span class="sourceLineNo">3232</span>      cpHost.postGetProcedures(procList);<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span>    }<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span><a name="line.3234"></a>
+<span class="sourceLineNo">3235</span>    return procList;<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span>  }<a name="line.3236"></a>
+<span class="sourceLineNo">3237</span><a name="line.3237"></a>
+<span class="sourceLineNo">3238</span>  @Override<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span>  public List&lt;LockedResource&gt; getLocks() throws IOException {<a name="line.3239"></a>
+<span class="sourceLineNo">3240</span>    if (cpHost != null) {<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span>      cpHost.preGetLocks();<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span>    }<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span><a name="line.3243"></a>
+<span class="sourceLineNo">3244</span>    MasterProcedureScheduler procedureScheduler =<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span>      procedureExecutor.getEnvironment().getProcedureScheduler();<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span><a name="line.3246"></a>
+<span class="sourceLineNo">3247</span>    final List&lt;LockedResource&gt; lockedResources = procedureScheduler.getLocks();<a name="line.3247"></a>
 <span class="sourceLineNo">3248</span><a name="line.3248"></a>
-<span class="sourceLineNo">3249</span>    MasterProcedureScheduler procedureScheduler =<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>      procedureExecutor.getEnvironment().getProcedureScheduler();<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span><a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>    final List&lt;LockedResource&gt; lockedResources = procedureScheduler.getLocks();<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span><a name="line.3253"></a>
-<span class="sourceLineNo">3254</span>    if (cpHost != null) {<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>      cpHost.postGetLocks(lockedResources);<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span>    }<a name="line.3256"></a>
-<span class="sourceLineNo">3257</span><a name="line.3257"></a>
-<span class="sourceLineNo">3258</span>    return lockedResources;<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span>  }<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span><a name="line.3260"></a>
-<span class="sourceLineNo">3261</span>  /**<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>   * Returns the list of table descriptors that match the specified request<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span>   * @param namespace the namespace to query, or null if querying for all<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>   * @param regex The regular expression to match against, or null if querying for all<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>   * @param tableNameList the list of table names, or null if querying for all<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span>   * @param includeSysTables False to match only against userspace tables<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>   * @return the list of table descriptors<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span>   */<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span>  public List&lt;TableDescriptor&gt; listTableDescriptors(final String namespace, final String regex,<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span>      final List&lt;TableName&gt; tableNameList, final boolean includeSysTables)<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span>  throws IOException {<a name="line.3271"></a>
-<span class="sourceLineNo">3272</span>    List&lt;TableDescriptor&gt; htds = new ArrayList&lt;&gt;();<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span>    if (cpHost != null) {<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span>      cpHost.preGetTableDescriptors(tableNameList, htds, regex);<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span>    }<a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>    htds = getTableDescriptors(htds, namespace, regex, tableNameList, includeSysTables);<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>    if (cpHost != null) {<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span>      cpHost.postGetTableDescriptors(tableNameList, htds, regex);<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>    }<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>    return htds;<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>  }<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span><a name="line.3282"></a>
-<span class="sourceLineNo">3283</span>  /**<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>   * Returns the list of table names that match the specified request<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span>   * @param regex The regular expression to match against, or null if querying for all<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span>   * @param namespace the namespace to query, or null if querying for all<a name="line.3286"></a>
-<span class="sourceLineNo">3287</span>   * @param includeSysTables False to match only against userspace tables<a name="line.3287"></a>
-<span class="sourceLineNo">3288</span>   * @return the list of table names<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span>   */<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span>  public List&lt;TableName&gt; listTableNames(final String namespace, final String regex,<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span>      final boolean includeSysTables) throws IOException {<a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>    List&lt;TableDescriptor&gt; htds = new ArrayList&lt;&gt;();<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>    if (cpHost != null) {<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>      cpHost.preGetTableNames(htds, regex);<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>    }<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span>    htds = getTableDescriptors(htds, namespace, regex, null, includeSysTables);<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>    if (cpHost != null) {<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>      cpHost.postGetTableNames(htds, regex);<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>    }<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>    List&lt;TableName&gt; result = new ArrayList&lt;&gt;(htds.size());<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span>    for (TableDescriptor htd: htds) result.add(htd.getTableName());<a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>    return result;<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span>  }<a name="line.3303"></a>
-<span class="sourceLineNo">3304</span><a name="line.3304"></a>
-<span class="sourceLineNo">3305</span>  /**<a name="line.3305"></a>
-<span class="sourceLineNo">3306</span>   * @return list of table table descriptors after filtering by regex and whether to include system<a name="line.3306"></a>
-<span class="sourceLineNo">3307</span>   *    tables, etc.<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span>   * @throws IOException<a name="line.3308"></a>
-<span class="sourceLineNo">3309</span>   */<a name="line.3309"></a>
-<span class="sourceLineNo">3310</span>  private List&lt;TableDescriptor&gt; getTableDescriptors(final List&lt;TableDescriptor&gt; htds,<a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>      final String namespace, final String regex, final List&lt;TableName&gt; tableNameList,<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>      final boolean includeSysTables)<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>  throws IOException {<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span>    if (tableNameList == null || tableNameList.isEmpty()) {<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>      // request for all TableDescriptors<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span>      Collection&lt;TableDescriptor&gt; allHtds;<a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>      if (namespace != null &amp;&amp; namespace.length() &gt; 0) {<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>        // Do a check on the namespace existence. Will fail if does not exist.<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>        this.clusterSchemaService.getNamespace(namespace);<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span>        allHtds = tableDescriptors.getByNamespace(namespace).values();<a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>      } else {<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>        allHtds = tableDescriptors.getAll().values();<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span>      }<a name="line.3323"></a>
-<span class="sourceLineNo">3324</span>      for (TableDescriptor desc: allHtds) {<a name="line.3324"></a>
-<span class="sourceLineNo">3325</span>        if (tableStateManager.isTablePresent(desc.getTableName())<a name="line.3325"></a>
-<span class="sourceLineNo">3326</span>            &amp;&amp; (includeSysTables || !desc.getTableName().isSystemTable())) {<a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>          htds.add(desc);<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span>        }<a name="line.3328"></a>
-<span class="sourceLineNo">3329</span>      }<a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>    } else {<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>      for (TableName s: tableNameList) {<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>        if (tableStateManager.isTablePresent(s)) {<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span>          TableDescriptor desc = tableDescriptors.get(s);<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span>          if (desc != null) {<a name="line.3334"></a>
-<span class="sourceLineNo">3335</span>            htds.add(desc);<a name="line.3335"></a>
-<span class="sourceLineNo">3336</span>          }<a name="line.3336"></a>
-<span class="sourceLineNo">3337</span>        }<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span>      }<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span>    }<a name="line.3339"></a>
+<span class="sourceLineNo">3249</span>    if (cpHost != null) {<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span>      cpHost.postGetLocks(lockedResources);<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span>    }<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span><a name="line.3252"></a>
+<span class="sourceLineNo">3253</span>    return lockedResources;<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span>  }<a name="line.3254"></a>
+<span class="sourceLineNo">3255</span><a name="line.3255"></a>
+<span class="sourceLineNo">3256</span>  /**<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span>   * Returns the list of table descriptors that match the specified request<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span>   * @param namespace the namespace to query, or null if querying for all<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span>   * @param regex The regular expression to match against, or null if querying for all<a name="line.3259"></a>
+<span class="sourceLineNo">3260</span>   * @param tableNameList the list of table names, or null if querying for all<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span>   * @param includeSysTables False to match only against userspace tables<a name="line.3261"></a>
+<span class="sourceLineNo">3262</span>   * @return the list of table descriptors<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span>   */<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span>  public List&lt;TableDescriptor&gt; listTableDescriptors(final String namespace, final String regex,<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span>      final List&lt;TableName&gt; tableNameList, final boolean includeSysTables)<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span>  throws IOException {<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span>    List&lt;TableDescriptor&gt; htds = new ArrayList&lt;&gt;();<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span>    if (cpHost != null) {<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span>      cpHost.preGetTableDescriptors(tableNameList, htds, regex);<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span>    }<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span>    htds = getTableDescriptors(htds, namespace, regex, tableNameList, includeSysTables);<a name="line.3271"></a>
+<span class="sourceLineNo">3272</span>    if (cpHost != null) {<a name="line.3272"></a>
+<span class="sourceLineNo">3273</span>      cpHost.postGetTableDescriptors(tableNameList, htds, regex);<a name="line.3273"></a>
+<span class="sourceLineNo">3274</span>    }<a name="line.3274"></a>
+<span class="sourceLineNo">3275</span>    return htds;<a name="line.3275"></a>
+<span class="sourceLineNo">3276</span>  }<a name="line.3276"></a>
+<span class="sourceLineNo">3277</span><a name="line.3277"></a>
+<span class="sourceLineNo">3278</span>  /**<a name="line.3278"></a>
+<span class="sourceLineNo">3279</span>   * Returns the list of table names that match the specified request<a name="line.3279"></a>
+<span class="sourceLineNo">3280</span>   * @param regex The regular expression to match against, or null if querying for all<a name="line.3280"></a>
+<span class="sourceLineNo">3281</span>   * @param namespace the namespace to query, or null if querying for all<a name="line.3281"></a>
+<span class="sourceLineNo">3282</span>   * @param includeSysTables False to match only against userspace tables<a name="line.3282"></a>
+<span class="sourceLineNo">3283</span>   * @return the list of table names<a name="line.3283"></a>
+<span class="sourceLineNo">3284</span>   */<a name="line.3284"></a>
+<span class="sourceLineNo">3285</span>  public List&lt;TableName&gt; listTableNames(final String namespace, final String regex,<a name="line.3285"></a>
+<span class="sourceLineNo">3286</span>      final boolean includeSysTables) throws IOException {<a name="line.3286"></a>
+<span class="sourceLineNo">3287</span>    List&lt;TableDescriptor&gt; htds = new ArrayList&lt;&gt;();<a name="line.3287"></a>
+<span class="sourceLineNo">3288</span>    if (cpHost != null) {<a name="line.3288"></a>
+<span class="sourceLineNo">3289</span>      cpHost.preGetTableNames(htds, regex);<a name="line.3289"></a>
+<span class="sourceLineNo">3290</span>    }<a name="line.3290"></a>
+<span class="sourceLineNo">3291</span>    htds = getTableDescriptors(htds, namespace, regex, null, includeSysTables);<a name="line.3291"></a>
+<span class="sourceLineNo">3292</span>    if (cpHost != null) {<a name="line.3292"></a>
+<span class="sourceLineNo">3293</span>      cpHost.postGetTableNames(htds, regex);<a name="line.3293"></a>
+<span class="sourceLineNo">3294</span>    }<a name="line.3294"></a>
+<span class="sourceLineNo">3295</span>    List&lt;TableName&gt; result = new ArrayList&lt;&gt;(htds.size());<a name="line.3295"></a>
+<span class="sourceLineNo">3296</span>    for (TableDescriptor htd: htds) result.add(htd.getTableName());<a name="line.3296"></a>
+<span class="sourceLineNo">3297</span>    return result;<a name="line.3297"></a>
+<span class="sourceLineNo">3298</span>  }<a name="line.3298"></a>
+<span class="sourceLineNo">3299</span><a name="line.3299"></a>
+<span class="sourceLineNo">3300</span>  /**<a name="line.3300"></a>
+<span class="sourceLineNo">3301</span>   * @return list of table table descriptors after filtering by regex and whether to include system<a name="line.3301"></a>
+<span class="sourceLineNo">3302</span>   *    tables, etc.<a name="line.3302"></a>
+<span class="sourceLineNo">3303</span>   * @throws IOException<a name="line.3303"></a>
+<span class="sourceLineNo">3304</span>   */<a name="line.3304"></a>
+<span class="sourceLineNo">3305</span>  private List&lt;TableDescriptor&gt; getTableDescriptors(final List&lt;TableDescriptor&gt; htds,<a name="line.3305"></a>
+<span class="sourceLineNo">3306</span>      final String namespace, final String regex, final List&lt;TableName&gt; tableNameList,<a name="line.3306"></a>
+<span class="sourceLineNo">3307</span>      final boolean includeSysTables)<a name="line.3307"></a>
+<span class="sourceLineNo">3308</span>  throws IOException {<a name="line.3308"></a>
+<span class="sourceLineNo">3309</span>    if (tableNameList == null || tableNameList.isEmpty()) {<a name="line.3309"></a>
+<span class="sourceLineNo">3310</span>      // request for all TableDescriptors<a name="line.3310"></a>
+<span class="sourceLineNo">3311</span>      Collection&lt;TableDescriptor&gt; allHtds;<a name="line.3311"></a>
+<span class="sourceLineNo">3312</span>      if (namespace != null &amp;&amp; namespace.length() &gt; 0) {<a name="line.3312"></a>
+<span class="sourceLineNo">3313</span>        // Do a check on the namespace existence. Will fail if does not exist.<a name="line.3313"></a>
+<span class="sourceLineNo">3314</span>        this.clusterSchemaService.getNamespace(namespace);<a name="line.3314"></a>
+<span class="sourceLineNo">3315</span>        allHtds = tableDescriptors.getByNamespace(namespace).values();<a name="line.3315"></a>
+<span class="sourceLineNo">3316</span>      } else {<a name="line.3316"></a>
+<span class="sourceLineNo">3317</span>        allHtds = tableDescriptors.getAll().values();<a name="line.3317"></a>
+<span class="sourceLineNo">3318</span>      }<a name="line.3318"></a>
+<span class="sourceLineNo">3319</span>      for (TableDescriptor desc: allHtds) {<a name="line.3319"></a>
+<span class="sourceLineNo">3320</span>        if (tableStateManager.isTablePresent(desc.getTableName())<a name="line.3320"></a>
+<span class="sourceLineNo">3321</span>            &amp;&amp; (includeSysTables || !desc.getTableName().isSystemTable())) {<a name="line.3321"></a>
+<span class="sourceLineNo">3322</span>          htds.add(desc);<a name="line.3322"></a>
+<span class="sourceLineNo">3323</span>        }<a name="line.3323"></a>
+<span class="sourceLineNo">3324</span>      }<a name="line.3324"></a>
+<span class="sourceLineNo">3325</span>    } else {<a name="line.3325"></a>
+<span class="sourceLineNo">3326</span>      for (TableName s: tableNameList) {<a name="line.3326"></a>
+<span class="sourceLineNo">3327</span>        if (tableStateManager.isTablePresent(s)) {<a name="line.3327"></a>
+<span class="sourceLineNo">3328</span>          TableDescriptor desc = tableDescriptors.get(s);<a name="line.3328"></a>
+<span class="sourceLineNo">3329</span>          if (desc != null) {<a name="line.3329"></a>
+<span class="sourceLineNo">3330</span>            htds.add(desc);<a name="line.3330"></a>
+<span class="sourceLineNo">3331</span>          }<a name="line.3331"></a>
+<span class="sourceLineNo">3332</span>        }<a name="line.3332"></a>
+<span class="sourceLineNo">3333</span>      }<a name="line.3333"></a>
+<span class="sourceLineNo">3334</span>    }<a name="line.3334"></a>
+<span class="sourceLineNo">3335</span><a name="line.3335"></a>
+<span class="sourceLineNo">3336</span>    // Retains only those matched by regular expression.<a name="line.3336"></a>
+<span class="sourceLineNo">3337</span>    if (regex != null) filterTablesByRegex(htds, Pattern.compile(regex));<a name="line.3337"></a>
+<span class="sourceLineNo">3338</span>    return htds;<a name="line.3338"></a>
+<span class="sourceLineNo">3339</span>  }<a name="line.3339"></a>
 <span class="sourceLineNo">3340</span><a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>    // Retains only those matched by regular expression.<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>    if (regex != null) filterTablesByRegex(htds, Pattern.compile(regex));<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>    return htds;<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span>  }<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span><a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>  /**<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>   * Removes the table descriptors that don't match the pattern.<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>   * @param descriptors list of table descriptors to filter<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>   * @param pattern the regex to use<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span>   */<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span>  private static void filterTablesByRegex(final Collection&lt;TableDescriptor&gt; descriptors,<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span>      final Pattern pattern) {<a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>    final String defaultNS = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR;<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>    Iterator&lt;TableDescriptor&gt; itr = descriptors.iterator();<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span>    while (itr.hasNext()) {<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span>      TableDescriptor htd = itr.next();<a name="line.3356"></a>
-<span class="sourceLineNo">3357</span>      String tableName = htd.getTableName().getNameAsString();<a name="line.3357"></a>
-<span class="sourceLineNo">3358</span>      boolean matched = pattern.matcher(tableName).matches();<a name="line.3358"></a>
-<span class="sourceLineNo">3359</span>      if (!matched &amp;&amp; htd.getTableName().getNamespaceAsString().equals(defaultNS)) {<a name="line.3359"></a>
-<span class="sourceLineNo">3360</span>        matched = pattern.matcher(defaultNS + TableName.NAMESPACE_DELIM + tableName).matches();<a name="line.3360"></a>
-<span class="sourceLineNo">3361</span>      }<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>      if (!matched) {<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>        itr.remove();<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span>      }<a name="line.3364"></a>
-<span class="sourceLineNo">3365</span>    }<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span>  }<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span><a name="line.3367"></a>
-<span class="sourceLineNo">3368</span>  @Override<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span>  public long getLastMajorCompactionTimestamp(TableName table) throws IOException {<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span>    return getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.3370"></a>
-<span class="sourceLineNo">3371</span>        .getLastMajorCompactionTimestamp(table);<a name="line.3371"></a>
-<span class="sourceLineNo">3372</span>  }<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span><a name="line.3373"></a>
-<span class="sourceLineNo">3374</span>  @Override<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span>  public long getLastMajorCompactionTimestampForRegion(byte[] regionName) throws IOException {<a name="line.3375"></a>
-<span class="sourceLineNo">3376</span>    return getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span>        .getLastMajorCompactionTimestamp(regionName);<a name="line.3377"></a>
-<span class="sourceLineNo">3378</span>  }<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span><a name="line.3379"></a>
-<span class="sourceLineNo">3380</span>  /**<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span>   * Gets the mob file compaction state for a specific table.<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span>   * Whether all the mob files are selected is known during the compaction execution, but<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span>   * the statistic is done just before compaction starts, it is hard to know the compaction<a name="line.3383"></a>
-<span class="sourceLineNo">3384</span>   * type at that time, so the rough statistics are chosen for the mob file compaction. Only two<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span>   * compaction states are available, CompactionState.MAJOR_AND_MINOR and CompactionState.NONE.<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span>   * @param tableName The current table name.<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span>   * @return If a given table is in mob file compaction now.<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span>   */<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span>  public CompactionState getMobCompactionState(TableName tableName) {<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span>    AtomicInteger compactionsCount = mobCompactionStates.get(tableName);<a name="line.3390"></a>
-<span class="sourceLineNo">3391</span>    if (compactionsCount != null &amp;&amp; compactionsCount.get() != 0) {<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span>      return CompactionState.MAJOR_AND_MINOR;<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span>    }<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span>    return CompactionState.NONE;<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span>  }<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span><a name="line.3396"></a>
-<span class="sourceLineNo">3397</span>  public void reportMobCompactionStart(TableName tableName) throws IOException {<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span>    IdLock.Entry lockEntry = null;<a name="line.3398"></a>
-<span class="sourceLineNo">3399</span>    try {<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span>      lockEntry = mobCompactionLock.getLockEntry(tableName.hashCode());<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span>      AtomicInteger compactionsCount = mobCompactionStates.get(tableName);<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span>      if (compactionsCount == null) {<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span>        compactionsCount = new AtomicInteger(0);<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span>        mobCompactionStates.put(tableName, compactionsCount);<a name="line.3404"></a>
+<span class="sourceLineNo">3341</span>  /**<a name="line.3341"></a>
+<span class="sourceLineNo">3342</span>   * Removes the table descriptors that don't match the pattern.<a name="line.3342"></a>
+<span class="sourceLineNo">3343</span>   * @param descriptors list of table descriptors to filter<a name="line.3343"></a>
+<span class="sourceLineNo">3344</span>   * @param pattern the regex to use<a name="line.3344"></a>
+<span class="sourceLineNo">3345</span>   */<a name="line.3345"></a>
+<span class="sourceLineNo">3346</span>  private static void filterTablesByRegex(final Collection&lt;TableDescriptor&gt; descriptors,<a name="line.3346"></a>
+<span class="sourceLineNo">3347</span>      final Pattern pattern) {<a name="line.3347"></a>
+<span class="sourceLineNo">3348</span>    final String defaultNS = NamespaceDescriptor.DEFAULT_NAMESPACE_NAME_STR;<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span>    Iterator&lt;TableDescriptor&gt; itr = descriptors.iterator();<a name="line.3349"></a>
+<span class="sourceLineNo">3350</span>    while (itr.hasNext()) {<a name="line.3350"></a>
+<span class="sourceLineNo">3351</span>      TableDescriptor htd = itr.next();<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span>      String tableName = htd.getTableName().getNameAsString();<a name="line.3352"></a>
+<span class="sourceLineNo">3353</span>      boolean matched = pattern.matcher(tableName).matches();<a name="line.3353"></a>
+<span class="sourceLineNo">3354</span>      if (!matched &amp;&amp; htd.getTableName().getNamespaceAsString().equals(defaultNS)) {<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span>        matched = pattern.matcher(defaultNS + TableName.NAMESPACE_DELIM + tableName).matches();<a name="line.3355"></a>
+<span class="sourceLineNo">3356</span>      }<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span>      if (!matched) {<a name="line.3357"></a>
+<span class="sourceLineNo">3358</span>        itr.remove();<a name="line.3358"></a>
+<span class="sourceLineNo">3359</span>      }<a name="line.3359"></a>
+<span class="sourceLineNo">3360</span>    }<a name="line.3360"></a>
+<span class="sourceLineNo">3361</span>  }<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span><a name="line.3362"></a>
+<span class="sourceLineNo">3363</span>  @Override<a name="line.3363"></a>
+<span class="sourceLineNo">3364</span>  public long getLastMajorCompactionTimestamp(TableName table) throws IOException {<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span>    return getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span>        .getLastMajorCompactionTimestamp(table);<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span>  }<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span><a name="line.3368"></a>
+<span class="sourceLineNo">3369</span>  @Override<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span>  public long getLastMajorCompactionTimestampForRegion(byte[] regionName) throws IOException {<a name="line.3370"></a>
+<span class="sourceLineNo">3371</span>    return getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.3371"></a>
+<span class="sourceLineNo">3372</span>        .getLastMajorCompactionTimestamp(regionName);<a name="line.3372"></a>
+<span class="sourceLineNo">3373</span>  }<a name="line.3373"></a>
+<span class="sourceLineNo">3374</span><a name="line.3374"></a>
+<span class="sourceLineNo">3375</span>  /**<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span>   * Gets the mob file compaction state for a specific table.<a name="line.3376"></a>
+<span class="sourceLineNo">3377</span>   * Whether all the mob files are selected is known during the compaction execution, but<a name="line.3377"></a>
+<span class="sourceLineNo">3378</span>   * the statistic is done just before compaction starts, it is hard to know the compaction<a name="line.3378"></a>
+<span class="sourceLineNo">3379</span>   * type at that time, so the rough statistics are chosen for the mob file compaction. Only two<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span>   * compaction states are available, CompactionState.MAJOR_AND_MINOR and CompactionState.NONE.<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span>   * @param tableName The current table name.<a name="line.3381"></a>
+<span class="sourceLineNo">3382</span>   * @return If a given table is in mob file compaction now.<a name="line.3382"></a>
+<span class="sourceLineNo">3383</span>   */<a name="line.3383"></a>
+<span class="sourceLineNo">3384</span>  public CompactionState getMobCompactionState(TableName tableName) {<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span>    AtomicInteger compactionsCount = mobCompactionStates.get(tableName);<a name="line.3385"></a>
+<span class="sourceLineNo">3386</span>    if (compactionsCount != null &amp;&amp; compactionsCount.get() != 0) {<a name="line.3386"></a>
+<span class="sourceLineNo">3387</span>      return CompactionState.MAJOR_AND_MINOR;<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span>    }<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span>    return CompactionState.NONE;<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span>  }<a name="line.3390"></a>
+<span class="sourceLineNo">3391</span><a name="line.3391"></a>
+<span class="sourceLineNo">3392</span>  public void reportMobCompactionStart(TableName tableName) throws IOException {<a name="line.3392"></a>
+<span class="sourceLineNo">3393</span>    IdLock.Entry lockEntry = null;<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span>    try {<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span>      lockEntry = mobCompactionLock.getLockEntry(tableName.hashCode());<a name="line.3395"></a>
+<span class="sourceLineNo">3396</span>      AtomicInteger compactionsCount = mobCompactionStates.get(tableName);<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span>      if (compactionsCount == null) {<a name="line.3397"></a>
+<span class="sourceLineNo">3398</span>        compactionsCount = new AtomicInteger(0);<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span>        mobCompactionStates.put(tableName, compactionsCount);<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span>      }<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span>      compactionsCount.incrementAndGet();<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span>    } finally {<a name="line.3402"></a>
+<span class="sourceLineNo">3403</span>      if (lockEntry != null) {<a name="line.3403"></a>
+<span class="sourceLineNo">3404</span>        mobCompactionLock.releaseLockEntry(lockEntry);<a name="line.3404"></a>
 <span class="sourceLineNo">3405</span>      }<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span>      compactionsCount.incrementAndGet();<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span>    } finally {<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span>      if (lockEntry != null) {<a name="line.3408"></a>
-<span class="sourceLineNo">3409</span>        mobCompactionLock.releaseLockEntry(lockEntry);<a name="line.3409"></a>
-<span class="sourceLineNo">3410</span>      }<a name="line.3410"></a>
-<span class="sourceLineNo">3411</span>    }<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span>  }<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span><a name="line.3413"></a>
-<span class="sourceLineNo">3414</span>  public void reportMobCompactionEnd(TableName tableName) throws IOException {<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span>    IdLock.Entry lockEntry = null;<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span>    try {<a name="line.3416"></a>
-<span class="sourceLineNo">3417</span>      lockEntry = mobCompactionLock.getLockEntry(tableName.hashCode());<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span>      AtomicInteger compactionsCount = mobCompactionStates.get(tableName);<a name="line.3418"></a>
-<span class="sourceLineNo">3419</span>      if (compactionsCount != null) {<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span>        int count = compactionsCount.decrementAndGet();<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span>        // remove the entry if the count is 0.<a name="line.3421"></a>
-<span class="sourceLineNo">3422</span>        if (count == 0) {<a name="line.3422"></a>
-<span class="sourceLineNo">3423</span>          mobCompactionStates.remove(tableName);<a name="line.3423"></a>
-<span class="sourceLineNo">3424</span>        }<a name="line.3424"></a>
-<span class="sourceLineNo">3425</span>      }<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span>    } finally {<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span>      if (lockEntry != null) {<a name="line.3427"></a>
-<span class="sourceLineNo">3428</span>        mobCompactionLock.releaseLockEntry(lockEntry);<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span>      }<a name="line.3429"></a>
-<span class="sourceLineNo">3430</span>    }<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span>  }<a name="line.3431"></a>
-<span class="sourceLineNo">3432</span><a name="line.3432"></a>
-<span class="sourceLineNo">3433</span>  /**<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span>   * Requests mob compaction.<a name="line.3434"></a>
-<span class="sourceLineNo">3435</span>   * @param tableName The table the compact.<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span>   * @param columns The compacted columns.<a name="line.3436"></a>
-<span class="sourceLineNo">3437</span>   * @param allFiles Whether add all mob files into the compaction.<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span>   */<a name="line.3438"></a>
-<span class="sourceLineNo">3439</span>  public void requestMobCompaction(TableName tableName,<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span>                                   List&lt;ColumnFamilyDescriptor&gt; columns, boolean allFiles) throws IOException {<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span>    mobCompactThread.requestMobCompaction(conf, fs, tableName, columns, allFiles);<a name="line.3441"></a>
-<span class="sourceLineNo">3442</span>  }<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span><a name="line.3443"></a>
-<span class="sourceLineNo">3444</span>  /**<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span>   * Queries the state of the {@link LoadBalancerTracker}. If the balancer is not initialized,<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span>   * false is returned.<a name="line.3446"></a>
-<span class="sourceLineNo">3447</span>   *<a name="line.3447"></a>
-<span class="sourceLineNo">3448</span>   * @return The state of the load balancer, or false if the load balancer isn't defined.<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span>   */<a name="line.3449"></a>
-<span class="sourceLineNo">3450</span>  public boolean isBalancerOn() {<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span>    return !isInMaintenanceMode()<a name="line.3451"></a>
-<span class="sourceLineNo">3452</span>        &amp;&amp; loadBalancerTracker != null<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span>        &amp;&amp; loadBalancerTracker.isBalancerOn();<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span>  }<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span><a name="line.3455"></a>
-<span class="sourceLineNo">3456</span>  /**<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span>   * Queries the state of the {@link RegionNormalizerTracker}. If it's not initialized,<a name="line.3457"></a>
-<span class="sourceLineNo">3458</span>   * false is returned.<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span>   */<a name="line.3459"></a>
-<span class="sourceLineNo">3460</span>  public boolean isNormalizerOn() {<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span>    return !isInMaintenanceMode()<a name="line.3461"></a>
-<span class="sourceLineNo">3462</span>        &amp;&amp; regionNormalizerTracker != null<a name="line.3462"></a>
-<span class="sourceLineNo">3463</span>        &amp;&amp; regionNormalizerTracker.isNormalizerOn();<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span>  }<a name="line.3464"></a>
-<span class="sourceLineNo">3465</span><a name="line.3465"></a>
-<span class="sourceLineNo">3466</span>  /**<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span>   * Queries the state of the {@link SplitOrMergeTracker}. If it is not initialized,<a name="line.3467"></a>
-<span class="sourceLineNo">3468</span>   * false is returned. If switchType is illegal, false will return.<a name="line.3468"></a>
-<span class="sourceLineNo">3469</span>   * @param switchType see {@link org.apache.hadoop.hbase.client.MasterSwitchType}<a name="line.3469"></a>
-<span class="sourceLineNo">3470</span>   * @return The state of the switch<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>   */<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>  @Override<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>  public boolean isSplitOrMergeEnabled(MasterSwitchType switchType) {<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>    return !isInMaintenanceMode()<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        &amp;&amp; splitOrMergeTracker != null<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>        &amp;&amp; splitOrMergeTracker.isSplitOrMergeEnabled(switchType);<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>  }<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span><a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  /**<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>   * Fetch the configured {@link LoadBalancer} class name. If none is set, a default is returned.<a name="line.3480"></a>
-<span class="sourceLineNo">3481</span>   *<a name="line.3481"></a>
-<span class="sourceLineNo">3482</span>   * @return The name of the {@link LoadBalancer} in use.<a name="line.3482"></a>
-<span class="sourceLineNo">3483</span>   */<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span>  public String getLoadBalancerClassName() {<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span>    return conf.get(HConstants.HBASE_MASTER_LOADBALANCER_CLASS, LoadBalancerFactory<a name="line.3485"></a>
-<span class="sourceLineNo">3486</span>        .getDefaultLoadBalancerClass().getName());<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span>  }<a name="line.3487"></a>
-<span class="sourceLineNo">3488</span><a name="line.3488"></a>
-<span class="sourceLineNo">3489</span>  /**<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span>   * @return RegionNormalizerTracker instance<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span>   */<a name="line.3491"></a>
-<span class="sourceLineNo">3492</span>  public RegionNormalizerTracker getRegionNormalizerTracker() {<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span>    return regionNormalizerTracker;<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span>  }<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span><a name="line.3495"></a>
-<span class="sourceLineNo">3496</span>  public SplitOrMergeTracker getSplitOrMergeTracker() {<a name="line.3496"></a>
-<span class="sourceLineNo">3497</span>    return splitOrMergeTracker;<a name="line.3497"></a>
+<span class="sourceLineNo">3406</span>    }<a name="line.3406"></a>
+<span class="sourceLineNo">3407</span>  }<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span><a name="line.3408"></a>
+<span class="sourceLineNo">3409</span>  public void reportMobCompactionEnd(TableName tableName) throws IOException {<a name="line.3409"></a>
+<span class="sourceLineNo">3410</span>    IdLock.Entry lockEntry = null;<a name="line.3410"></a>
+<span class="sourceLineNo">3411</span>    try {<a name="line.3411"></a>
+<span class="sourceLineNo">3412</span>      lockEntry = mobCompactionLock.getLockEntry(tableName.hashCode());<a name="line.3412"></a>
+<span class="sourceLineNo">3413</span>      AtomicInteger compactionsCount = mobCompactionStates.get(tableName);<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span>      if (compactionsCount != null) {<a name="line.3414"></a>
+<span class="sourceLineNo">3415</span>        int count = compactionsCount.decrementAndGet();<a name="line.3415"></a>
+<span class="sourceLineNo">3416</span>        // remove the entry if the count is 0.<a name="line.3416"></a>
+<span class="sourceLineNo">3417</span>        if (count == 0) {<a name="line.3417"></a>
+<span class="sourceLineNo">3418</span>          mobCompactionStates.remove(tableName);<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span>        }<a name="line.3419"></a>
+<span class="sourceLineNo">3420</span>      }<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span>    } finally {<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span>      if (lockEntry != null) {<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span>        mobCompactionLock.releaseLockEntry(lockEntry);<a name="line.3423"></a>
+<span class="sourceLineNo">3424</span>      }<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span>    }<a name="line.3425"></a>
+<span class="sourceLineNo">3426</span>  }<a name="line.3426"></a>
+<span class="sourceLineNo">3427</span><a name="line.3427"></a>
+<span class="sourceLineNo">3428</span>  /**<a name="line.3428"></a>
+<span class="sourceLineNo">3429</span>   * Requests mob compaction.<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span>   * @param tableName The table the compact.<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span>   * @param columns The compacted columns.<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span>   * @param allFiles Whether add all mob files into the compaction.<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span>   */<a name="line.3433"></a>
+<span class="sourceLineNo">3434</span>  public void requestMobCompaction(TableName tableName,<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span>                                   List&lt;ColumnFamilyDescriptor&gt; columns, boolean allFiles) throws IOException {<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span>    mobCompactThread.requestMobCompaction(conf, fs, tableName, columns, allFiles);<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span>  }<a name="line.3437"></a>
+<span class="sourceLineNo">3438</span><a name="line.3438"></a>
+<span class="sourceLineNo">3439</span>  /**<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span>   * Queries the state of the {@link LoadBalancerTracker}. If the balancer is not initialized,<a name="line.3440"></a>
+<span class="sourceLineNo">3441</span>   * false is returned.<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span>   *<a name="line.3442"></a>
+<span class="sourceLineNo">3443</span>   * @return The state of the load balancer, or false if the load balancer isn't defined.<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span>   */<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span>  public boolean isBalancerOn() {<a name="line.3445"></a>
+<span class="sourceLineNo">3446</span>    return !isInMaintenanceMode()<a name="line.3446"></a>
+<span class="sourceLineNo">3447</span>        &amp;&amp; loadBalancerTracker != null<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span>        &amp;&amp; loadBalancerTracker.isBalancerOn();<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span>  }<a name="line.3449"></a>
+<span class="sourceLineNo">3450</span><a name="line.3450"></a>
+<span class="sourceLineNo">3451</span>  /**<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span>   * Queries the state of the {@link RegionNormalizerTracker}. If it's not initialized,<a name="line.3452"></a>
+<span class="sourceLineNo">3453</span>   * false is returned.<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span>   */<a name="line.3454"></a>
+<span class="sourceLineNo">3455</span>  public boolean isNormalizerOn() {<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span>    return !isInMaintenanceMode()<a name="line.3456"></a>
+<span class="sourceLineNo">3457</span>        &amp;&amp; regionNormalizerTracker != null<a name="line.3457"></a>
+<span class="sourceLineNo">3458</span>        &amp;&amp; regionNormalizerTracker.isNormalizerOn();<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span>  }<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span><a name="line.3460"></a>
+<span class="sourceLineNo">3461</span>  /**<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span>   * Queries the state of the {@link SplitOrMergeTracker}. If it is not initialized,<a name="line.3462"></a>
+<span class="sourceLineNo">3463</span>   * false is returned. If switchType is illegal, false will return.<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span>   * @param switchType see {@link org.apache.hadoop.hbase.client.MasterSwitchType}<a name="line.3464"></a>
+<span class="sourceLineNo">3465</span>   * @return The state of the switch<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span>   */<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span>  @Override<a name="line.3467"></a>
+<span class="sourceLineNo">3468</span>  public boolean isSplitOrMergeEnabled(MasterSwitchType switchType) {<a name="line.3468"></a>
+<span class="sourceLineNo">3469</span>    return !isInMaintenanceMode()<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span>        &amp;&amp; splitOrMergeTracker != null<a name="line.3470"></a>
+<span class="sourceLineNo">3471</span>        &amp;&amp; splitOrMergeTracker.isSplitOrMergeEnabled(switchType);<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>  }<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span><a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>  /**<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>   * Fetch the configured {@link LoadBalancer} class name. If none is set, a default is returned.<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>   *<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>   * @return The name of the {@link LoadBalancer} in use.<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>   */<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>  public String getLoadBalancerClassName() {<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>    return conf.get(HConstants.HBASE_MASTER_LOADBALANCER_CLASS, LoadBalancerFactory<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>        .getDefaultLoadBalancerClass().getName());<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>  }<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span><a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>  /**<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>   * @return RegionNormalizerTracker instance<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>   */<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>  public RegionNormalizerTracker getRegionNormalizerTracker() {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>    return regionNormalizerTracker;<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>  }<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span><a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>  public SplitOrMergeTracker getSplitOrMergeTracker() {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>    return splitOrMergeTracker;<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>  }<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span><a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>  @Override<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>  public LoadBalancer getLoadBalancer() {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>    return balancer;<a name="line.3497"></a>
 <span class="sourceLineNo">3498</span>  }<a name="line.3498"></a>
 <span class="sourceLineNo">3499</span><a name="line.3499"></a>
 <span class="sourceLineNo">3500</span>  @Override<a name="line.3500"></a>
-<span class="sourceLineNo">3501</span>  public LoadBalancer getLoadBalancer() {<a name="line.3501"></a>
-<span class="sourceLineNo">3502</span>    return balancer;<a name="line.3502"></a>
+<span class="sourceLineNo">3501</span>  public FavoredNodesManager getFavoredNodesManager() {<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>    return favoredNodesManager;<a name="line.3502"></a>
 <span class="sourceLineNo">3503</span>  }<a name="line.3503"></a>
 <span class="sourceLineNo">3504</span><a name="line.3504"></a>
-<span class="sourceLineNo">3505</span>  @Override<a name="line.3505"></a>
-<span class="sourceLineNo">3506</span>  public FavoredNodesManager getFavoredNodesManager() {<a name="line.3506"></a>
-<span class="sourceLineNo">3507</span>    return favoredNodesManager;<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span>  }<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span><a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>  private long executePeerProcedure(AbstractPeerProcedure&lt;?&gt; procedure) throws IOException {<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span>    long procId = procedureExecutor.submitProcedure(procedure);<a name="line.3511"></a>
-<span class="sourceLineNo">3512</span>    procedure.getLatch().await();<a name="line.3512"></a>
-<span class="sourceLineNo">3513</span>    return procId;<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span>  }<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span><a name="line.3515"></a>
-<span class="sourceLineNo">3516</span>  @Override<a name="line.3516"></a>
-<span class="sourceLineNo">3517</span>  public long addReplicationPeer(String peerId, ReplicationPeerConfig peerConfig, boolean enabled)<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span>      throws ReplicationException, IOException {<a name="line.3518"></a>
-<span class="sourceLineNo">3519</span>    LOG.info(getClientIdAuditPrefix() + " creating replication peer, id=" + peerId + ", config=" +<a name="line.3519"></a>
-<span class="sourceLineNo">3520</span>      peerConfig + ", state=" + (enabled ? "ENABLED" : "DISABLED"));<a name="line.3520"></a>
-<span class="sourceLineNo">3521</span>    return executePeerProcedure(new AddPeerProcedure(peerId, peerConfig, enabled));<a name="line.3521"></a>
-<span class="sourceLineNo">3522</span>  }<a name="line.3522"></a>
-<span class="sourceLineNo">3523</span><a name="line.3523"></a>
-<span class="sourceLineNo">3524</span>  @Override<a name="line.3524"></a>
-<span class="sourceLineNo">3525</span>  public long removeReplicationPeer(String peerId) throws ReplicationException, IOException {<a name="line.3525"></a>
-<span class="sourceLineNo">3526</span>    LOG.info(getClientIdAuditPrefix() + " removing replication peer, id=" + peerId);<a name="line.3526"></a>
-<span class="sourceLineNo">3527</span>    return executePeerProcedure(new RemovePeerProcedure(peerId));<a name="line.3527"></a>
-<span class="sourceLineNo">3528</span>  }<a name="line.3528"></a>
-<span class="sourceLineNo">3529</span><a name="line.3529"></a>
-<span class="sourceLineNo">3530</span>  @Override<a name="line.3530"></a>
-<span class="sourceLineNo">3531</span>  public long enableReplicationPeer(String peerId) throws ReplicationException, IOException {<a name="line.3531"></a>
-<span class="sourceLineNo">3532</span>    LOG.info(getClientIdAuditPrefix() + " enable replication peer, id=" + peerId);<a name="line.3532"></a>
-<span class="sourceLineNo">3533</span>    return executePeerProcedure(new EnablePeerProcedure(peerId));<a name="line.3533"></a>
-<span class="sourceLineNo">3534</span>  }<a name="line.3534"></a>
-<span class="sourceLineNo">3535</span><a name="line.3535"></a>
-<span class="sourceLineNo">3536</span>  @Override<a name="line.3536"></a>
-<span class="sourceLineNo">3537</span>  public long disableReplicationPeer(String peerId) throws ReplicationException, IOException {<a name="line.3537"></a>
-<span class="sourceLineNo">3538</span>    LOG.info(getClientIdAuditPrefix() + " disable replication peer, id=" + peerId);<a name="line.3538"></a>
-<span class="sourceLineNo">3539</span>    return executePeerProcedure(new DisablePeerProcedure(peerId));<a name="line.3539"></a>
-<span class="sourceLineNo">3540</span>  }<a name="line.3540"></a>
-<span class="sourceLineNo">3541</span><a name="line.3541"></a>
-<span class="sourceLineNo">3542</span>  @Override<a name="line.3542"></a>
-<span class="sourceLineNo">3543</span>  public ReplicationPeerConfig getReplicationPeerConfig(String peerId)<a name="line.3543"></a>
-<span class="sourceLineNo">3544</span>      throws ReplicationException, IOException {<a name="line.3544"></a>
-<span class="sourceLineNo">3545</span>    if (cpHost != null) {<a name="line.3545"></a>
-<span class="sourceLineNo">3546</span>      cpHost.preGetReplicationPeerConfig(peerId);<a name="line.3546"></a>
-<span class="sourceLineNo">3547</span>    }<a name="line.3547"></a>
-<span class="sourceLineNo">3548</span>    LOG.info(getClientIdAuditPrefix() + " get replication peer config, id=" + peerId);<a name="line.3548"></a>
-<span class="sourceLineNo">3549</span>    ReplicationPeerConfig peerConfig = this.replicationPeerManager.getPeerConfig(peerId)<a name="line.3549"></a>
-<span class="sourceLineNo">3550</span>        .orElseThrow(() -&gt; new ReplicationPeerNotFoundException(peerId));<a name="line.3550"></a>
-<span class="sourceLineNo">3551</span>    if (cpHost != null) {<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>      cpHost.postGetReplicationPeerConfig(peerId);<a name="line.3552"></a>
-<span class="sourceLineNo">3553</span>    }<a name="line.3553"></a>
-<span class="sourceLineNo">3554</span>    return peerConfig;<a name="line.3554"></a>
-<span class="sourceLineNo">3555</span>  }<a name="line.3555"></a>
-<span class="sourceLineNo">3556</span><a name="line.3556"></a>
-<span class="sourceLineNo">3557</span>  @Override<a name="line.3557"></a>
-<span class="sourceLineNo">3558</span>  public long updateReplicationPeerConfig(String peerId, ReplicationPeerConfig peerConfig)<a name="line.3558"></a>
-<span class="sourceLineNo">3559</span>      throws ReplicationException, IOException {<a name="line.3559"></a>
-<span class="sourceLineNo">3560</span>    LOG.info(getClientIdAuditPrefix() + " update replication peer config, id=" + peerId +<a name="line.3560"></a>
-<span class="sourceLineNo">3561</span>      ", config=" + peerConfig);<a name="line.3561"></a>
-<span class="sourceLineNo">3562</span>    return executePeerProcedure(new UpdatePeerConfigProcedure(peerId, peerConfig));<a name="line.3562"></a>
-<span class="sourceLineNo">3563</span>  }<a name="line.3563"></a>
-<span class="sourceLineNo">3564</span><a name="line.3564"></a>
-<span class="sourceLineNo">3565</span>  @Override<a name="line.3565"></a>
-<span class="sourceLineNo">3566</span>  public List&lt;ReplicationPeerDescription&gt; listReplicationPeers(String regex)<a name="line.3566"></a>
-<span class="sourceLineNo">3567</span>      throws ReplicationException, IOException {<a name="line.3567"></a>
-<span class="sourceLineNo">3568</span>    if (cpHost != null) {<a name="line.3568"></a>
-<span class="sourceLineNo">3569</span>      cpHost.preListReplicationPeers(regex);<a name="line.3569"></a>
-<span class="sourceLineNo">3570</span>    }<a name="line.3570"></a>
-<span class="sourceLineNo">3571</span>    LOG.info(getClientIdAuditPrefix() + " list replication peers, regex=" + regex);<a name="line.3571"></a>
-<span class="sourceLineNo">3572</span>    Pattern pattern = regex == null ? null : Pattern.compile(regex);<a name="line.3572"></a>
-<span class="sourceLineNo">3573</span>    List&lt;ReplicationPeerDescription&gt; peers =<a name="line.3573"></a>
-<span class="sourceLineNo">3574</span>      this.replicationPeerManager.listPeers(pattern);<a name="line.3574"></a>
-<span class="sourceLineNo">3575</span>    if (cpHost != null) {<a name="line.3575"></a>
-<span class="sourceLineNo">3576</span>      cpHost.postListReplicationPeers(regex);<a name="line.3576"></a>
-<span class="sourceLineNo">3577</span>    }<a name="line.3577"></a>
-<span class="sourceLineNo">3578</span>    return peers;<a name="line.3578"></a>
-<span class="sourceLineNo">3579</span>  }<a name="line.3579"></a>
-<span class="sourceLineNo">3580</span><a name="line.3580"></a>
-<span class="sourceLineNo">3581</span>  @Override<a name="line.3581"></a>
-<span class="sourceLineNo">3582</span>  public long transitReplicationPeerSyncReplicationState(String peerId, SyncReplicationState state)<a name="line.3582"></a>
-<span class="sourceLineNo">3583</span>    throws ReplicationException, IOException {<a name="line.3583"></a>
-<span class="sourceLineNo">3584</span>    LOG.info(<a name="line.3584"></a>
-<span class="sourceLineNo">3585</span>      getClientIdAuditPrefix() +<a name="line.3585"></a>
-<span class="sourceLineNo">3586</span>        " transit current cluster state to {} in a synchronous replication peer id={}",<a name="line.3586"></a>
-<span class="sourceLineNo">3587</span>      state, peerId);<a name="line.3587"></a>
-<span class="sourceLineNo">3588</span>    return executePeerProcedure(new TransitPeerSyncReplicationStateProcedure(peerId, state));<a name="line.3588"></a>
-<span class="sourceLineNo">3589</span>  }<a name="line.3589"></a>
-<span class="sourceLineNo">3590</span><a name="line.3590"></a>
-<span class="sourceLineNo">3591</span>  /**<a name="line.3591"></a>
-<span class="sourceLineNo">3592</span>   * Mark region server(s) as decommissioned (previously called 'draining') to prevent additional<a name="line.3592"></a>
-<span class="sourceLineNo">3593</span>   * regions from getting assigned to them. Also unload the regions on the servers asynchronously.0<a name="line.3593"></a>
-<span class="sourceLineNo">3594</span>   * @param servers Region servers to decommission.<a name="line.3594"></a>
-<span class="sourceLineNo">3595</span>   */<a name="line.3595"></a>
-<span class="sourceLineNo">3596</span>  public void decommissionRegionServers(final List&lt;ServerName&gt; servers, final boolean offload)<a name="line.3596"></a>
-<span class="sourceLineNo">3597</span>      throws HBaseIOException {<a name="line.3597"></a>
-<span class="sourceLineNo">3598</span>    List&lt;ServerName&gt; serversAdded = new ArrayList&lt;&gt;(servers.size());<a name="line.3598"></a>
-<span class="sourceLineNo">3599</span>    // Place the decommission marker first.<a name="line.3599"></a>
-<span class="sourceLineNo">3600</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3600"></a>
-<span class="sourceLineNo">3601</span>    for (ServerName server : servers) {<a name="line.3601"></a>
-<span class="sourceLineNo">3602</span>      try {<a name="line.3602"></a>
-<span class="sourceLineNo">3603</span>        String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3603"></a>
-<span class="sourceLineNo">3604</span>        ZKUtil.createAndFailSilent(getZooKeeper(), node);<a name="line.3604"></a>
-<span class="sourceLineNo">3605</span>      } catch (KeeperException ke) {<a name="line.3605"></a>
-<span class="sourceLineNo">3606</span>        throw new HBaseIOException(<a name="line.3606"></a>
-<span class="sourceLineNo">3607</span>          this.zooKeeper.prefix("Unable to decommission '" + server.getServerName() + "'."), ke);<a name="line.3607"></a>
-<span class="sourceLineNo">3608</span>      }<a name="line.3608"></a>
-<span class="sourceLineNo">3609</span>      if (this.serverManager.addServerToDrainList(server)) {<a name="line.3609"></a>
-<span class="sourceLineNo">3610</span>        serversAdded.add(server);<a name="line.3610"></a>
-<span class="sourceLineNo">3611</span>      }<a name="line.3611"></a>
-<span class="sourceLineNo">3612</span>    }<a name="line.3612"></a>
-<span class="sourceLineNo">3613</span>    // Move the regions off the decommissioned servers.<a name="line.3613"></a>
-<span class="sourceLineNo">3614</span>    if (offload) {<a name="line.3614"></a>
-<span class="sourceLineNo">3615</span>      final List&lt;ServerName&gt; destServers = this.serverManager.createDestinationServersList();<a name="line.3615"></a>
-<span class="sourceLineNo">3616</span>      for (ServerName server : serversAdded) {<a name="line.3616"></a>
-<span class="sourceLineNo">3617</span>        final List&lt;RegionInfo&gt; regionsOnServer = this.assignmentManager.getRegionsOnServer(server);<a name="line.3617"></a>
-<span class="sourceLineNo">3618</span>        for (RegionInfo hri : regionsOnServer) {<a name="line.3618"></a>
-<span class="sourceLineNo">3619</span>          ServerName dest = balancer.randomAssignment(hri, destServers);<a name="line.3619"></a>
-<span class="sourceLineNo">3620</span>          if (dest == null) {<a name="line.3620"></a>
-<span class="sourceLineNo">3621</span>            throw new HBaseIOException("Unable to determine a plan to move " + hri);<a name="line.3621"></a>
-<span class="sourceLineNo">3622</span>          }<a name="line.3622"></a>
-<span class="sourceLineNo">3623</span>          RegionPlan rp = new RegionPlan(hri, server, dest);<a name="line.3623"></a>
-<span class="sourceLineNo">3624</span>          this.assignmentManager.moveAsync(rp);<a name="line.3624"></a>
-<span class="sourceLineNo">3625</span>        }<a name="line.3625"></a>
-<span class="sourceLineNo">3626</span>      }<a name="line.3626"></a>
-<span class="sourceLineNo">3627</span>    }<a name="line.3627"></a>
-<span class="sourceLineNo">3628</span>  }<a name="line.3628"></a>
-<span class="sourceLineNo">3629</span><a name="line.3629"></a>
-<span class="sourceLineNo">3630</span>  /**<a name="line.3630"></a>
-<span class="sourceLineNo">3631</span>   * List region servers marked as decommissioned (previously called 'draining') to not get regions<a name="line.3631"></a>
-<span class="sourceLineNo">3632</span>   * assigned to them.<a name="line.3632"></a>
-<span class="sourceLineNo">3633</span>   * @return List of decommissioned servers.<a name="line.3633"></a>
-<span class="sourceLineNo">3634</span>   */<a name="line.3634"></a>
-<span class="sourceLineNo">3635</span>  public List&lt;ServerName&gt; listDecommissionedRegionServers() {<a name="line.3635"></a>
-<span class="sourceLineNo">3636</span>    return this.serverManager.getDrainingServersList();<a name="line.3636"></a>
-<span class="sourceLineNo">3637</span>  }<a name="line.3637"></a>
-<span class="sourceLineNo">3638</span><a name="line.3638"></a>
-<span class="sourceLineNo">3639</span>  /**<a name="line.3639"></a>
-<span class="sourceLineNo">3640</span>   * Remove decommission marker (previously called 'draining') from a region server to allow regions<a name="line.3640"></a>
-<span class="sourceLineNo">3641</span>   * assignments. Load regions onto the server asynchronously if a list of regions is given<a name="line.3641"></a>
-<span class="sourceLineNo">3642</span>   * @param server Region server to remove decommission marker from.<a name="line.3642"></a>
-<span class="sourceLineNo">3643</span>   */<a name="line.3643"></a>
-<span class="sourceLineNo">3644</span>  public void recommissionRegionServer(final ServerName server,<a name="line.3644"></a>
-<span class="sourceLineNo">3645</span>      final List&lt;byte[]&gt; encodedRegionNames) throws IOException {<a name="line.3645"></a>
-<span class="sourceLineNo">3646</span>    // Remove the server from decommissioned (draining) server list.<a name="line.3646"></a>
-<span class="sourceLineNo">3647</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3647"></a>
-<span class="sourceLineNo">3648</span>    String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3648"></a>
-<span class="sourceLineNo">3649</span>    try {<a name="line.3649"></a>
-<span class="sourceLineNo">3650</span>      ZKUtil.deleteNodeFailSilent(getZooKeeper(), node);<a name="line.3650"></a>
-<span class="sourceLineNo">3651</span>    } catch (KeeperException ke) {<a name="line.3651"></a>
-<span class="sourceLineNo">3652</span>      throw new HBaseIOException(<a name="line.3652"></a>
-<span class="sourceLineNo">3653</span>        this.zooKeeper.prefix("Unable to recommission '" + server.getServerName() + "'."), ke);<a name="line.3653"></a>
-<span class="sourceLineNo">3654</span>    }<a name="line.3654"></a>
-<span class="sourceLineNo">3655</span>    this.serverManager.removeServerFromDrainList(server);<a name="line.3655"></a>
-<span class="sourceLineNo">3656</span><a name="line.3656"></a>
-<span class="sourceLineNo">3657</span>    // Load the regions onto the server if we are given a list of regions.<a name="line.3657"></a>
-<span class="sourceLineNo">3658</span>    if (encodedRegionNames == null || encodedRegionNames.isEmpty()) {<a name="line.3658"></a>
-<span class="sourceLineNo">3659</span>      return;<a name="line.3659"></a>
-<span class="sourceLineNo">3660</span>    }<a name="line.3660"></a>
-<span class="sourceLineNo">3661</span>    if (!this.serverManager.isServerOnline(server)) {<a name="line.3661"></a>
-<span class="sourceLineNo">3662</span>      return;<a name="line.3662"></a>
-<span class="sourceLineNo">3663</span>    }<a name="line.3663"></a>
-<span class="sourceLineNo">3664</span>    for (byte[] encodedRegionName : encodedRegionNames) {<a name="line.3664"></a>
-<span class="sourceLineNo">3665</span>      RegionState regionState =<a name="line.3665"></a>
-<span class="sourceLineNo">3666</span>        assignmentManager.getRegionStates().getRegionState(Bytes.toString(encodedRegionName));<a name="line.3666"></a>
-<span class="sourceLineNo">3667</span>      if (regionState == null) {<a name="line.3667"></a>
-<span class="sourceLineNo">3668</span>        LOG.warn("Unknown region " + Bytes.toStringBinary(encodedRegionName));<a name="line.3668"></a>
-<span class="sourceLineNo">3669</span>        continue;<a name="line.3669"></a>
-<span class="sourceLineNo">3670</span>      }<a name="line.3670"></a>
-<span class="sourceLineNo">3671</span>      RegionInfo hri = regionState.getRegion();<a name="line.3671"></a>
-<span class="sourceLineNo">3672</span>      if (server.equals(regionState.getServerName())) {<a name="line.3672"></a>
-<span class="sourceLineNo">3673</span>        LOG.info("Skipping move of region " + hri.getRegionNameAsString() +<a name="line.3673"></a>
-<span class="sourceLineNo">3674</span>          " because region already assigned to the same server " + server + ".");<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>        continue;<a name="line.3675"></a>
-<span class="sourceLineNo">3676</span>      }<a name="line.3676"></a>
-<span class="sourceLineNo">3677</span>      RegionPlan rp = new RegionPlan(hri, regionState.getServerName(), server);<a name="line.3677"></a>
-<span class="sourceLineNo">3678</span>      this.assignmentManager.moveAsync(rp);<a name="line.3678"></a>
-<span class="sourceLineNo">3679</span>    }<a name="line.3679"></a>
+<span class="sourceLineNo">3505</span>  private long executePeerProcedure(AbstractPeerProcedure&lt;?&gt; procedure) throws IOException {<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>    long procId = procedureExecutor.submitProcedure(procedure);<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>    procedure.getLatch().await();<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>    return procId;<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>  }<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span><a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>  @Override<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>  public long addReplicationPeer(String peerId, ReplicationPeerConfig peerConfig, boolean enabled)<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>      throws ReplicationException, IOException {<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>    LOG.info(getClientIdAuditPrefix() + " creating replication peer, id=" + peerId + ", config=" +<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>      peerConfig + ", state=" + (enabled ? "ENABLED" : "DISABLED"));<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>    return executePeerProcedure(new AddPeerProcedure(peerId, peerConfig, enabled));<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>  }<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span><a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>  @Override<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>  public long removeReplicationPeer(String peerId) throws ReplicationException, IOException {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>    LOG.info(getClientIdAuditPrefix() + " removing replication peer, id=" + peerId);<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>    return executePeerProcedure(new RemovePeerProcedure(peerId));<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>  }<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span><a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>  @Override<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>  public long enableReplicationPeer(String peerId) throws ReplicationException, IOException {<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>    LOG.info(getClientIdAuditPrefix() + " enable replication peer, id=" + peerId);<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>    return executePeerProcedure(new EnablePeerProcedure(peerId));<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>  }<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span><a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>  @Override<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  public long disableReplicationPeer(String peerId) throws ReplicationException, IOException {<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span>    LOG.info(getClientIdAuditPrefix() + " disable replication peer, id=" + peerId);<a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>    return executePeerProcedure(new DisablePeerProcedure(peerId));<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>  }<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span><a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>  @Override<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>  public ReplicationPeerConfig getReplicationPeerConfig(String peerId)<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>      throws ReplicationException, IOException {<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>    if (cpHost != null) {<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>      cpHost.preGetReplicationPeerConfig(peerId);<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>    }<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>    LOG.info(getClientIdAuditPrefix() + " get replication peer config, id=" + peerId);<a name="line.3543"></a>
+<span class="sourceLineNo">3544</span>    ReplicationPeerConfig peerConfig = this.replicationPeerManager.getPeerConfig(peerId)<a name="line.3544"></a>
+<span class="sourceLineNo">3545</span>        .orElseThrow(() -&gt; new ReplicationPeerNotFoundException(peerId));<a name="line.3545"></a>
+<span class="sourceLineNo">3546</span>    if (cpHost != null) {<a name="line.3546"></a>
+<span class="sourceLineNo">3547</span>      cpHost.postGetReplicationPeerConfig(peerId);<a name="line.3547"></a>
+<span class="sourceLineNo">3548</span>    }<a name="line.3548"></a>
+<span class="sourceLineNo">3549</span>    return peerConfig;<a name="line.3549"></a>
+<span class="sourceLineNo">3550</span>  }<a name="line.3550"></a>
+<span class="sourceLineNo">3551</span><a name="line.3551"></a>
+<span class="sourceLineNo">3552</span>  @Override<a name="line.3552"></a>
+<span class="sourceLineNo">3553</span>  public long updateReplicationPeerConfig(String peerId, ReplicationPeerConfig peerConfig)<a name="line.3553"></a>
+<span class="sourceLineNo">3554</span>      throws ReplicationException, IOException {<a name="line.3554"></a>
+<span class="sourceLineNo">3555</span>    LOG.info(getClientIdAuditPrefix() + " update replication peer config, id=" + peerId +<a name="line.3555"></a>
+<span class="sourceLineNo">3556</span>      ", config=" + peerConfig);<a name="line.3556"></a>
+<span class="sourceLineNo">3557</span>    return executePeerProcedure(new UpdatePeerConfigProcedure(peerId, peerConfig));<a name="line.3557"></a>
+<span class="sourceLineNo">3558</span>  }<a name="line.3558"></a>
+<span class="sourceLineNo">3559</span><a name="line.3559"></a>
+<span class="sourceLineNo">3560</span>  @Override<a name="line.3560"></a>
+<span class="sourceLineNo">3561</span>  public List&lt;ReplicationPeerDescription&gt; listReplicationPeers(String regex)<a name="line.3561"></a>
+<span class="sourceLineNo">3562</span>      throws ReplicationException, IOException {<a name="line.3562"></a>
+<span class="sourceLineNo">3563</span>    if (cpHost != null) {<a name="line.3563"></a>
+<span class="sourceLineNo">3564</span>      cpHost.preListReplicationPeers(regex);<a name="line.3564"></a>
+<span class="sourceLineNo">3565</span>    }<a name="line.3565"></a>
+<span class="sourceLineNo">3566</span>    LOG.info(getClientIdAuditPrefix() + " list replication peers, regex=" + regex);<a name="line.3566"></a>
+<span class="sourceLineNo">3567</span>    Pattern pattern = regex == null ? null : Pattern.compile(regex);<a name="line.3567"></a>
+<span class="sourceLineNo">3568</span>    List&lt;ReplicationPeerDescription&gt; peers =<a name="line.3568"></a>
+<span class="sourceLineNo">3569</span>      this.replicationPeerManager.listPeers(pattern);<a name="line.3569"></a>
+<span class="sourceLineNo">3570</span>    if (cpHost != null) {<a name="line.3570"></a>
+<span class="sourceLineNo">3571</span>      cpHost.postListReplicationPeers(regex);<a name="line.3571"></a>
+<span class="sourceLineNo">3572</span>    }<a name="line.3572"></a>
+<span class="sourceLineNo">3573</span>    return peers;<a name="line.3573"></a>
+<span class="sourceLineNo">3574</span>  }<a name="line.3574"></a>
+<span class="sourceLineNo">3575</span><a name="line.3575"></a>
+<span class="sourceLineNo">3576</span>  @Override<a name="line.3576"></a>
+<span class="sourceLineNo">3577</span>  public long transitReplicationPeerSyncReplicationState(String peerId, SyncReplicationState state)<a name="line.3577"></a>
+<span class="sourceLineNo">3578</span>    throws ReplicationException, IOException {<a name="line.3578"></a>
+<span class="sourceLineNo">3579</span>    LOG.info(<a name="line.3579"></a>
+<span class="sourceLineNo">3580</span>      getClientIdAuditPrefix() +<a name="line.3580"></a>
+<span class="sourceLineNo">3581</span>        " transit current cluster state to {} in a synchronous replication peer id={}",<a name="line.3581"></a>
+<span class="sourceLineNo">3582</span>      state, peerId);<a name="line.3582"></a>
+<span class="sourceLineNo">3583</span>    return executePeerProcedure(new TransitPeerSyncReplicationStateProcedure(peerId, state));<a name="line.3583"></a>
+<span class="sourceLineNo">3584</span>  }<a name="line.3584"></a>
+<span class="sourceLineNo">3585</span><a name="line.3585"></a>
+<span class="sourceLineNo">3586</span>  /**<a name="line.3586"></a>
+<span class="sourceLineNo">3587</span>   * Mark region server(s) as decommissioned (previously called 'draining') to prevent additional<a name="line.3587"></a>
+<span class="sourceLineNo">3588</span>   * regions from getting assigned to them. Also unload the regions on the servers asynchronously.0<a name="line.3588"></a>
+<span class="sourceLineNo">3589</span>   * @param servers Region servers to decommission.<a name="line.3589"></a>
+<span class="sourceLineNo">3590</span>   */<a name="line.3590"></a>
+<span class="sourceLineNo">3591</span>  public void decommissionRegionServers(final List&lt;ServerName&gt; servers, final boolean offload)<a name="line.3591"></a>
+<span class="sourceLineNo">3592</span>      throws HBaseIOException {<a name="line.3592"></a>
+<span class="sourceLineNo">3593</span>    List&lt;ServerName&gt; serversAdded = new ArrayList&lt;&gt;(servers.size());<a name="line.3593"></a>
+<span class="sourceLineNo">3594</span>    // Place the decommission marker first.<a name="line.3594"></a>
+<span class="sourceLineNo">3595</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3595"></a>
+<span class="sourceLineNo">3596</span>    for (ServerName server : servers) {<a name="line.3596"></a>
+<span class="sourceLineNo">3597</span>      try {<a name="line.3597"></a>
+<span class="sourceLineNo">3598</span>        String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3598"></a>
+<span class="sourceLineNo">3599</span>        ZKUtil.createAndFailSilent(getZooKeeper(), node);<a name="line.3599"></a>
+<span class="sourceLineNo">3600</span>      } catch (KeeperException ke) {<a name="line.3600"></a>
+<span class="sourceLineNo">3601</span>        throw new HBaseIOException(<a name="line.3601"></a>
+<span class="sourceLineNo">3602</span>          this.zooKeeper.prefix("Unable to decommission '" + server.getServerName() + "'."), ke);<a name="line.3602"></a>
+<span class="sourceLineNo">3603</span>      }<a name="line.3603"></a>
+<span class="sourceLineNo">3604</span>      if (this.serverManager.addServerToDrainList(server)) {<a name="line.3604"></a>
+<span class="sourceLineNo">3605</span>        serversAdded.add(server);<a name="line.3605"></a>
+<span class="sourceLineNo">3606</span>      }<a name="line.3606"></a>
+<span class="sourceLineNo">3607</span>    }<a name="line.3607"></a>
+<span class="sourceLineNo">3608</span>    // Move the regions off the decommissioned servers.<a name="line.3608"></a>
+<span class="sourceLineNo">3609</span>    if (offload) {<a name="line.3609"></a>
+<span class="sourceLineNo">3610</span>      final List&lt;ServerName&gt; destServers = this.serverManager.createDestinationServersList();<a name="line.3610"></a>
+<span class="sourceLineNo">3611</span>      for (ServerName server : serversAdded) {<a name="line.3611"></a>
+<span class="sourceLineNo">3612</span>        final List&lt;RegionInfo&gt; regionsOnServer = this.assignmentManager.getRegionsOnServer(server);<a name="line.3612"></a>
+<span class="sourceLineNo">3613</span>        for (RegionInfo hri : regionsOnServer) {<a name="line.3613"></a>
+<span class="sourceLineNo">3614</span>          ServerName dest = balancer.randomAssignment(hri, destServers);<a name="line.3614"></a>
+<span class="sourceLineNo">3615</span>          if (dest == null) {<a name="line.3615"></a>
+<span class="sourceLineNo">3616</span>            throw new HBaseIOException("Unable to determine a plan to move " + hri);<a name="line.3616"></a>
+<span class="sourceLineNo">3617</span>          }<a name="line.3617"></a>
+<span class="sourceLineNo">3618</span>          RegionPlan rp = new RegionPlan(hri, server, dest);<a name="line.3618"></a>
+<span class="sourceLineNo">3619</span>          this.assignmentManager.moveAsync(rp);<a name="line.3619"></a>
+<span class="sourceLineNo">3620</span>        }<a name="line.3620"></a>
+<span class="sourceLineNo">3621</span>      }<a name="line.3621"></a>
+<span class="sourceLineNo">3622</span>    }<a name="line.3622"></a>
+<span class="sourceLineNo">3623</span>  }<a name="line.3623"></a>
+<span class="sourceLineNo">3624</span><a name="line.3624"></a>
+<span class="sourceLineNo">3625</span>  /**<a name="line.3625"></a>
+<span class="sourceLineNo">3626</span>   * List region servers marked as decommissioned (previously called 'draining') to not get regions<a name="line.3626"></a>
+<span class="sourceLineNo">3627</span>   * assigned to them.<a name="line.3627"></a>
+<span class="sourceLineNo">3628</span>   * @return List of decommissioned servers.<a name="line.3628"></a>
+<span class="sourceLineNo">3629</span>   */<a name="line.3629"></a>
+<span class="sourceLineNo">3630</span>  public List&lt;ServerName&gt; listDecommissionedRegionServers() {<a name="line.3630"></a>
+<span class="sourceLineNo">3631</span>    return this.serverManager.getDrainingServersList();<a name="line.3631"></a>
+<span class="sourceLineNo">3632</span>  }<a name="line.3632"></a>
+<span class="sourceLineNo">3633</span><a name="line.3633"></a>
+<span class="sourceLineNo">3634</span>  /**<a name="line.3634"></a>
+<span class="sourceLineNo">3635</span>   * Remove decommission marker (previously called 'draining') from a region server to allow regions<a name="line.3635"></a>
+<span class="sourceLineNo">3636</span>   * assignments. Load regions onto the server asynchronously if a list of regions is given<a name="line.3636"></a>
+<span class="sourceLineNo">3637</span>   * @param server Region server to remove decommission marker from.<a name="line.3637"></a>
+<span class="sourceLineNo">3638</span>   */<a name="line.3638"></a>
+<span class="sourceLineNo">3639</span>  public void recommissionRegionServer(final ServerName server,<a name="line.3639"></a>
+<span class="sourceLineNo">3640</span>      final List&lt;byte[]&gt; encodedRegionNames) throws IOException {<a name="line.3640"></a>
+<span class="sourceLineNo">3641</span>    // Remove the server from decommissioned (draining) server list.<a name="line.3641"></a>
+<span class="sourceLineNo">3642</span>    String parentZnode = getZooKeeper().getZNodePaths().drainingZNode;<a name="line.3642"></a>
+<span class="sourceLineNo">3643</span>    String node = ZNodePaths.joinZNode(parentZnode, server.getServerName());<a name="line.3643"></a>
+<span class="sourceLineNo">3644</span>    try {<a name="line.3644"></a>
+<span class="sourceLineNo">3645</span>      ZKUtil.deleteNodeFailSilent(getZooKeeper(), node);<a name="line.3645"></a>
+<span class="sourceLineNo">3646</span>    } catch (KeeperException ke) {<a name="line.3646"></a>
+<span class="sourceLineNo">3647</span>      throw new HBaseIOException(<a name="line.3647"></a>
+<span class="sourceLineNo">3648</span>        this.zooKeeper.prefix("Unable to recommission '" + server.getServerName() + "'."), ke);<a name="line.3648"></a>
+<span class="sourceLineNo">3649</span>    }<a name="line.3649"></a>
+<span class="sourceLineNo">3650</span>    this.serverManager.removeServerFromDrainList(server);<a name="line.3650"></a>
+<span class="sourceLineNo">3651</span><a name="line.3651"></a>
+<span class="sourceLineNo">3652</span>    // Load the regions onto the server if we are given a list of regions.<a name="line.3652"></a>
+<span class="sourceLineNo">3653</span>    if (encodedRegionNames == null || encodedRegionNames.isEmpty()) {<a name="line.3653"></a>
+<span class="sourceLineNo">3654</span>      return;<a name="line.3654"></a>
+<span class="sourceLineNo">3655</span>    }<a name="line.3655"></a>
+<span class="sourceLineNo">3656</span>    if (!this.serverManager.isServerOnline(server)) {<a name="line.3656"></a>
+<span class="sourceLineNo">3657</span>      return;<a name="line.3657"></a>
+<span class="sourceLineNo">3658</span>    }<a name="line.3658"></a>
+<span class="sourceLineNo">3659</span>    for (byte[] encodedRegionName : encodedRegionNames) {<a name="line.3659"></a>
+<span class="sourceLineNo">3660</span>      RegionState regionState =<a name="line.3660"></a>
+<span class="sourceLineNo">3661</span>        assignmentManager.getRegionStates().getRegionState(Bytes.toString(encodedRegionName));<a name="line.3661"></a>
+<span class="sourceLineNo">3662</span>      if (regionState == null) {<a name="line.3662"></a>
+<span class="sourceLineNo">3663</span>        LOG.warn("Unknown region " + Bytes.toStringBinary(encodedRegionName));<a name="line.3663"></a>
+<span class="sourceLineNo">3664</span>        continue;<a name="line.3664"></a>
+<span class="sourceLineNo">3665</span>      }<a name="line.3665"></a>
+<span class="sourceLineNo">3666</span>      RegionInfo hri = regionState.getRegion();<a name="line.3666"></a>
+<span class="sourceLineNo">3667</span>      if (server.equals(regionState.getServerName())) {<a name="line.3667"></a>
+<span class="sourceLineNo">3668</span>        LOG.info("Skipping move of region " + hri.getRegionNameAsString() +<a name="line.3668"></a>
+<span class="sourceLineNo">3669</span>          " because region already assigned to the same server " + server + ".");<a name="line.3669"></a>
+<span class="sourceLineNo">3670</span>        continue;<a name="line.3670"></a>
+<span class="sourceLineNo">3671</span>      }<a name="line.3671"></a>
+<span class="sourceLineNo">3672</span>      RegionPlan rp = new RegionPlan(hri, regionState.getServerName(), server);<a name="line.3672"></a>
+<span class="sourceLineNo">3673</span>      this.assignmentManager.moveAsync(rp);<a name="line.3673"></a>
+<span class="sourceLineNo">3674</span>    }<a name="line.3674"></a>
+<span class="sourceLineNo">3675</span>  }<a name="line.3675"></a>
+<span class="sourceLineNo">3676</span><a name="line.3676"></a>
+<span class="sourceLineNo">3677</span>  @Override<a name="line.3677"></a>
+<span class="sourceLineNo">3678</span>  public LockManager getLockManager() {<a name="line.3678"></a>
+<span class="sourceLineNo">3679</span>    return lockManager;<a name="line.3679"></a>
 <span class="sourceLineNo">3680</span>  }<a name="line.3680"></a>
 <span class="sourceLineNo">3681</span><a name="line.3681"></a>
-<span class="sourceLineNo">3682</span>  @Override<a name="line.3682"></a>
-<span class="sourceLineNo">3683</span>  public LockManager getLockManager() {<a name="line.3683"></a>
-<span class="sourceLineNo">3684</span>    return lockManager;<a name="line.3684"></a>
-<span class="sourceLineNo">3685</span>  }<a name="line.3685"></a>
-<span class="sourceLineNo">3686</span><a name="line.3686"></a>
-<span class="sourceLineNo">3687</span>  public QuotaObserverChore getQuotaObserverChore() {<a name="line.3687"></a>
-<span class="sourceLineNo">3688</span>    return this.quotaObserverChore;<a name="line.3688"></a>
-<span class="sourceLineNo">3689</span>  }<a name="line.3689"></a>
-<span class="sourceLineNo">3690</span><a name="line.3690"></a>
-<span class="sourceLineNo">3691</span>  public SpaceQuotaSnapshotNotifier getSpaceQuotaSnapshotNotifier() {<a name="line.3691"></a>
-<span class="sourceLineNo">3692</span>    return this.spaceQuotaSnapshotNotifier;<a name="line.3692"></a>
-<span class="sourceLineNo">3693</span>  }<a name="line.3693"></a>
-<span class="sourceLineNo">3694</span><a name="line.3694"></a>
-<span class="sourceLineNo">3695</span>  @SuppressWarnings("unchecked")<a name="line.3695"></a>
-<span class="sourceLineNo">3696</span>  private RemoteProcedure&lt;MasterProcedureEnv, ?&gt; getRemoteProcedure(long procId) {<a name="line.3696"></a>
-<span class="sourceLineNo">3697</span>    Procedure&lt;?&gt; procedure = procedureExecutor.getProcedure(procId);<a name="line.3697"></a>
-<span class="sourceLineNo">3698</span>    if (procedure == null) {<a name="line.3698"></a>
-<span class="sourceLineNo">3699</span>      return null;<a name="line.3699"></a>
-<span class="sourceLineNo">3700</span>    }<a name="line.3700"></a>
-<span class="sourceLineNo">3701</span>    assert procedure instanceof RemoteProcedure;<a name="line.3701"></a>
-<span class="sourceLineNo">3702</span>    return (RemoteProcedure&lt;MasterProcedureEnv, ?&gt;) procedure;<a name="line.3702"></a>
-<span class="sourceLineNo">3703</span>  }<a name="line.3703"></a>
-<span class="sourceLineNo">3704</span><a name="line.3704"></a>
-<span class="sourceLineNo">3705</span>  public void remoteProcedureCompleted(long procId) {<a name="line.3705"></a>
-<span class="sourceLineNo">3706</span>    LOG.debug("Remote procedure done, pid={}", procId);<a name="line.3706"></a>
-<span class="sourceLineNo">3707</span>    RemoteProcedure&lt;MasterProcedureEnv, ?&gt; procedure = getRemoteProcedure(procId);<a name="line.3707"></a>
-<span class="sourceLineNo">3708</span>    if (procedure != null) {<a name="line.3708"></a>
-<span class="sourceLineNo">3709</span>      procedure.remoteOperationCompleted(procedureExecutor.getEnvironment());<a name="line.3709"></a>
-<span class="sourceLineNo">3710</span>    }<a name="line.3710"></a>
-<span class="sourceLineNo">3711</span>  }<a name="line.3711"></a>
-<span class="sourceLineNo">3712</span><a name="line.3712"></a>
-<span class="sourceLineNo">3713</span>  public void remoteProcedureFailed(long procId, RemoteProcedureException error) {<a name="line.3713"></a>
-<span class="sourceLineNo">3714</span>    LOG.debug("Remote procedure failed, pid={}", procId, error);<a name="line.3714"></a>
-<span class="sourceLineNo">3715</span>    RemoteProcedure&lt;MasterProcedureEnv, ?&gt; procedure = getRemoteProcedure(procId);<a name="line.3715"></a>
-<span class="sourceLineNo">3716</span>    if (procedure != null) {<a name="line.3716"></a>
-<span class="sourceLineNo">3717</span>      procedure.remoteOperationFailed(procedureExecutor.getEnvironment(), error);<a name="line.3717"></a>
-<span class="sourceLineNo">3718</span>    }<a name="line.3718"></a>
+<span class="sourceLineNo">3682</span>  public QuotaObserverChore getQuotaObserverChore() {<a name="line.3682"></a>
+<span class="sourceLineNo">3683</span>    return this.quotaObserverChore;<a name="line.3683"></a>
+<span class="sourceLineNo">3684</span>  }<a name="line.3684"></a>
+<span class="sourceLineNo">3685</span><a name="line.3685"></a>
+<span class="sourceLineNo">3686</span>  public SpaceQuotaSnapshotNotifier getSpaceQuotaSnapshotNotifier() {<a name="line.3686"></a>
+<span class="sourceLineNo">3687</span>    return this.spaceQuotaSnapshotNotifier;<a name="line.3687"></a>
+<span class="sourceLineNo">3688</span>  }<a name="line.3688"></a>
+<span class="sourceLineNo">3689</span><a name="line.3689"></a>
+<span class="sourceLineNo">3690</span>  @SuppressWarnings("unchecked")<a name="line.3690"></a>
+<span class="sourceLineNo">3691</span>  private RemoteProcedure&lt;MasterProcedureEnv, ?&gt; getRemoteProcedure(long procId) {<a name="line.3691"></a>
+<span class="sourceLineNo">3692</span>    Procedure&lt;?&gt; procedure = procedureExecutor.getProcedure(procId);<a name="line.3692"></a>
+<span class="sourceLineNo">3693</span>    if (procedure == null) {<a name="line.3693"></a>
+<span class="sourceLineNo">3694</span>      return null;<a name="line.3694"></a>
+<span class="sourceLineNo">3695</span>    }<a name="line.3695"></a>
+<span class="sourceLineNo">3696</span>    assert procedure instanceof RemoteProcedure;<a name="line.3696"></a>
+<span class="sourceLineNo">3697</span>    return (RemoteProcedure&lt;MasterProcedureEnv, ?&gt;) procedure;<a name="line.3697"></a>
+<span class="sourceLineNo">3698</span>  }<a name="line.3698"></a>
+<span class="sourceLineNo">3699</span><a name="line.3699"></a>
+<span class="sourceLineNo">3700</span>  public void remoteProcedureCompleted(long procId) {<a name="line.3700"></a>
+<span class="sourceLineNo">3701</span>    LOG.debug("Remote procedure done, pid={}", procId);<a name="line.3701"></a>
+<span class="sourceLineNo">3702</span>    RemoteProcedure&lt;MasterProcedureEnv, ?&gt; procedure = getRemoteProcedure(procId);<a name="line.3702"></a>
+<span class="sourceLineNo">3703</span>    if (procedure != null) {<a name="line.3703"></a>
+<span class="sourceLineNo">3704</span>      procedure.remoteOperationCompleted(procedureExecutor.getEnvironment());<a name="line.3704"></a>
+<span class="sourceLineNo">3705</span>    }<a name="line.3705"></a>
+<span class="sourceLineNo">3706</span>  }<a name="line.3706"></a>
+<span class="sourceLineNo">3707</span><a name="line.3707"></a>
+<span class="sourceLineNo">3708</span>  public void remoteProcedureFailed(long procId, RemoteProcedureException error) {<a name="line.3708"></a>
+<span class="sourceLineNo">3709</span>    LOG.debug("Remote procedure failed, pid={}", procId, error);<a name="line.3709"></a>
+<span class="sourceLineNo">3710</span>    RemoteProcedure&lt;MasterProcedureEnv, ?&gt; procedure = getRemoteProcedure(procId);<a name="line.3710"></a>
+<span class="sourceLineNo">3711</span>    if (procedure != null) {<a name="line.3711"></a>
+<span class="sourceLineNo">3712</span>      procedure.remoteOperationFailed(procedureExecutor.getEnvironment(), error);<a name="line.3712"></a>
+<span class="sourceLineNo">3713</span>    }<a name="line.3713"></a>
+<span class="sourceLineNo">3714</span>  }<a name="line.3714"></a>
+<span class="sourceLineNo">3715</span><a name="line.3715"></a>
+<span class="sourceLineNo">3716</span>  @Override<a name="line.3716"></a>
+<span class="sourceLineNo">3717</span>  public ReplicationPeerManager getReplicationPeerManager() {<a name="line.3717"></a>
+<span class="sourceLineNo">3718</span>    return replicationPeerManager;<a name="line.3718"></a>
 <span class="sourceLineNo">3719</span>  }<a name="line.3719"></a>
 <span class="sourceLineNo">3720</span><a name="line.3720"></a>
-<span class="sourceLineNo">3721</span>  @Override<a name="line.3721"></a>
-<span class="sourceLineNo">3722</span>  public ReplicationPeerManager getReplicationPeerManager() {<a name="line.3722"></a>
-<span class="sourceLineNo">3723</span>    return replicationPeerManager;<a name="line.3723"></a>
-<span class="sourceLineNo">3724</span>  }<a name="line.3724"></a>
-<span class="sourceLineNo">3725</span><a name="line.3725"></a>
-<span class="sourceLineNo">3726</span>  public HashMap&lt;String, List&lt;Pair&lt;ServerName, ReplicationLoadSource&gt;&gt;&gt;<a name="line.3726"></a>
-<span class="sourceLineNo">3727</span>      getReplicationLoad(ServerName[] serverNames) {<a name="line.3727"></a>
-<span class="sourceLineNo">3728</span>    List&lt;ReplicationPeerDescription&gt; peerList = this.getReplicationPeerManager().listPeers(null);<a name="line.3728"></a>
-<span class="sourceLineNo">3729</span>    if (peerList == null) {<a name="line.3729"></a>
-<span class="sourceLineNo">3730</span>      return null;<a name="line.3730"></a>
-<span class="sourceLineNo">3731</span>    }<a name="line.3731"></a>
-<span class="sourceLineNo">3732</span>    HashMap&lt;String, List&lt;Pair&lt;ServerName, ReplicationLoadSource&gt;&gt;&gt; replicationLoadSourceMap =<a name="line.3732"></a>
-<span class="sourceLineNo">3733</span>        new HashMap&lt;&gt;(peerList.size());<a name="line.3733"></a>
-<span class="sourceLineNo">3734</span>    peerList.stream()<a name="line.3734"></a>
-<span class="sourceLineNo">3735</span>        .forEach(peer -&gt; replicationLoadSourceMap.put(peer.getPeerId(), new ArrayList&lt;&gt;()));<a name="line.3735"></a>
-<span class="sourceLineNo">3736</span>    for (ServerName serverName : serverNames) {<a name="line.3736"></a>
-<span class="sourceLineNo">3737</span>      List&lt;ReplicationLoadSource&gt; replicationLoadSources =<a name="line.3737"></a>
-<span class="sourceLineNo">3738</span>          getServerManager().getLoad(serverName).getReplicationLoadSourceList();<a name="line.3738"></a>
-<span class="sourceLineNo">3739</span>      for (ReplicationLoadSource replicationLoadSource : replicationLoadSources) {<a name="line.3739"></a>
-<span class="sourceLineNo">3740</span>        replicationLoadSourceMap.get(replicationLoadSource.getPeerID())<a name="line.3740"></a>
-<span class="sourceLineNo">3741</span>            .add(new Pair&lt;&gt;(serverName, replicationLoadSource));<a name="line.3741"></a>
+<span class="sourceLineNo">3721</span>  public HashMap&lt;String, List&lt;Pair&lt;ServerName, ReplicationLoadSource&gt;&gt;&gt;<a name="line.3721"></a>
+<span class="sourceLineNo">3722</span>      getReplicationLoad(ServerName[] serverNames) {<a name="line.3722"></a>
+<span class="sourceLineNo">3723</span>    List&lt;ReplicationPeerDescription&gt; peerList = this.getReplicationPeerManager().listPeers(null);<a name="line.3723"></a>
+<span class="sourceLineNo">3724</span>    if (peerList == null) {<a name="line.3724"></a>
+<span class="sourceLineNo">3725</span>      return null;<a name="line.3725"></a>
+<span class="sourceLineNo">3726</span>    }<a name="line.3726"></a>
+<span class="sourceLineNo">3727</span>    HashMap&lt;String, List&lt;Pair&lt;ServerName, ReplicationLoadSource&gt;&gt;&gt; replicationLoadSourceMap =<a name="line.3727"></a>
+<span class="sourceLineNo">3728</span>        new HashMap&lt;&gt;(peerList.size());<a name="line.3728"></a>
+<span class="sourceLineNo">3729</span>    peerList.stream()<a name="line.3729"></a>
+<span class="sourceLineNo">3730</span>        .forEach(peer -&gt; replicationLoadSourceMap.put(peer.getPeerId(), new ArrayList&lt;&gt;()));<a name="line.3730"></a>
+<span class="sourceLineNo">3731</span>    for (ServerName serverName : serverNames) {<a name="line.3731"></a>
+<span class="sourceLineNo">3732</span>      List&lt;ReplicationLoadSource&gt; replicationLoadSources =<a name="line.3732"></a>
+<span class="sourceLineNo">3733</span>          getServerManager().getLoad(serverName).getReplicationLoadSourceList();<a name="line.3733"></a>
+<span class="sourceLineNo">3734</span>      for (ReplicationLoadSource replicationLoadSource : replicationLoadSources) {<a name="line.3734"></a>
+<span class="sourceLineNo">3735</span>        replicationLoadSourceMap.get(replicationLoadSource.getPeerID())<a name="line.3735"></a>
+<span class="sourceLineNo">3736</span>            .add(new Pair&lt;&gt;(serverName, replicationLoadSource));<a name="line.3736"></a>
+<span class="sourceLineNo">3737</span>      }<a name="line.3737"></a>
+<span class="sourceLineNo">3738</span>    }<a name="line.3738"></a>
+<span class="sourceLineNo">3739</span>    for (List&lt;Pair&lt;ServerName, ReplicationLoadSource&gt;&gt; loads : replicationLoadSourceMap.values()) {<a name="line.3739"></a>
+<span class="sourceLineNo">3740</span>      if (loads.size() &gt; 0) {<a name="line.3740"></a>
+<span class="sourceLineNo">3741</span>        loads.sort(Comparator.comparingLong(load -&gt; (-1) * load.getSecond().getReplicationLag()));<a name="line.3741"></a>
 <span class="sourceLineNo">3742</span>      }<a name="line.3742"></a>
 <span class="sourceLineNo">3743</span>    }<a name="line.3743"></a>
-<span class="sourceLineNo">3744</span>    for (List&lt;Pair&lt;ServerName, ReplicationLoadSource&gt;&gt; loads : replicationLoadSourceMap.values()) {<a name="line.3744"></a>
-<span class="sourceLineNo">3745</span>      if (loads.size() &gt; 0) {<a name="line.3745"></a>
-<span class="sourceLineNo">3746</span>        loads.sort(Comparator.comparingLong(load -&gt; (-1) * load.getSecond().getReplicationLag()));<a name="line.3746"></a>
-<span class="sourceLineNo">3747</span>      }<a name="line.3747"></a>
-<span class="sourceLineNo">3748</span>    }<a name="line.3748"></a>
-<span class="sourceLineNo">3749</span>    return replicationLoadSourceMap;<a name="line.3749"></a>
-<span class="sourceLineNo">3750</span>  }<a name="line.3750"></a>
-<span class="sourceLineNo">3751</span><a name="line.3751"></a>
-<span class="sourceLineNo">3752</span>  /**<a name="line.3752"></a>
-<span class="sourceLineNo">3753</span>   * This method modifies the master's configuration in order to inject replication-related features<a name="line.3753"></a>
-<span class="sourceLineNo">3754</span>   */<a name="line.3754"></a>
-<span class="sourceLineNo">3755</span>  @VisibleForTesting<a name="line.3755"></a>
-<span class="sourceLineNo">3756</span>  public static void decorateMasterConfiguration(Configuration conf) {<a name="line.3756"></a>
-<span class="sourceLineNo">3757</span>    String plugins = conf.get(HBASE_MASTER_LOGCLEANER_PLUGINS);<a name="line.3757"></a>
-<span class="sourceLineNo">3758</span>    String cleanerClass = ReplicationLogCleaner.class.getCanonicalName();<a name="line.3758"></a>
-<span class="sourceLineNo">3759</span>    if (!plugins.contains(cleanerClass)) {<a name="line.3759"></a>
-<span class="sourceLineNo">3760</span>      conf.set(HBASE_MASTER_LOGCLEANER_PLUGINS, plugins + "," + cleanerClass);<a name="line.3760"></a>
-<span class="sourceLineNo">3761</span>    }<a name="line.3761"></a>
-<span class="sourceLineNo">3762</span>    if (ReplicationUtils.isReplicationForBulkLoadDataEnabled(conf)) {<a name="line.3762"></a>
-<span class="sourceLineNo">3763</span>      plugins = conf.get(HFileCleaner.MASTER_HFILE_CLEANER_PLUGINS);<a name="line.3763"></a>
-<span class="sourceLineNo">3764</span>      cleanerClass = ReplicationHFileCleaner.class.getCanonicalName();<a name="line.3764"></a>
-<span class="sourceLineNo">3765</span>      if (!plugins.contains(cleanerClass)) {<a name="line.3765"></a>
-<span class="sourceLineNo">3766</span>        conf.set(HFileCleaner.MASTER_HFILE_CLEANER_PLUGINS, plugins + "," + cleanerClass);<a name="line.3766"></a>
-<span class="sourceLineNo">3767</span>      }<a name="line.3767"></a>
-<span class="sourceLineNo">3768</span>    }<a name="line.3768"></a>
-<span class="sourceLineNo">3769</span>  }<a name="line.3769"></a>
-<span class="sourceLineNo">3770</span><a name="line.3770"></a>
-<span class="sourceLineNo">3771</span>  public SnapshotQuotaObserverChore getSnapshotQuotaObserverChore() {<a name="line.3771"></a>
-<span class="sourceLineNo">3772</span>    return this.snapshotQuotaChore;<a name="line.3772"></a>
+<span class="sourceLineNo">3744</span>    return replicationLoadSourceMap;<a name="line.3744"></a>
+<span class="sourceLineNo">3745</span>  }<a name="line.3745"></a>
+<span class="sourceLineNo">3746</span><a name="line.3746"></a>
+<span class="sourceLineNo">3747</span>  /**<a name="line.3747"></a>
+<span class="sourceLineNo">3748</span>   * This method modifies the master's configuration in order to inject replication-related features<a name="line.3748"></a>
+<span class="sourceLineNo">3749</span>   */<a name="line.3749"></a>
+<span class="sourceLineNo">3750</span>  @VisibleForTesting<a name="line.3750"></a>
+<span class="sourceLineNo">3751</span>  public static void decorateMasterConfiguration(Configuration conf) {<a name="line.3751"></a>
+<span class="sourceLineNo">3752</span>    String plugins = conf.get(HBASE_MASTER_LOGCLEANER_PLUGINS);<a name="line.3752"></a>
+<span class="sourceLineNo">3753</span>    String cleanerClass = ReplicationLogCleaner.class.getCanonicalName();<a name="line.3753"></a>
+<span class="sourceLineNo">3754</span>    if (!plugins.contains(cleanerClass)) {<a name="line.3754"></a>
+<span class="sourceLineNo">3755</span>      conf.set(HBASE_MASTER_LOGCLEANER_PLUGINS, plugins + "," + cleanerClass);<a name="line.3755"></a>
+<span class="sourceLineNo">3756</span>    }<a name="line.3756"></a>
+<span class="sourceLineNo">3757</span>    if (ReplicationUtils.isReplicationForBulkLoadDataEnabled(conf)) {<a name="line.3757"></a>
+<span class="sourceLineNo">3758</span>      plugins = conf.get(HFileCleaner.MASTER_HFILE_CLEANER_PLUGINS);<a name="line.3758"></a>
+<span class="sourceLineNo">3759</span>      cleanerClass = ReplicationHFileCleaner.class.getCanonicalName();<a name="line.3759"></a>
+<span class="sourceLineNo">3760</span>      if (!plugins.contains(cleanerClass)) {<a name="line.3760"></a>
+<span class="sourceLineNo">3761</span>        conf.set(HFileCleaner.MASTER_HFILE_CLEANER_PLUGINS, plugins + "," + cleanerClass);<a name="line.3761"></a>
+<span class="sourceLineNo">3762</span>      }<a name="line.3762"></a>
+<span class="sourceLineNo">3763</span>    }<a name="line.3763"></a>
+<span class="sourceLineNo">3764</span>  }<a name="line.3764"></a>
+<span class="sourceLineNo">3765</span><a name="line.3765"></a>
+<span class="sourceLineNo">3766</span>  public SnapshotQuotaObserverChore getSnapshotQuotaObserverChore() {<a name="line.3766"></a>
+<span class="sourceLineNo">3767</span>    return this.snapshotQuotaChore;<a name="line.3767"></a>
+<span class="sourceLineNo">3768</span>  }<a name="line.3768"></a>
+<span class="sourceLineNo">3769</span><a name="line.3769"></a>
+<span class="sourceLineNo">3770</span>  @Override<a name="line.3770"></a>
+<span class="sourceLineNo">3771</span>  public SyncReplicationReplayWALManager getSyncReplicationReplayWALManager() {<a name="line.3771"></a>
+<span class="sourceLineNo">3772</span>    return this.syncReplicationReplayWALManager;<a name="line.3772"></a>
 <span class="sourceLineNo">3773</span>  }<a name="line.3773"></a>
 <span class="sourceLineNo">3774</span><a name="line.3774"></a>
 <span class="sourceLineNo">3775</span>  @Override<a name="line.3775"></a>
-<span class="sourceLineNo">3776</span>  public SyncReplicationReplayWALManager getSyncReplicationReplayWALManager() {<a name="line.3776"></a>
-<span class="sourceLineNo">3777</span>    return this.syncReplicationReplayWALManager;<a name="line.3777"></a>
-<span class="sourceLineNo">3778</span>  }<a name="line.3778"></a>
-<span class="sourceLineNo">3779</span><a name="line.3779"></a>
-<span class="sourceLineNo">3780</span>  @Override<a name="line.3780"></a>
-<span class="sourceLineNo">3781</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus() {<a name="line.3781"></a>
-<span class="sourceLineNo">3782</span>    if (!this.isOnline() || !LoadBalancer.isMasterCanHostUserRegions(conf)) {<a name="line.3782"></a>
-<span class="sourceLineNo">3783</span>      return new HashMap&lt;&gt;();<a name="line.3783"></a>
-<span class="sourceLineNo">3784</span>    }<a name="line.3784"></a>
-<span class="sourceLineNo">3785</span>    return super.getWalGroupsReplicationStatus();<a name="line.3785"></a>
-<span class="sourceLineNo">3786</span>  }<a name="line.3786"></a>
-<span class="sourceLineNo">3787</span><a name="line.3787"></a>
-<span class="sourceLineNo">3788</span>  public HbckChore getHbckChore() {<a name="line.3788"></a>
-<span class="sourceLineNo">3789</span>    return this.hbckChore;<a name="line.3789"></a>
-<span class="sourceLineNo">3790</span>  }<a name="line.3790"></a>
-<span class="sourceLineNo">3791</span>}<a name="line.3791"></a>
+<span class="sourceLineNo">3776</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus() {<a name="line.3776"></a>
+<span class="sourceLineNo">3777</span>    if (!this.isOnline() || !LoadBalancer.isMasterCanHostUserRegions(conf)) {<a name="line.3777"></a>
+<span class="sourceLineNo">3778</span>      return new HashMap&lt;&gt;();<a name="line.3778"></a>
+<span class="sourceLineNo">3779</span>    }<a name="line.3779"></a>
+<span class="sourceLineNo">3780</span>    return super.getWalGroupsReplicationStatus();<a name="line.3780"></a>
+<span class="sourceLineNo">3781</span>  }<a name="line.3781"></a>
+<span class="sourceLineNo">3782</span><a name="line.3782"></a>
+<span class="sourceLineNo">3783</span>  public HbckChore getHbckChore() {<a name="line.3783"></a>
+<span class="sourceLineNo">3784</span>    return this.hbckChore;<a name="line.3784"></a>
+<span class="sourceLineNo">3785</span>  }<a name="line.3785"></a>
+<span class="sourceLineNo">3786</span>}<a name="line.3786"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
index 74cf147..22caa84 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
@@ -1312,2491 +1312,2486 @@
 <span class="sourceLineNo">1304</span><a name="line.1304"></a>
 <span class="sourceLineNo">1305</span>    int mobCompactionPeriod = conf.getInt(MobConstants.MOB_COMPACTION_CHORE_PERIOD,<a name="line.1305"></a>
 <span class="sourceLineNo">1306</span>        MobConstants.DEFAULT_MOB_COMPACTION_CHORE_PERIOD);<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    if (mobCompactionPeriod &gt; 0) {<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>      this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      getChoreService().scheduleChore(mobCompactChore);<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    } else {<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>      LOG<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>        .info("The period is " + mobCompactionPeriod + " seconds, MobCompactionChore is disabled");<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>    }<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>  }<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span><a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>  /**<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>   * &lt;p&gt;<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * &lt;/p&gt;<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   * &lt;p&gt;<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>   * Will be overridden in tests.<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>   * &lt;/p&gt;<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>   */<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>  @VisibleForTesting<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>  protected MasterMetaBootstrap createMetaBootstrap() {<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>    return new MasterMetaBootstrap(this);<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>  }<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span><a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>  /**<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>   * &lt;p&gt;<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>   * Create a {@link ServerManager} instance.<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>   * &lt;/p&gt;<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>   * &lt;p&gt;<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>   * Will be overridden in tests.<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>   * &lt;/p&gt;<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>   */<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  @VisibleForTesting<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>  protected ServerManager createServerManager(final MasterServices master) throws IOException {<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    // w/ a mocked up ServerManager.<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    setupClusterConnection();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>    return new ServerManager(master);<a name="line.1345"></a>
+<span class="sourceLineNo">1307</span>    this.mobCompactChore = new MobCompactionChore(this, mobCompactionPeriod);<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    getChoreService().scheduleChore(mobCompactChore);<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>    this.mobCompactThread = new MasterMobCompactionThread(this);<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>  }<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span><a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>  /**<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>   * &lt;p&gt;<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>   * Create a {@link MasterMetaBootstrap} instance.<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>   * &lt;/p&gt;<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>   * &lt;p&gt;<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>   * Will be overridden in tests.<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>   * &lt;/p&gt;<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>   */<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  @VisibleForTesting<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>  protected MasterMetaBootstrap createMetaBootstrap() {<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>    // w/ a mocked up MasterMetaBootstrap.<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    return new MasterMetaBootstrap(this);<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>  }<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span><a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>  /**<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>   * &lt;p&gt;<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>   * Create a {@link ServerManager} instance.<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>   * &lt;/p&gt;<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>   * &lt;p&gt;<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>   * Will be overridden in tests.<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>   * &lt;/p&gt;<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>   */<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>  @VisibleForTesting<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>  protected ServerManager createServerManager(final MasterServices master) throws IOException {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>    // We put this out here in a method so can do a Mockito.spy and stub it out<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>    // w/ a mocked up ServerManager.<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>    setupClusterConnection();<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>    return new ServerManager(master);<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>  }<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span><a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>  private void waitForRegionServers(final MonitoredTask status)<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>      throws IOException, InterruptedException {<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>    this.serverManager.waitForRegionServers(status);<a name="line.1345"></a>
 <span class="sourceLineNo">1346</span>  }<a name="line.1346"></a>
 <span class="sourceLineNo">1347</span><a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>  private void waitForRegionServers(final MonitoredTask status)<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>      throws IOException, InterruptedException {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>    this.serverManager.waitForRegionServers(status);<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>  }<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span><a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>  // Will be overridden in tests<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>  @VisibleForTesting<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>  protected void initClusterSchemaService() throws IOException, InterruptedException {<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    this.clusterSchemaService = new ClusterSchemaServiceImpl(this);<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    this.clusterSchemaService.startAsync();<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>    try {<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>      this.clusterSchemaService.awaitRunning(getConfiguration().getInt(<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>        HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>        DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    } catch (TimeoutException toe) {<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>      throw new IOException("Timedout starting ClusterSchemaService", toe);<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    }<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>  }<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>  private void initQuotaManager() throws IOException {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>    MasterQuotaManager quotaManager = new MasterQuotaManager(this);<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    quotaManager.start();<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>    this.quotaManager = quotaManager;<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>  }<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span><a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>  private SpaceQuotaSnapshotNotifier createQuotaSnapshotNotifier() {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>    SpaceQuotaSnapshotNotifier notifier =<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>        SpaceQuotaSnapshotNotifierFactory.getInstance().create(getConfiguration());<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>    return notifier;<a name="line.1376"></a>
+<span class="sourceLineNo">1348</span>  // Will be overridden in tests<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>  @VisibleForTesting<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>  protected void initClusterSchemaService() throws IOException, InterruptedException {<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>    this.clusterSchemaService = new ClusterSchemaServiceImpl(this);<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>    this.clusterSchemaService.startAsync();<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>    try {<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>      this.clusterSchemaService.awaitRunning(getConfiguration().getInt(<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>        HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS,<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>        DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS), TimeUnit.SECONDS);<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>    } catch (TimeoutException toe) {<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>      throw new IOException("Timedout starting ClusterSchemaService", toe);<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>    }<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>  }<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span><a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>  private void initQuotaManager() throws IOException {<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>    MasterQuotaManager quotaManager = new MasterQuotaManager(this);<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>    quotaManager.start();<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>    this.quotaManager = quotaManager;<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>  }<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span><a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>  private SpaceQuotaSnapshotNotifier createQuotaSnapshotNotifier() {<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>    SpaceQuotaSnapshotNotifier notifier =<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>        SpaceQuotaSnapshotNotifierFactory.getInstance().create(getConfiguration());<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>    return notifier;<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>  }<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span><a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>  boolean isCatalogJanitorEnabled() {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>    return catalogJanitorChore != null ?<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>      catalogJanitorChore.getEnabled() : false;<a name="line.1376"></a>
 <span class="sourceLineNo">1377</span>  }<a name="line.1377"></a>
 <span class="sourceLineNo">1378</span><a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>  boolean isCatalogJanitorEnabled() {<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>    return catalogJanitorChore != null ?<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      catalogJanitorChore.getEnabled() : false;<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>  }<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span><a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>  boolean isCleanerChoreEnabled() {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>    boolean hfileCleanerFlag = true, logCleanerFlag = true;<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span><a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    if (hfileCleaner != null) {<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>      hfileCleanerFlag = hfileCleaner.getEnabled();<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    }<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span><a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    if (logCleaner != null) {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      logCleanerFlag = logCleaner.getEnabled();<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    return (hfileCleanerFlag &amp;&amp; logCleanerFlag);<a name="line.1395"></a>
+<span class="sourceLineNo">1379</span>  boolean isCleanerChoreEnabled() {<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>    boolean hfileCleanerFlag = true, logCleanerFlag = true;<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span><a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>    if (hfileCleaner != null) {<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>      hfileCleanerFlag = hfileCleaner.getEnabled();<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>    }<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span><a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>    if (logCleaner != null) {<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      logCleanerFlag = logCleaner.getEnabled();<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>    }<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span><a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>    return (hfileCleanerFlag &amp;&amp; logCleanerFlag);<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>  }<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span><a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>  @Override<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>  public ServerManager getServerManager() {<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    return this.serverManager;<a name="line.1395"></a>
 <span class="sourceLineNo">1396</span>  }<a name="line.1396"></a>
 <span class="sourceLineNo">1397</span><a name="line.1397"></a>
 <span class="sourceLineNo">1398</span>  @Override<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>  public ServerManager getServerManager() {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>    return this.serverManager;<a name="line.1400"></a>
+<span class="sourceLineNo">1399</span>  public MasterFileSystem getMasterFileSystem() {<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>    return this.fileSystemManager;<a name="line.1400"></a>
 <span class="sourceLineNo">1401</span>  }<a name="line.1401"></a>
 <span class="sourceLineNo">1402</span><a name="line.1402"></a>
 <span class="sourceLineNo">1403</span>  @Override<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>  public MasterFileSystem getMasterFileSystem() {<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    return this.fileSystemManager;<a name="line.1405"></a>
+<span class="sourceLineNo">1404</span>  public MasterWalManager getMasterWalManager() {<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    return this.walManager;<a name="line.1405"></a>
 <span class="sourceLineNo">1406</span>  }<a name="line.1406"></a>
 <span class="sourceLineNo">1407</span><a name="line.1407"></a>
 <span class="sourceLineNo">1408</span>  @Override<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>  public MasterWalManager getMasterWalManager() {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    return this.walManager;<a name="line.1410"></a>
+<span class="sourceLineNo">1409</span>  public SplitWALManager getSplitWALManager() {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    return splitWALManager;<a name="line.1410"></a>
 <span class="sourceLineNo">1411</span>  }<a name="line.1411"></a>
 <span class="sourceLineNo">1412</span><a name="line.1412"></a>
 <span class="sourceLineNo">1413</span>  @Override<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>  public SplitWALManager getSplitWALManager() {<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    return splitWALManager;<a name="line.1415"></a>
+<span class="sourceLineNo">1414</span>  public TableStateManager getTableStateManager() {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>    return tableStateManager;<a name="line.1415"></a>
 <span class="sourceLineNo">1416</span>  }<a name="line.1416"></a>
 <span class="sourceLineNo">1417</span><a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>  @Override<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  public TableStateManager getTableStateManager() {<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>    return tableStateManager;<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>  }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>  /*<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>   * Start up all services. If any of these threads gets an unhandled exception<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>   * then they just die with a logged message.  This should be fine because<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>   * in general, we do not expect the master to get such unhandled exceptions<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>   *  as OOMEs; it should be lightly loaded. See what HRegionServer does if<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>   *  need to install an unexpected exception handler.<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>   */<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>  private void startServiceThreads() throws IOException {<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    // Start the executor service pools<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>    this.executorService.startExecutorService(ExecutorType.MASTER_OPEN_REGION, conf.getInt(<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      HConstants.MASTER_OPEN_REGION_THREADS, HConstants.MASTER_OPEN_REGION_THREADS_DEFAULT));<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>    this.executorService.startExecutorService(ExecutorType.MASTER_CLOSE_REGION, conf.getInt(<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>      HConstants.MASTER_CLOSE_REGION_THREADS, HConstants.MASTER_CLOSE_REGION_THREADS_DEFAULT));<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>    this.executorService.startExecutorService(ExecutorType.MASTER_SERVER_OPERATIONS,<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      conf.getInt(HConstants.MASTER_SERVER_OPERATIONS_THREADS,<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>        HConstants.MASTER_SERVER_OPERATIONS_THREADS_DEFAULT));<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>    this.executorService.startExecutorService(ExecutorType.MASTER_META_SERVER_OPERATIONS,<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      conf.getInt(HConstants.MASTER_META_SERVER_OPERATIONS_THREADS,<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>        HConstants.MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT));<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>    this.executorService.startExecutorService(ExecutorType.M_LOG_REPLAY_OPS, conf.getInt(<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      HConstants.MASTER_LOG_REPLAY_OPS_THREADS, HConstants.MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT));<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>    this.executorService.startExecutorService(ExecutorType.MASTER_SNAPSHOT_OPERATIONS, conf.getInt(<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      SnapshotManager.SNAPSHOT_POOL_THREADS_KEY, SnapshotManager.SNAPSHOT_POOL_THREADS_DEFAULT));<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span><a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>   // We depend on there being only one instance of this executor running<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>   // at a time.  To do concurrency, would need fencing of enable/disable of<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>   // tables.<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>   // Any time changing this maxThreads to &gt; 1, pls see the comment at<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>   // AccessController#postCompletedCreateTableAction<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>   this.executorService.startExecutorService(ExecutorType.MASTER_TABLE_OPERATIONS, 1);<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>   startProcedureExecutor();<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    // Create cleaner thread pool<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>    cleanerPool = new DirScanPool(conf);<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>    // Start log cleaner thread<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>    int cleanerInterval = conf.getInt("hbase.master.cleaner.interval", 600 * 1000);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    this.logCleaner = new LogCleaner(cleanerInterval, this, conf,<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>      getMasterWalManager().getFileSystem(), getMasterWalManager().getOldLogDir(), cleanerPool);<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    getChoreService().scheduleChore(logCleaner);<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span><a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    // start the hfile archive cleaner thread<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>    Path archiveDir = HFileArchiveUtil.getArchivePath(conf);<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>    Map&lt;String, Object&gt; params = new HashMap&lt;&gt;();<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>    params.put(MASTER, this);<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    this.hfileCleaner = new HFileCleaner(cleanerInterval, this, conf,<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      getMasterFileSystem().getFileSystem(), archiveDir, cleanerPool, params);<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    getChoreService().scheduleChore(hfileCleaner);<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span><a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>    replicationBarrierCleaner = new ReplicationBarrierCleaner(conf, this, getConnection(),<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>      replicationPeerManager);<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>    getChoreService().scheduleChore(replicationBarrierCleaner);<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span><a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>    final boolean isSnapshotChoreEnabled = this.snapshotCleanupTracker<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        .isSnapshotCleanupEnabled();<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>    this.snapshotCleanerChore = new SnapshotCleanerChore(this, conf, getSnapshotManager());<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>    if (isSnapshotChoreEnabled) {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      getChoreService().scheduleChore(this.snapshotCleanerChore);<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>    } else {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>      if (LOG.isTraceEnabled()) {<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>        LOG.trace("Snapshot Cleaner Chore is disabled. Not starting up the chore..");<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      }<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>    }<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>    serviceStarted = true;<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>    if (LOG.isTraceEnabled()) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>      LOG.trace("Started service threads");<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>    }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>  }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span><a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>  @Override<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>  protected void stopServiceThreads() {<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>    if (masterJettyServer != null) {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>      LOG.info("Stopping master jetty server");<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>      try {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>        masterJettyServer.stop();<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>      } catch (Exception e) {<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>        LOG.error("Failed to stop master jetty server", e);<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>      }<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>    }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>    stopChores();<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    if (this.mobCompactThread != null) {<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>      this.mobCompactThread.close();<a name="line.1503"></a>
+<span class="sourceLineNo">1418</span>  /*<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>   * Start up all services. If any of these threads gets an unhandled exception<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>   * then they just die with a logged message.  This should be fine because<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>   * in general, we do not expect the master to get such unhandled exceptions<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>   *  as OOMEs; it should be lightly loaded. See what HRegionServer does if<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>   *  need to install an unexpected exception handler.<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>   */<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>  private void startServiceThreads() throws IOException {<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    // Start the executor service pools<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    this.executorService.startExecutorService(ExecutorType.MASTER_OPEN_REGION, conf.getInt(<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>      HConstants.MASTER_OPEN_REGION_THREADS, HConstants.MASTER_OPEN_REGION_THREADS_DEFAULT));<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>    this.executorService.startExecutorService(ExecutorType.MASTER_CLOSE_REGION, conf.getInt(<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      HConstants.MASTER_CLOSE_REGION_THREADS, HConstants.MASTER_CLOSE_REGION_THREADS_DEFAULT));<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>    this.executorService.startExecutorService(ExecutorType.MASTER_SERVER_OPERATIONS,<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>      conf.getInt(HConstants.MASTER_SERVER_OPERATIONS_THREADS,<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>        HConstants.MASTER_SERVER_OPERATIONS_THREADS_DEFAULT));<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>    this.executorService.startExecutorService(ExecutorType.MASTER_META_SERVER_OPERATIONS,<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      conf.getInt(HConstants.MASTER_META_SERVER_OPERATIONS_THREADS,<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>        HConstants.MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT));<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>    this.executorService.startExecutorService(ExecutorType.M_LOG_REPLAY_OPS, conf.getInt(<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      HConstants.MASTER_LOG_REPLAY_OPS_THREADS, HConstants.MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT));<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>    this.executorService.startExecutorService(ExecutorType.MASTER_SNAPSHOT_OPERATIONS, conf.getInt(<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      SnapshotManager.SNAPSHOT_POOL_THREADS_KEY, SnapshotManager.SNAPSHOT_POOL_THREADS_DEFAULT));<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span><a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>   // We depend on there being only one instance of this executor running<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>   // at a time.  To do concurrency, would need fencing of enable/disable of<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>   // tables.<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>   // Any time changing this maxThreads to &gt; 1, pls see the comment at<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>   // AccessController#postCompletedCreateTableAction<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>   this.executorService.startExecutorService(ExecutorType.MASTER_TABLE_OPERATIONS, 1);<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>   startProcedureExecutor();<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span><a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    // Create cleaner thread pool<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>    cleanerPool = new DirScanPool(conf);<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>    // Start log cleaner thread<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    int cleanerInterval = conf.getInt("hbase.master.cleaner.interval", 600 * 1000);<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>    this.logCleaner = new LogCleaner(cleanerInterval, this, conf,<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>      getMasterWalManager().getFileSystem(), getMasterWalManager().getOldLogDir(), cleanerPool);<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>    getChoreService().scheduleChore(logCleaner);<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span><a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>    // start the hfile archive cleaner thread<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>    Path archiveDir = HFileArchiveUtil.getArchivePath(conf);<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    Map&lt;String, Object&gt; params = new HashMap&lt;&gt;();<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>    params.put(MASTER, this);<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    this.hfileCleaner = new HFileCleaner(cleanerInterval, this, conf,<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>      getMasterFileSystem().getFileSystem(), archiveDir, cleanerPool, params);<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>    getChoreService().scheduleChore(hfileCleaner);<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    replicationBarrierCleaner = new ReplicationBarrierCleaner(conf, this, getConnection(),<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      replicationPeerManager);<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>    getChoreService().scheduleChore(replicationBarrierCleaner);<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span><a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>    final boolean isSnapshotChoreEnabled = this.snapshotCleanupTracker<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        .isSnapshotCleanupEnabled();<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>    this.snapshotCleanerChore = new SnapshotCleanerChore(this, conf, getSnapshotManager());<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>    if (isSnapshotChoreEnabled) {<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>      getChoreService().scheduleChore(this.snapshotCleanerChore);<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>    } else {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>      if (LOG.isTraceEnabled()) {<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>        LOG.trace("Snapshot Cleaner Chore is disabled. Not starting up the chore..");<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      }<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    }<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>    serviceStarted = true;<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>    if (LOG.isTraceEnabled()) {<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>      LOG.trace("Started service threads");<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>    }<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>  }<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span><a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>  @Override<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>  protected void stopServiceThreads() {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>    if (masterJettyServer != null) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      LOG.info("Stopping master jetty server");<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      try {<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        masterJettyServer.stop();<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>      } catch (Exception e) {<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        LOG.error("Failed to stop master jetty server", e);<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>      }<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>    }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>    stopChores();<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    if (this.mobCompactThread != null) {<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>      this.mobCompactThread.close();<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>    super.stopServiceThreads();<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>    if (cleanerPool != null) {<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>      cleanerPool.shutdownNow();<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>      cleanerPool = null;<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span>    }<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    super.stopServiceThreads();<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    if (cleanerPool != null) {<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>      cleanerPool.shutdownNow();<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      cleanerPool = null;<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    }<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span><a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>    LOG.debug("Stopping service threads");<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span><a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    if (this.quotaManager != null) {<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>      this.quotaManager.stop();<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    }<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span><a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    if (this.activeMasterManager != null) {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      this.activeMasterManager.stop();<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    }<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>    if (this.serverManager != null) {<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      this.serverManager.stop();<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    if (this.assignmentManager != null) {<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>      this.assignmentManager.stop();<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span><a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    stopProcedureExecutor();<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span><a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    if (this.walManager != null) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      this.walManager.stop();<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>    if (this.fileSystemManager != null) {<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      this.fileSystemManager.stop();<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>    }<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    if (this.mpmHost != null) {<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      this.mpmHost.stop("server shutting down.");<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    }<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    if (this.regionServerTracker != null) {<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>      this.regionServerTracker.stop();<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    }<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>  }<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span><a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>  private void createProcedureExecutor() throws IOException {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>    MasterProcedureEnv procEnv = new MasterProcedureEnv(this);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>    procedureStore =<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      new WALProcedureStore(conf, new MasterProcedureEnv.WALStoreLeaseRecovery(this));<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    procedureStore.registerListener(new ProcedureStoreListener() {<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span><a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>      @Override<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>      public void abortProcess() {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>        abort("The Procedure Store lost the lease", null);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>      }<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>    });<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>    MasterProcedureScheduler procedureScheduler = procEnv.getProcedureScheduler();<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    procedureExecutor = new ProcedureExecutor&lt;&gt;(conf, procEnv, procedureStore, procedureScheduler);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    configurationManager.registerObserver(procEnv);<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span><a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    int cpus = Runtime.getRuntime().availableProcessors();<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    final int numThreads = conf.getInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, Math.max(<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>      (cpus &gt; 0 ? cpus / 4 : 0), MasterProcedureConstants.DEFAULT_MIN_MASTER_PROCEDURE_THREADS));<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    final boolean abortOnCorruption =<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      conf.getBoolean(MasterProcedureConstants.EXECUTOR_ABORT_ON_CORRUPTION,<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>        MasterProcedureConstants.DEFAULT_EXECUTOR_ABORT_ON_CORRUPTION);<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>    procedureStore.start(numThreads);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>    // Just initialize it but do not start the workers, we will start the workers later by calling<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    // startProcedureExecutor. See the javadoc for finishActiveMasterInitialization for more<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    // details.<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    procedureExecutor.init(numThreads, abortOnCorruption);<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    procEnv.getRemoteDispatcher().start();<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>  }<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span><a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>  private void startProcedureExecutor() throws IOException {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    procedureExecutor.startWorkers();<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>  }<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span><a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>  /**<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>   * Turn on/off Snapshot Cleanup Chore<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>   *<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>   * @param on indicates whether Snapshot Cleanup Chore is to be run<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>   */<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>  void switchSnapshotCleanup(final boolean on, final boolean synchronous) {<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    if (synchronous) {<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      synchronized (this.snapshotCleanerChore) {<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>        switchSnapshotCleanup(on);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      }<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>    } else {<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      switchSnapshotCleanup(on);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>    }<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  }<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>  private void switchSnapshotCleanup(final boolean on) {<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>    try {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      snapshotCleanupTracker.setSnapshotCleanupEnabled(on);<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      if (on) {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>        if (!getChoreService().isChoreScheduled(this.snapshotCleanerChore)) {<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>          getChoreService().scheduleChore(this.snapshotCleanerChore);<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>        }<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      } else {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>        getChoreService().cancelChore(this.snapshotCleanerChore);<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      }<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>    } catch (KeeperException e) {<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>      LOG.error("Error updating snapshot cleanup mode to {}", on, e);<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    }<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span><a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  private void stopProcedureExecutor() {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    if (procedureExecutor != null) {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      configurationManager.deregisterObserver(procedureExecutor.getEnvironment());<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>      procedureExecutor.getEnvironment().getRemoteDispatcher().stop();<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      procedureExecutor.stop();<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      procedureExecutor.join();<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>      procedureExecutor = null;<a name="line.1613"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    LOG.debug("Stopping service threads");<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span><a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>    if (this.quotaManager != null) {<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      this.quotaManager.stop();<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    }<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span><a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>    if (this.activeMasterManager != null) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>      this.activeMasterManager.stop();<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    }<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>    if (this.serverManager != null) {<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>      this.serverManager.stop();<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>    }<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    if (this.assignmentManager != null) {<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>      this.assignmentManager.stop();<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>    }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span><a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    stopProcedureExecutor();<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span><a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    if (this.walManager != null) {<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      this.walManager.stop();<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>    }<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    if (this.fileSystemManager != null) {<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      this.fileSystemManager.stop();<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>    if (this.mpmHost != null) {<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      this.mpmHost.stop("server shutting down.");<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    }<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>    if (this.regionServerTracker != null) {<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      this.regionServerTracker.stop();<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    }<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  }<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span><a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  private void createProcedureExecutor() throws IOException {<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>    MasterProcedureEnv procEnv = new MasterProcedureEnv(this);<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    procedureStore =<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      new WALProcedureStore(conf, new MasterProcedureEnv.WALStoreLeaseRecovery(this));<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>    procedureStore.registerListener(new ProcedureStoreListener() {<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>      @Override<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>      public void abortProcess() {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>        abort("The Procedure Store lost the lease", null);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      }<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>    });<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>    MasterProcedureScheduler procedureScheduler = procEnv.getProcedureScheduler();<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>    procedureExecutor = new ProcedureExecutor&lt;&gt;(conf, procEnv, procedureStore, procedureScheduler);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    configurationManager.registerObserver(procEnv);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span><a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    int cpus = Runtime.getRuntime().availableProcessors();<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>    final int numThreads = conf.getInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, Math.max(<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>      (cpus &gt; 0 ? cpus / 4 : 0), MasterProcedureConstants.DEFAULT_MIN_MASTER_PROCEDURE_THREADS));<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>    final boolean abortOnCorruption =<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>      conf.getBoolean(MasterProcedureConstants.EXECUTOR_ABORT_ON_CORRUPTION,<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>        MasterProcedureConstants.DEFAULT_EXECUTOR_ABORT_ON_CORRUPTION);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>    procedureStore.start(numThreads);<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    // Just initialize it but do not start the workers, we will start the workers later by calling<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>    // startProcedureExecutor. See the javadoc for finishActiveMasterInitialization for more<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    // details.<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    procedureExecutor.init(numThreads, abortOnCorruption);<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>    procEnv.getRemoteDispatcher().start();<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>  }<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span><a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>  private void startProcedureExecutor() throws IOException {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>    procedureExecutor.startWorkers();<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>  }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>  /**<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>   * Turn on/off Snapshot Cleanup Chore<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>   *<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>   * @param on indicates whether Snapshot Cleanup Chore is to be run<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>   */<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>  void switchSnapshotCleanup(final boolean on, final boolean synchronous) {<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>    if (synchronous) {<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      synchronized (this.snapshotCleanerChore) {<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        switchSnapshotCleanup(on);<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      }<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>    } else {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      switchSnapshotCleanup(on);<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>  }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span><a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>  private void switchSnapshotCleanup(final boolean on) {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    try {<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>      snapshotCleanupTracker.setSnapshotCleanupEnabled(on);<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      if (on) {<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        if (!getChoreService().isChoreScheduled(this.snapshotCleanerChore)) {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>          getChoreService().scheduleChore(this.snapshotCleanerChore);<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>        }<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      } else {<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>        getChoreService().cancelChore(this.snapshotCleanerChore);<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      }<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>    } catch (KeeperException e) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>      LOG.error("Error updating snapshot cleanup mode to {}", on, e);<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    }<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>  }<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span><a name="line.1600"></a>
+<span class="sourceLineNo">1601</span><a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>  private void stopProcedureExecutor() {<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    if (procedureExecutor != null) {<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      configurationManager.deregisterObserver(procedureExecutor.getEnvironment());<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      procedureExecutor.getEnvironment().getRemoteDispatcher().stop();<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>      procedureExecutor.stop();<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      procedureExecutor.join();<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      procedureExecutor = null;<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>    }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span><a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>    if (procedureStore != null) {<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>      procedureStore.stop(isAborted());<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>      procedureStore = null;<a name="line.1613"></a>
 <span class="sourceLineNo">1614</span>    }<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span><a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    if (procedureStore != null) {<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>      procedureStore.stop(isAborted());<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>      procedureStore = null;<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    }<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>  }<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span><a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>  private void stopChores() {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    ChoreService choreService = getChoreService();<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    if (choreService != null) {<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      choreService.cancelChore(this.expiredMobFileCleanerChore);<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>      choreService.cancelChore(this.mobCompactChore);<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>      choreService.cancelChore(this.balancerChore);<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>      choreService.cancelChore(this.normalizerChore);<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>      choreService.cancelChore(this.clusterStatusChore);<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      choreService.cancelChore(this.catalogJanitorChore);<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>      choreService.cancelChore(this.clusterStatusPublisherChore);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      choreService.cancelChore(this.snapshotQuotaChore);<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      choreService.cancelChore(this.logCleaner);<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>      choreService.cancelChore(this.hfileCleaner);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      choreService.cancelChore(this.replicationBarrierCleaner);<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      choreService.cancelChore(this.snapshotCleanerChore);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>      choreService.cancelChore(this.hbckChore);<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    }<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>  }<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span><a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>  /**<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>   * @return Get remote side's InetAddress<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>   */<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>  InetAddress getRemoteInetAddress(final int port,<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      final long serverStartCode) throws UnknownHostException {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>    // Do it out here in its own little method so can fake an address when<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>    // mocking up in tests.<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>    InetAddress ia = RpcServer.getRemoteIp();<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span><a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    // The call could be from the local regionserver,<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    // in which case, there is no remote address.<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    if (ia == null &amp;&amp; serverStartCode == startcode) {<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>      InetSocketAddress isa = rpcServices.getSocketAddress();<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>      if (isa != null &amp;&amp; isa.getPort() == port) {<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>        ia = isa.getAddress();<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      }<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    return ia;<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>  }<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span><a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>  /**<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>   * @return Maximum time we should run balancer for<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>   */<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>  private int getMaxBalancingTime() {<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>    int maxBalancingTime = getConfiguration().getInt(HConstants.HBASE_BALANCER_MAX_BALANCING, -1);<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>    if (maxBalancingTime == -1) {<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      // if max balancing time isn't set, defaulting it to period time<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      maxBalancingTime = getConfiguration().getInt(HConstants.HBASE_BALANCER_PERIOD,<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>        HConstants.DEFAULT_HBASE_BALANCER_PERIOD);<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>    }<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>    return maxBalancingTime;<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  }<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span><a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>  /**<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>   * @return Maximum number of regions in transition<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>   */<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>  private int getMaxRegionsInTransition() {<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>    int numRegions = this.assignmentManager.getRegionStates().getRegionAssignments().size();<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>    return Math.max((int) Math.floor(numRegions * this.maxRitPercent), 1);<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>  }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>  /**<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>   * It first sleep to the next balance plan start time. Meanwhile, throttling by the max<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>   * number regions in transition to protect availability.<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>   * @param nextBalanceStartTime The next balance plan start time<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>   * @param maxRegionsInTransition max number of regions in transition<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>   * @param cutoffTime when to exit balancer<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>   */<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>  private void balanceThrottling(long nextBalanceStartTime, int maxRegionsInTransition,<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      long cutoffTime) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>    boolean interrupted = false;<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span><a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>    // Sleep to next balance plan start time<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>    // But if there are zero regions in transition, it can skip sleep to speed up.<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>    while (!interrupted &amp;&amp; System.currentTimeMillis() &lt; nextBalanceStartTime<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        &amp;&amp; this.assignmentManager.getRegionStates().hasRegionsInTransition()) {<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      try {<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>        Thread.sleep(100);<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>      } catch (InterruptedException ie) {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>        interrupted = true;<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>      }<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>    }<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span><a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>    // Throttling by max number regions in transition<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    while (!interrupted<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>        &amp;&amp; maxRegionsInTransition &gt; 0<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>        &amp;&amp; this.assignmentManager.getRegionStates().getRegionsInTransitionCount()<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>        &gt;= maxRegionsInTransition &amp;&amp; System.currentTimeMillis() &lt;= cutoffTime) {<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>      try {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>        // sleep if the number of regions in transition exceeds the limit<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>        Thread.sleep(100);<a name="line.1711"></a>
... 22755 lines suppressed ...