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 2021/04/15 20:21:29 UTC

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

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 e56271b  Published site at 6cf4fdde61dcd59cf585b3368a71dc6af17c4498.
e56271b is described below

commit e56271baa700ce7d55e4871f006872326ad08813
Author: jenkins <bu...@apache.org>
AuthorDate: Thu Apr 15 20:21:11 2021 +0000

    Published site at 6cf4fdde61dcd59cf585b3368a71dc6af17c4498.
---
 acid-semantics.html                                |    2 +-
 apache_hbase_reference_guide.pdf                   |    4 +-
 book.html                                          |    2 +-
 bulk-loads.html                                    |    2 +-
 checkstyle-aggregate.html                          |  194 +-
 coc.html                                           |    2 +-
 dependencies.html                                  |    2 +-
 dependency-convergence.html                        |    2 +-
 dependency-info.html                               |    2 +-
 dependency-management.html                         |    2 +-
 devapidocs/index-all.html                          |    4 +
 .../apache/hadoop/hbase/backup/package-tree.html   |    2 +-
 .../apache/hadoop/hbase/chaos/package-tree.html    |    2 +-
 .../apache/hadoop/hbase/client/package-tree.html   |   24 +-
 .../hadoop/hbase/coprocessor/package-tree.html     |    2 +-
 .../apache/hadoop/hbase/filter/package-tree.html   |    8 +-
 .../hadoop/hbase/hbtop/field/package-tree.html     |    2 +-
 ...ttpServer.QuotingInputFilter.RequestQuoter.html |   18 +-
 .../hbase/http/HttpServer.QuotingInputFilter.html  |   14 +-
 .../hadoop/hbase/http/HttpServer.StackServlet.html |    8 +-
 .../org/apache/hadoop/hbase/http/HttpServer.html   |  164 +-
 .../org/apache/hadoop/hbase/http/package-tree.html |    2 +-
 .../apache/hadoop/hbase/io/hfile/package-tree.html |    6 +-
 .../org/apache/hadoop/hbase/ipc/package-tree.html  |    4 +-
 .../hadoop/hbase/mapreduce/package-tree.html       |    4 +-
 .../master/HMaster.TableDescriptorGetter.html      |    4 +-
 .../org/apache/hadoop/hbase/master/HMaster.html    |  502 +-
 .../hbase/master/assignment/package-tree.html      |    2 +-
 .../hadoop/hbase/master/balancer/package-tree.html |    2 +-
 .../apache/hadoop/hbase/master/package-tree.html   |    8 +-
 .../hadoop/hbase/monitoring/package-tree.html      |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html      |   14 +-
 .../hadoop/hbase/procedure2/package-tree.html      |    2 +-
 .../hbase/procedure2/store/wal/package-tree.html   |    2 +-
 .../apache/hadoop/hbase/quotas/package-tree.html   |    4 +-
 .../hadoop/hbase/regionserver/package-tree.html    |   20 +-
 .../regionserver/querymatcher/package-tree.html    |    2 +-
 .../hbase/regionserver/wal/package-tree.html       |    2 +-
 .../hadoop/hbase/rest/model/package-tree.html      |    2 +-
 .../hadoop/hbase/security/access/package-tree.html |    6 +-
 .../apache/hadoop/hbase/security/package-tree.html |    2 +-
 .../apache/hadoop/hbase/thrift/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/util/package-tree.html |   10 +-
 .../org/apache/hadoop/hbase/wal/package-tree.html  |    2 +-
 .../hadoop/hbase/http/HttpServer.Builder.html      | 1860 ++---
 .../hadoop/hbase/http/HttpServer.ListenerInfo.html | 1860 ++---
 ...ttpServer.QuotingInputFilter.RequestQuoter.html | 1860 ++---
 .../hbase/http/HttpServer.QuotingInputFilter.html  | 1860 ++---
 .../hadoop/hbase/http/HttpServer.StackServlet.html | 1860 ++---
 .../org/apache/hadoop/hbase/http/HttpServer.html   | 1860 ++---
 .../master/HMaster.TableDescriptorGetter.html      | 7487 ++++++++++----------
 .../org/apache/hadoop/hbase/master/HMaster.html    | 7487 ++++++++++----------
 ...ochasticLoadBalancer.CPRequestCostFunction.html |    2 +-
 ...dBalancer.CostFromRegionLoadAsRateFunction.html |    2 +-
 ...ticLoadBalancer.CostFromRegionLoadFunction.html |    2 +-
 .../StochasticLoadBalancer.CostFunction.html       |    2 +-
 ...sticLoadBalancer.LocalityBasedCostFunction.html |    2 +-
 ...asticLoadBalancer.MemStoreSizeCostFunction.html |    2 +-
 .../StochasticLoadBalancer.MoveCostFunction.html   |    2 +-
 ...alancer.PrimaryRegionCountSkewCostFunction.html |    2 +-
 ...asticLoadBalancer.RackLocalityCostFunction.html |    2 +-
 ...asticLoadBalancer.RandomCandidateGenerator.html |    2 +-
 ...hasticLoadBalancer.ReadRequestCostFunction.html |    2 +-
 ...icLoadBalancer.RegionCountSkewCostFunction.html |    2 +-
 ...LoadBalancer.RegionReplicaHostCostFunction.html |    2 +-
 ...lancer.RegionReplicaRackCandidateGenerator.html |    2 +-
 ...LoadBalancer.RegionReplicaRackCostFunction.html |    2 +-
 ...ticLoadBalancer.ServerLocalityCostFunction.html |    2 +-
 ...ochasticLoadBalancer.StoreFileCostFunction.html |    2 +-
 ...ochasticLoadBalancer.TableSkewCostFunction.html |    2 +-
 ...asticLoadBalancer.WriteRequestCostFunction.html |    2 +-
 .../master/balancer/StochasticLoadBalancer.html    |    2 +-
 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/index-all.html                      |    4 +
 .../apache/hadoop/hbase/backup/package-tree.html   |    2 +-
 .../hadoop/hbase/chaos/actions/package-tree.html   |    2 +-
 .../TestHttpServer.DummyFilterInitializer.html     |    6 +-
 .../http/TestHttpServer.DummyServletFilter.html    |   10 +-
 .../hbase/http/TestHttpServer.EchoMapServlet.html  |    6 +-
 .../hbase/http/TestHttpServer.EchoServlet.html     |    6 +-
 .../http/TestHttpServer.HtmlContentServlet.html    |    6 +-
 .../http/TestHttpServer.LongHeaderServlet.html     |    6 +-
 .../http/TestHttpServer.MyGroupsProvider.html      |   10 +-
 .../apache/hadoop/hbase/http/TestHttpServer.html   |  126 +-
 .../apache/hadoop/hbase/io/hfile/package-tree.html |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html      |   18 +-
 .../hadoop/hbase/procedure2/package-tree.html      |    2 +-
 .../hadoop/hbase/regionserver/package-tree.html    |    6 +-
 .../org/apache/hadoop/hbase/test/package-tree.html |    4 +-
 .../org/apache/hadoop/hbase/wal/package-tree.html  |    2 +-
 .../TestHttpServer.DummyFilterInitializer.html     | 1253 ++--
 .../http/TestHttpServer.DummyServletFilter.html    | 1253 ++--
 .../hbase/http/TestHttpServer.EchoMapServlet.html  | 1253 ++--
 .../hbase/http/TestHttpServer.EchoServlet.html     | 1253 ++--
 .../http/TestHttpServer.HtmlContentServlet.html    | 1253 ++--
 .../http/TestHttpServer.LongHeaderServlet.html     | 1253 ++--
 .../http/TestHttpServer.MyGroupsProvider.html      | 1253 ++--
 .../apache/hadoop/hbase/http/TestHttpServer.html   | 1253 ++--
 117 files changed, 19109 insertions(+), 18415 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index ad76e09..861d197 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -467,7 +467,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-15</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 1c1b175..b76f485 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.3, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20210413200717+00'00')
-/CreationDate (D:20210413201956+00'00')
+/ModDate (D:20210415200729+00'00')
+/CreationDate (D:20210415201917+00'00')
 >>
 endobj
 2 0 obj
diff --git a/book.html b/book.html
index ddb78d0..5be0df5 100644
--- a/book.html
+++ b/book.html
@@ -46121,7 +46121,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 2021-04-13 20:07:17 UTC
+Last updated 2021-04-15 20:07:29 UTC
 </div>
 </div>
 <link rel="stylesheet" href="./coderay-asciidoctor.css">
diff --git a/bulk-loads.html b/bulk-loads.html
index 3c13948..c6c0897 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -172,7 +172,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-15</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 f45e9a7..e82f442 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -27250,37 +27250,37 @@
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' has incorrect indentation level 8, expected level should be 6.</td>
-<td>1038</td></tr>
+<td>1056</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' child has incorrect indentation level 12, expected level should be 8.</td>
-<td>1040</td></tr>
+<td>1058</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for rcurly' has incorrect indentation level 8, expected level should be 6.</td>
-<td>1042</td></tr>
+<td>1060</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>1043</td></tr>
+<td>1061</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
-<td>1043</td></tr>
+<td>1061</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>1045</td></tr></table></div>
+<td>1063</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.http.HttpServerFunctionalTest.java">org/apache/hadoop/hbase/http/HttpServerFunctionalTest.java</h3>
 <table border="0" class="table table-striped">
@@ -37987,541 +37987,541 @@
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
-<td>582</td></tr>
+<td>581</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>736</td></tr>
+<td>735</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 317 lines (max allowed is 150).</td>
-<td>795</td></tr>
+<td>794</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
-<td>1363</td></tr>
+<td>1362</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
-<td>1470</td></tr>
+<td>1469</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>1641</td></tr>
+<td>1640</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>1696</td></tr>
+<td>1695</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>1890</td></tr>
+<td>1889</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>1901</td></tr>
+<td>1900</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>1903</td></tr>
+<td>1902</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>1904</td></tr>
+<td>1903</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>1907</td></tr>
+<td>1906</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>1908</td></tr>
+<td>1907</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>1910</td></tr>
+<td>1909</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>1912</td></tr>
+<td>1911</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1913</td></tr>
+<td>1912</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>1914</td></tr>
+<td>1913</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 116).</td>
-<td>1942</td></tr>
+<td>1941</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
-<td>1944</td></tr>
+<td>1943</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>2153</td></tr>
+<td>2152</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>2155</td></tr>
+<td>2154</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>2157</td></tr>
+<td>2156</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>2163</td></tr>
+<td>2162</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>2164</td></tr>
+<td>2163</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>2166</td></tr>
+<td>2165</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>2168</td></tr>
+<td>2167</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>2169</td></tr>
+<td>2168</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>2171</td></tr>
+<td>2170</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>2173</td></tr>
+<td>2172</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>2174</td></tr>
+<td>2173</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2175</td></tr>
+<td>2174</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>2188</td></tr>
+<td>2187</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>2190</td></tr>
+<td>2189</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>2192</td></tr>
+<td>2191</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>2193</td></tr>
+<td>2192</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>2194</td></tr>
+<td>2193</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>2196</td></tr>
+<td>2195</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>2198</td></tr>
+<td>2197</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>2199</td></tr>
+<td>2198</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>2201</td></tr>
+<td>2200</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>2203</td></tr>
+<td>2202</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>2204</td></tr>
+<td>2203</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2205</td></tr>
+<td>2204</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>2288</td></tr>
+<td>2287</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>2290</td></tr>
+<td>2289</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>2296</td></tr>
+<td>2295</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2297</td></tr>
+<td>2296</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 10, expected level should be one of the following: 12, 14.</td>
-<td>2298</td></tr>
+<td>2297</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 16, expected level should be one of the following: 18, 20.</td>
-<td>2305</td></tr>
+<td>2304</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 14, expected level should be one of the following: 16, 18.</td>
-<td>2307</td></tr>
+<td>2306</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 12, expected level should be one of the following: 14, 16.</td>
-<td>2308</td></tr>
+<td>2307</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 10, expected level should be one of the following: 12, 14.</td>
-<td>2309</td></tr>
+<td>2308</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>2310</td></tr>
+<td>2309</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 10, expected level should be one of the following: 12, 14.</td>
-<td>2311</td></tr>
+<td>2310</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2312</td></tr>
+<td>2311</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>2314</td></tr>
+<td>2313</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>2321</td></tr>
+<td>2320</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>2322</td></tr>
+<td>2321</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>2324</td></tr>
+<td>2323</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>2326</td></tr>
+<td>2325</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>2327</td></tr>
+<td>2326</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>2329</td></tr>
+<td>2328</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>2331</td></tr>
+<td>2330</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>2332</td></tr>
+<td>2331</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2333</td></tr>
+<td>2332</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>2343</td></tr>
+<td>2342</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>2345</td></tr>
+<td>2344</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>2347</td></tr>
+<td>2346</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>2357</td></tr>
+<td>2356</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>2358</td></tr>
+<td>2357</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>2360</td></tr>
+<td>2359</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>2362</td></tr>
+<td>2361</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>2363</td></tr>
+<td>2362</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>2365</td></tr>
+<td>2364</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>2367</td></tr>
+<td>2366</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>2368</td></tr>
+<td>2367</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2369</td></tr>
+<td>2368</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>2432</td></tr>
+<td>2431</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>2436</td></tr>
+<td>2435</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>2438</td></tr>
+<td>2437</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>2440</td></tr>
+<td>2439</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>2441</td></tr>
+<td>2440</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2442</td></tr>
+<td>2441</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>2876</td></tr>
+<td>2875</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>3052</td></tr>
+<td>3051</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>3054</td></tr>
+<td>3053</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>3166</td></tr>
+<td>3165</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
-<td>3196</td></tr>
+<td>3195</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>3208</td></tr>
+<td>3207</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>3237</td></tr></table></div>
+<td>3236</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">
@@ -75367,7 +75367,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-15</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/coc.html b/coc.html
index bfe417c..cc40506 100644
--- a/coc.html
+++ b/coc.html
@@ -241,7 +241,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-15</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 bc0bebf..23ebd38 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -313,7 +313,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-15</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 75fca19..25e9920 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -824,7 +824,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-15</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 33b0f98..1f43e77 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -194,7 +194,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-15</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 f3c8969..1b19b7c 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -1040,7 +1040,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-04-15</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/index-all.html b/devapidocs/index-all.html
index cd90236..efbc03f 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -7809,6 +7809,10 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#buildGrantRequest-org.apache.hadoop.hbase.security.access.UserPermission-boolean-">buildGrantRequest(UserPermission, boolean)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access">ShadedAccessControlUtil</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/http/HttpServer.html#buildGzipHandler-org.apache.hbase.thirdparty.org.eclipse.jetty.server.Handler-">buildGzipHandler(Handler)</a></span> - Static method in class org.apache.hadoop.hbase.http.<a href="org/apache/hadoop/hbase/http/HttpServer.html" title="class in org.apache.hadoop.hbase.http">HttpServer</a></dt>
+<dd>
+<div class="block">Construct and configure an instance of <code>GzipHandler</code>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html#buildHasUserPermissionsRequest-java.lang.String-java.util.List-">buildHasUserPermissionsRequest(String, List&lt;Permission&gt;)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.html" title="class in org.apache.hadoop.hbase.security.access">ShadedAccessControlUtil</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#buildHoldingCleanupTracker--">buildHoldingCleanupTracker()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 761b65d..a704be6 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -166,8 +166,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html b/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html
index 4dc5d8a..96e1d32 100644
--- a/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/chaos/package-tree.html
@@ -103,8 +103,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.chaos.<a href="../../../../../org/apache/hadoop/hbase/chaos/ChaosService.ChaosServiceName.html" title="enum in org.apache.hadoop.hbase.chaos"><span class="typeNameLink">ChaosService.ChaosServiceName</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.chaos.<a href="../../../../../org/apache/hadoop/hbase/chaos/ChaosService.ExecutorAction.html" title="enum in org.apache.hadoop.hbase.chaos"><span class="typeNameLink">ChaosService.ExecutorAction</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.chaos.<a href="../../../../../org/apache/hadoop/hbase/chaos/ChaosService.ChaosServiceName.html" title="enum in org.apache.hadoop.hbase.chaos"><span class="typeNameLink">ChaosService.ChaosServiceName</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 02cd0cc..626bc87 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -454,24 +454,24 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CatalogReplicaMode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CatalogReplicaMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ServerType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ServerType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.FilterByOperator.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.FilterByOperator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ServerType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ServerType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.FilterByOperator.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.FilterByOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CatalogReplicaMode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CatalogReplicaMode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
index e831a2a..d5d2be0 100644
--- a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
@@ -176,8 +176,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 0754bc1..ddc4554 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -190,13 +190,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
index 33940b4..a951142 100644
--- a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
@@ -92,8 +92,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/Field.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">Field</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/FieldValueType.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">FieldValueType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/Field.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">Field</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.RequestQuoter.html b/devapidocs/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.RequestQuoter.html
index 2e91c50..6f51378 100644
--- a/devapidocs/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.RequestQuoter.html
+++ b/devapidocs/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.RequestQuoter.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html#line.1375">HttpServer.QuotingInputFilter.RequestQuoter</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html#line.1393">HttpServer.QuotingInputFilter.RequestQuoter</a>
 extends javax.servlet.http.HttpServletRequestWrapper</pre>
 </li>
 </ul>
@@ -273,7 +273,7 @@ extends javax.servlet.http.HttpServletRequestWrapper</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>rawRequest</h4>
-<pre>private final&nbsp;javax.servlet.http.HttpServletRequest <a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.RequestQuoter.html#line.1376">rawRequest</a></pre>
+<pre>private final&nbsp;javax.servlet.http.HttpServletRequest <a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.RequestQuoter.html#line.1394">rawRequest</a></pre>
 </li>
 </ul>
 </li>
@@ -290,7 +290,7 @@ extends javax.servlet.http.HttpServletRequestWrapper</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RequestQuoter</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.RequestQuoter.html#line.1377">RequestQuoter</a>(javax.servlet.http.HttpServletRequest&nbsp;rawRequest)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.RequestQuoter.html#line.1395">RequestQuoter</a>(javax.servlet.http.HttpServletRequest&nbsp;rawRequest)</pre>
 </li>
 </ul>
 </li>
@@ -307,7 +307,7 @@ extends javax.servlet.http.HttpServletRequestWrapper</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getParameterNames</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</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/http/HttpServer.QuotingInputFilter.RequestQuoter.html#line.1386">getParameterNames</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Enumeration.html?is-external=true" title="class or interface in java.util">Enumeration</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/http/HttpServer.QuotingInputFilter.RequestQuoter.html#line.1404">getParameterNames</a>()</pre>
 <div class="block">Return the set of parameter names, quoting each name.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -323,7 +323,7 @@ extends javax.servlet.http.HttpServletRequestWrapper</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getParameter</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/http/HttpServer.QuotingInputFilter.RequestQuoter.html#line.1406">getParameter</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public&nbsp;<a href="https://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/http/HttpServer.QuotingInputFilter.RequestQuoter.html#line.1424">getParameter</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Unquote the name and quote the value.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -339,7 +339,7 @@ extends javax.servlet.http.HttpServletRequestWrapper</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getParameterValues</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/http/HttpServer.QuotingInputFilter.RequestQuoter.html#line.1412">getParameterValues</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public&nbsp;<a href="https://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/http/HttpServer.QuotingInputFilter.RequestQuoter.html#line.1430">getParameterValues</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>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getParameterValues</code>&nbsp;in interface&nbsp;<code>javax.servlet.ServletRequest</code></dd>
@@ -354,7 +354,7 @@ extends javax.servlet.http.HttpServletRequestWrapper</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getParameterMap</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="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/apac [...]
+<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="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/apac [...]
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getParameterMap</code>&nbsp;in interface&nbsp;<code>javax.servlet.ServletRequest</code></dd>
@@ -369,7 +369,7 @@ extends javax.servlet.http.HttpServletRequestWrapper</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getRequestURL</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuffer.html?is-external=true" title="class or interface in java.lang">StringBuffer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.RequestQuoter.html#line.1445">getRequestURL</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuffer.html?is-external=true" title="class or interface in java.lang">StringBuffer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.RequestQuoter.html#line.1463">getRequestURL</a>()</pre>
 <div class="block">Quote the url so that users specifying the HOST HTTP header
  can't inject attacks.</div>
 <dl>
@@ -386,7 +386,7 @@ extends javax.servlet.http.HttpServletRequestWrapper</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getServerName</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/http/HttpServer.QuotingInputFilter.RequestQuoter.html#line.1455">getServerName</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/http/HttpServer.QuotingInputFilter.RequestQuoter.html#line.1473">getServerName</a>()</pre>
 <div class="block">Quote the server name so that users specifying the HOST HTTP header
  can't inject attacks.</div>
 <dl>
diff --git a/devapidocs/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html b/devapidocs/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html
index 52b15e2..0c60d2e 100644
--- a/devapidocs/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html
+++ b/devapidocs/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.LimitedPrivate(value="Configuration")
-public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1372">HttpServer.QuotingInputFilter</a>
+public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1390">HttpServer.QuotingInputFilter</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 javax.servlet.Filter</pre>
 <div class="block">A Servlet input filter that quotes all HTML active characters in the
@@ -246,7 +246,7 @@ implements javax.servlet.Filter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>config</h4>
-<pre>private&nbsp;javax.servlet.FilterConfig <a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html#line.1373">config</a></pre>
+<pre>private&nbsp;javax.servlet.FilterConfig <a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html#line.1391">config</a></pre>
 </li>
 </ul>
 </li>
@@ -263,7 +263,7 @@ implements javax.servlet.Filter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>QuotingInputFilter</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html#line.1372">QuotingInputFilter</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html#line.1390">QuotingInputFilter</a>()</pre>
 </li>
 </ul>
 </li>
@@ -280,7 +280,7 @@ implements javax.servlet.Filter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html#line.1461">init</a>(javax.servlet.FilterConfig&nbsp;config)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html#line.1479">init</a>(javax.servlet.FilterConfig&nbsp;config)
           throws javax.servlet.ServletException</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -296,7 +296,7 @@ implements javax.servlet.Filter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>destroy</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html#line.1466">destroy</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html#line.1484">destroy</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>destroy</code>&nbsp;in interface&nbsp;<code>javax.servlet.Filter</code></dd>
@@ -309,7 +309,7 @@ implements javax.servlet.Filter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>doFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html#line.1470">doFilter</a>(javax.servlet.ServletRequest&nbsp;request,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html#line.1488">doFilter</a>(javax.servlet.ServletRequest&nbsp;request,
                      javax.servlet.ServletResponse&nbsp;response,
                      javax.servlet.FilterChain&nbsp;chain)
               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>,
@@ -329,7 +329,7 @@ implements javax.servlet.Filter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>inferMimeType</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html#line.1497">inferMimeType</a>(javax.servlet.ServletRequest&nbsp;request)</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.html#line.1515">inferMimeType</a>(javax.servlet.ServletRequest&nbsp;request)</pre>
 <div class="block">Infer the mime type for the response based on the extension of the request
  URI. Returns null if unknown.</div>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/http/HttpServer.StackServlet.html b/devapidocs/org/apache/hadoop/hbase/http/HttpServer.StackServlet.html
index 550d44d..dbd162e 100644
--- a/devapidocs/org/apache/hadoop/hbase/http/HttpServer.StackServlet.html
+++ b/devapidocs/org/apache/hadoop/hbase/http/HttpServer.StackServlet.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1346">HttpServer.StackServlet</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1364">HttpServer.StackServlet</a>
 extends javax.servlet.http.HttpServlet</pre>
 <div class="block">A very simple servlet to serve up a text representation of the current
  stack traces. It both returns the stacks to the caller and logs them.
@@ -238,7 +238,7 @@ extends javax.servlet.http.HttpServlet</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>serialVersionUID</h4>
-<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.StackServlet.html#line.1347">serialVersionUID</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.StackServlet.html#line.1365">serialVersionUID</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.http.HttpServer.StackServlet.serialVersionUID">Constant Field Values</a></dd>
@@ -259,7 +259,7 @@ extends javax.servlet.http.HttpServlet</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StackServlet</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.StackServlet.html#line.1346">StackServlet</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.StackServlet.html#line.1364">StackServlet</a>()</pre>
 </li>
 </ul>
 </li>
@@ -276,7 +276,7 @@ extends javax.servlet.http.HttpServlet</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>doGet</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.StackServlet.html#line.1350">doGet</a>(javax.servlet.http.HttpServletRequest&nbsp;request,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.StackServlet.html#line.1368">doGet</a>(javax.servlet.http.HttpServletRequest&nbsp;request,
                   javax.servlet.http.HttpServletResponse&nbsp;response)
            throws javax.servlet.ServletException,
                   <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>
diff --git a/devapidocs/org/apache/hadoop/hbase/http/HttpServer.html b/devapidocs/org/apache/hadoop/hbase/http/HttpServer.html
index 1f20e61..958987e 100644
--- a/devapidocs/org/apache/hadoop/hbase/http/HttpServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/http/HttpServer.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":9,"i10":10,"i11":10,"i12":10,"i13":9,"i14":9,"i15":10,"i16":10,"i17":9,"i18":10,"i19":42,"i20":10,"i21":10,"i22":10,"i23":10,"i24":9,"i25":9,"i26":10,"i27":10,"i28":10,"i29":9,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":9,"i41":9};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":9,"i10":10,"i11":10,"i12":10,"i13":9,"i14":9,"i15":9,"i16":10,"i17":10,"i18":9,"i19":10,"i20":42,"i21":10,"i22":10,"i23":10,"i24":10,"i25":9,"i26":9,"i27":10,"i28":10,"i29":10,"i30":9,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":9,"i42":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -541,13 +541,19 @@ implements <a href="../../../../../org/apache/hadoop/hbase/http/FilterContainer.
 </td>
 </tr>
 <tr id="i13" class="rowColor">
+<td class="colFirst"><code>static org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.gzip.GzipHandler</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#buildGzipHandler-org.apache.hbase.thirdparty.org.eclipse.jetty.server.Handler-">buildGzipHandler</a></span>(org.apache.hbase.thirdparty.org.eclipse.jetty.server.Handler&nbsp;wrapped)</code>
+<div class="block">Construct and configure an instance of <code>GzipHandler</code>.</div>
+</td>
+</tr>
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>private static org.apache.hbase.thirdparty.org.eclipse.jetty.webapp.WebAppContext</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#createWebAppContext-java.lang.String-org.apache.hadoop.conf.Configuration-org.apache.hadoop.security.authorize.AccessControlList-java.lang.String-">createWebAppContext</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                    org.apache.hadoop.conf.Configuration&nbsp;conf,
                    org.apache.hadoop.security.authorize.AccessControlList&nbsp;adminsAcl,
                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;appDir)</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#defineFilter-org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletContextHandler-java.lang.String-java.lang.String-java.util.Map-java.lang.String:A-">defineFilter</a></span>(org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletContextHandler&nbsp;handler,
             <a href="https://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,
@@ -557,25 +563,25 @@ implements <a href="../../../../../org/apache/hadoop/hbase/http/FilterContainer.
 <div class="block">Define a filter for a context and set up default url mappings.</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#getAttribute-java.lang.String-">getAttribute</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
 <div class="block">Get the value in the webapp context.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#getConnectorAddress-int-">getConnectorAddress</a></span>(int&nbsp;index)</code>
 <div class="block">Get the address that corresponds to a particular connector.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/http/FilterInitializer.html" title="class in org.apache.hadoop.hbase.http">FilterInitializer</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#getFilterInitializers-org.apache.hadoop.conf.Configuration-">getFilterInitializers</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <div class="block">Get an array of FilterConfiguration specified in the conf</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#getOrEmptyString-org.apache.hadoop.conf.Configuration-java.lang.String-">getOrEmptyString</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</code>
@@ -583,7 +589,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/http/FilterContainer.
  zero length.</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#getPort--">getPort</a></span>()</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -591,33 +597,33 @@ implements <a href="../../../../../org/apache/hadoop/hbase/http/FilterContainer.
 </div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hbase.thirdparty.org.eclipse.jetty.server.ServerConnector&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#getServerConnectors--">getServerConnectors</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>org.apache.hbase.thirdparty.org.eclipse.jetty.webapp.WebAppContext</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#getWebAppContext--">getWebAppContext</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#getWebAppsPath-java.lang.String-">getWebAppsPath</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;appName)</code>&nbsp;</td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#getWebAppsPath-java.lang.String-java.lang.String-">getWebAppsPath</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;webapps,
               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;appName)</code>
 <div class="block">Get the pathname to the webapps files.</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#hasAdministratorAccess-org.apache.hadoop.conf.Configuration-org.apache.hadoop.security.authorize.AccessControlList-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">hasAdministratorAccess</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                       org.apache.hadoop.security.authorize.AccessControlList&nbsp;acl,
                       javax.servlet.http.HttpServletRequest&nbsp;request,
                       javax.servlet.http.HttpServletResponse&nbsp;response)</code>&nbsp;</td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#hasAdministratorAccess-javax.servlet.ServletContext-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">hasAdministratorAccess</a></span>(javax.servlet.ServletContext&nbsp;servletContext,
                       javax.servlet.http.HttpServletRequest&nbsp;request,
@@ -626,7 +632,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/http/FilterContainer.
  it isn't the case, response will be modified to send an error to the user.</div>
 </td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#initializeWebServer-java.lang.String-java.lang.String-org.apache.hadoop.conf.Configuration-java.lang.String:A-org.apache.hadoop.hbase.http.HttpServer.Builder-">initializeWebServer</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;hostName,
@@ -634,7 +640,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/http/FilterContainer.
                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;pathSpecs,
                    <a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.Builder.html" title="class in org.apache.hadoop.hbase.http">HttpServer.Builder</a>&nbsp;b)</code>&nbsp;</td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#initSpnego-org.apache.hadoop.conf.Configuration-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">initSpnego</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;hostName,
@@ -643,13 +649,13 @@ implements <a href="../../../../../org/apache/hadoop/hbase/http/FilterContainer.
           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;kerberosNameRuleKey,
           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;signatureSecretKeyFileKey)</code>&nbsp;</td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#isAlive--">isAlive</a></span>()</code>
 <div class="block">Test for the availability of the web server</div>
 </td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#isInstrumentationAccessAllowed-javax.servlet.ServletContext-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">isInstrumentationAccessAllowed</a></span>(javax.servlet.ServletContext&nbsp;servletContext,
                               javax.servlet.http.HttpServletRequest&nbsp;request,
@@ -657,69 +663,69 @@ implements <a href="../../../../../org/apache/hadoop/hbase/http/FilterContainer.
 <div class="block">Checks the user has privileges to access to instrumentation servlets.</div>
 </td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#isMissing-java.lang.String-">isMissing</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;value)</code>
 <div class="block">Returns true if the argument is non-null and not whitespace</div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#join--">join</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#loadListeners--">loadListeners</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#openListeners--">openListeners</a></span>()</code>
 <div class="block">Open the main listener for the server</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#setAttribute-java.lang.String-java.lang.Object-">setAttribute</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</code>
 <div class="block">Set a value in the webapp context.</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#setContextAttributes-org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletContextHandler-org.apache.hadoop.conf.Configuration-">setContextAttributes</a></span>(org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletContextHandler&nbsp;context,
                     org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#setThreads-int-int-">setThreads</a></span>(int&nbsp;min,
           int&nbsp;max)</code>
 <div class="block">Set the min, max number of worker threads (simultaneous connections).</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#start--">start</a></span>()</code>
 <div class="block">Start the server.</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#stop--">stop</a></span>()</code>
 <div class="block">stop the server</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#toString--">toString</a></span>()</code>
 <div class="block">Return the host and port of the HttpServer, if live</div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#userHasAdministratorAccess-org.apache.hadoop.security.authorize.AccessControlList-java.lang.String-">userHasAdministratorAccess</a></span>(org.apache.hadoop.security.authorize.AccessControlList&nbsp;acl,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;remoteUser)</code>&nbsp;</td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/http/HttpServer.html#userHasAdministratorAccess-javax.servlet.ServletContext-java.lang.String-">userHasAdministratorAccess</a></span>(javax.servlet.ServletContext&nbsp;servletContext,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;remoteUser)</code>
@@ -1443,7 +1449,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeWebServer</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.580">initializeWebServer</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>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.581">initializeWebServer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;hostName,
                                  org.apache.hadoop.conf.Configuration&nbsp;conf,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;pathSpecs,
@@ -1463,7 +1469,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>addManagedListener</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.646">addManagedListener</a>(org.apache.hbase.thirdparty.org.eclipse.jetty.server.ServerConnector&nbsp;connector)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.647">addManagedListener</a>(org.apache.hbase.thirdparty.org.eclipse.jetty.server.ServerConnector&nbsp;connector)</pre>
 </li>
 </ul>
 <a name="createWebAppContext-java.lang.String-org.apache.hadoop.conf.Configuration-org.apache.hadoop.security.authorize.AccessControlList-java.lang.String-">
@@ -1472,19 +1478,37 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>createWebAppContext</h4>
-<pre>private static&nbsp;org.apache.hbase.thirdparty.org.eclipse.jetty.webapp.WebAppContext&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.650">createWebAppContext</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>private static&nbsp;org.apache.hbase.thirdparty.org.eclipse.jetty.webapp.WebAppContext&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.651">createWebAppContext</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,
                                                                                                       org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                                                       org.apache.hadoop.security.authorize.AccessControlList&nbsp;adminsAcl,
                                                                                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;appDir)</pre>
 </li>
 </ul>
+<a name="buildGzipHandler-org.apache.hbase.thirdparty.org.eclipse.jetty.server.Handler-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>buildGzipHandler</h4>
+<pre>public static&nbsp;org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.gzip.GzipHandler&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.677">buildGzipHandler</a>(org.apache.hbase.thirdparty.org.eclipse.jetty.server.Handler&nbsp;wrapped)</pre>
+<div class="block">Construct and configure an instance of <code>GzipHandler</code>. With complex
+ multi-<code>WebAppContext</code> configurations, it's easiest to apply this handler directly to the
+ instance of <code>Server</code> near the end of its configuration, something like
+ <pre>
+    Server server = new Server();
+    //...
+    server.setHandler(buildGzipHandler(server.getHandler()));
+    server.start();
+ </pre></div>
+</li>
+</ul>
 <a name="addNoCacheFilter-org.apache.hbase.thirdparty.org.eclipse.jetty.webapp.WebAppContext-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>addNoCacheFilter</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.665">addNoCacheFilter</a>(org.apache.hbase.thirdparty.org.eclipse.jetty.webapp.WebAppContext&nbsp;ctxt)</pre>
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.683">addNoCacheFilter</a>(org.apache.hbase.thirdparty.org.eclipse.jetty.webapp.WebAppContext&nbsp;ctxt)</pre>
 </li>
 </ul>
 <a name="getFilterInitializers-org.apache.hadoop.conf.Configuration-">
@@ -1493,7 +1517,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getFilterInitializers</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/http/FilterInitializer.html" title="class in org.apache.hadoop.hbase.http">FilterInitializer</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.671">getFilterInitializers</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/http/FilterInitializer.html" title="class in org.apache.hadoop.hbase.http">FilterInitializer</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.689">getFilterInitializers</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Get an array of FilterConfiguration specified in the conf</div>
 </li>
 </ul>
@@ -1503,7 +1527,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>addDefaultApps</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.692">addDefaultApps</a>(org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ContextHandlerCollection&nbsp;parent,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.710">addDefaultApps</a>(org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ContextHandlerCollection&nbsp;parent,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;appDir,
                               org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Add default apps.</div>
@@ -1519,7 +1543,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>setContextAttributes</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.724">setContextAttributes</a>(org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletContextHandler&nbsp;context,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.742">setContextAttributes</a>(org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletContextHandler&nbsp;context,
                                   org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
@@ -1529,7 +1553,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>addDefaultServlets</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.732">addDefaultServlets</a>(org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ContextHandlerCollection&nbsp;contexts,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.750">addDefaultServlets</a>(org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ContextHandlerCollection&nbsp;contexts,
                                   org.apache.hadoop.conf.Configuration&nbsp;conf)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Add default servlets.</div>
@@ -1545,7 +1569,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>setAttribute</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.778">setAttribute</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.796">setAttribute</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;value)</pre>
 <div class="block">Set a value in the webapp context. These values are available to the jsp
  pages as "application.getAttribute(name)".</div>
@@ -1562,7 +1586,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>addJerseyResourcePackage</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.787">addJerseyResourcePackage</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;packageName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.805">addJerseyResourcePackage</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;packageName,
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pathSpec)</pre>
 <div class="block">Add a Jersey resource package.</div>
 <dl>
@@ -1578,7 +1602,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>addUnprivilegedServlet</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.805">addUnprivilegedServlet</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.823">addUnprivilegedServlet</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pathSpec,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends javax.servlet.http.HttpServlet&gt;&nbsp;clazz)</pre>
 <div class="block">Adds a servlet in the server that any user can access. This method differs from
@@ -1598,7 +1622,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>addPrivilegedServlet</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.815">addPrivilegedServlet</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.833">addPrivilegedServlet</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pathSpec,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends javax.servlet.http.HttpServlet&gt;&nbsp;clazz)</pre>
 <div class="block">Adds a servlet in the server that only administrators can access. This method differs from
@@ -1612,7 +1636,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>addServletWithAuth</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.825">addServletWithAuth</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>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.843">addServletWithAuth</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pathSpec,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends javax.servlet.http.HttpServlet&gt;&nbsp;clazz,
                         boolean&nbsp;requireAuthz)</pre>
@@ -1627,7 +1651,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>addInternalServlet</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.844">addInternalServlet</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>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.862">addInternalServlet</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pathSpec,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends javax.servlet.http.HttpServlet&gt;&nbsp;clazz,
                         boolean&nbsp;requireAuthz)</pre>
@@ -1652,7 +1676,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>addFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.865">addFilter</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.883">addFilter</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;classname,
                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;parameters)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/http/FilterContainer.html#addFilter-java.lang.String-java.lang.String-java.util.Map-">FilterContainer</a></code></span></div>
@@ -1673,7 +1697,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>addGlobalFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.883">addGlobalFilter</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.901">addGlobalFilter</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;classname,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;parameters)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/http/FilterContainer.html#addGlobalFilter-java.lang.String-java.lang.String-java.util.Map-">FilterContainer</a></code></span></div>
@@ -1695,7 +1719,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>defineFilter</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.895">defineFilter</a>(org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletContextHandler&nbsp;handler,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.913">defineFilter</a>(org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.ServletContextHandler&nbsp;handler,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;classname,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;parameters,
@@ -1709,7 +1733,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>addFilterPathMapping</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.915">addFilterPathMapping</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;pathSpec,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.933">addFilterPathMapping</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;pathSpec,
                                     org.apache.hbase.thirdparty.org.eclipse.jetty.webapp.WebAppContext&nbsp;webAppCtx)</pre>
 <div class="block">Add the path spec to the filter path mapping.</div>
 <dl>
@@ -1725,7 +1749,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getAttribute</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.931">getAttribute</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.949">getAttribute</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Get the value in the webapp context.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1741,7 +1765,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getWebAppContext</h4>
-<pre>public&nbsp;org.apache.hbase.thirdparty.org.eclipse.jetty.webapp.WebAppContext&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.935">getWebAppContext</a>()</pre>
+<pre>public&nbsp;org.apache.hbase.thirdparty.org.eclipse.jetty.webapp.WebAppContext&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.953">getWebAppContext</a>()</pre>
 </li>
 </ul>
 <a name="getWebAppsPath-java.lang.String-">
@@ -1750,7 +1774,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getWebAppsPath</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/http/HttpServer.html#line.939">getWebAppsPath</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;appName)
+<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/http/HttpServer.html#line.957">getWebAppsPath</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;appName)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1764,7 +1788,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <ul class="blockList">
 <li class="blockList">
 <h4>getWebAppsPath</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.949">getWebAppsPath</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;webapps,
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.967">getWebAppsPath</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;webapps,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;appName)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</a></pre>
 <div class="block">Get the pathname to the webapps files.</div>
@@ -1785,7 +1809,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpSe
 <li class="blockList">
 <h4>getPort</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.967">getPort</a>()</pre>
+public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.985">getPort</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since 0.99.0</span></div>
 <div class="block">Get the port that the server is on</div>
 <dl>
@@ -1800,7 +1824,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnectorAddress</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.977">getConnectorAddress</a>(int&nbsp;index)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.995">getConnectorAddress</a>(int&nbsp;index)</pre>
 <div class="block">Get the address that corresponds to a particular connector.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1815,7 +1839,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>setThreads</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.997">setThreads</a>(int&nbsp;min,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1015">setThreads</a>(int&nbsp;min,
                        int&nbsp;max)</pre>
 <div class="block">Set the min, max number of worker threads (simultaneous connections).</div>
 </li>
@@ -1826,7 +1850,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>initSpnego</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1003">initSpnego</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1021">initSpnego</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;hostName,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;usernameConfKey,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;keytabConfKey,
@@ -1845,7 +1869,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>isMissing</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1052">isMissing</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;value)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1070">isMissing</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;value)</pre>
 <div class="block">Returns true if the argument is non-null and not whitespace</div>
 </li>
 </ul>
@@ -1855,7 +1879,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getOrEmptyString</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1063">getOrEmptyString</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1081">getOrEmptyString</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key)</pre>
 <div class="block">Extracts the value for the given key from the configuration of returns a string of
  zero length.</div>
@@ -1867,7 +1891,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1074">start</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1092">start</a>()
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Start the server. Does not wait for the server to start.</div>
 <dl>
@@ -1882,7 +1906,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>loadListeners</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1113">loadListeners</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1131">loadListeners</a>()</pre>
 </li>
 </ul>
 <a name="openListeners--">
@@ -1891,7 +1915,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>openListeners</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1123">openListeners</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1141">openListeners</a>()
             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Open the main listener for the server</div>
 <dl>
@@ -1906,7 +1930,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1160">stop</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1178">stop</a>()
           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">stop the server</div>
 <dl>
@@ -1921,7 +1945,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>addMultiException</h4>
-<pre>private&nbsp;org.apache.hbase.thirdparty.org.eclipse.jetty.util.MultiException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1201">addMultiException</a>(org.apache.hbase.thirdparty.org.eclipse.jetty.util.MultiException&nbsp;exception,
+<pre>private&nbsp;org.apache.hbase.thirdparty.org.eclipse.jetty.util.MultiException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1219">addMultiException</a>(org.apache.hbase.thirdparty.org.eclipse.jetty.util.MultiException&nbsp;exception,
                                                                                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;e)</pre>
 </li>
 </ul>
@@ -1931,7 +1955,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>join</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1209">join</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1227">join</a>()
           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1945,7 +1969,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>isAlive</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1217">isAlive</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1235">isAlive</a>()</pre>
 <div class="block">Test for the availability of the web server</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1959,7 +1983,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1226">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1244">toString</a>()</pre>
 <div class="block">Return the host and port of the HttpServer, if live</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -1975,7 +1999,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>isInstrumentationAccessAllowed</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1257">isInstrumentationAccessAllowed</a>(javax.servlet.ServletContext&nbsp;servletContext,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1275">isInstrumentationAccessAllowed</a>(javax.servlet.ServletContext&nbsp;servletContext,
                                                      javax.servlet.http.HttpServletRequest&nbsp;request,
                                                      javax.servlet.http.HttpServletResponse&nbsp;response)
                                               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>
@@ -2006,7 +2030,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>hasAdministratorAccess</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1283">hasAdministratorAccess</a>(javax.servlet.ServletContext&nbsp;servletContext,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1301">hasAdministratorAccess</a>(javax.servlet.ServletContext&nbsp;servletContext,
                                              javax.servlet.http.HttpServletRequest&nbsp;request,
                                              javax.servlet.http.HttpServletResponse&nbsp;response)
                                       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>
@@ -2030,7 +2054,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>hasAdministratorAccess</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1293">hasAdministratorAccess</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1311">hasAdministratorAccess</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                              org.apache.hadoop.security.authorize.AccessControlList&nbsp;acl,
                                              javax.servlet.http.HttpServletRequest&nbsp;request,
                                              javax.servlet.http.HttpServletResponse&nbsp;response)
@@ -2047,7 +2071,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockList">
 <li class="blockList">
 <h4>userHasAdministratorAccess</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1327">userHasAdministratorAccess</a>(javax.servlet.ServletContext&nbsp;servletContext,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1345">userHasAdministratorAccess</a>(javax.servlet.ServletContext&nbsp;servletContext,
                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;remoteUser)</pre>
 <div class="block">Get the admin ACLs from the given ServletContext and check if the given
  user is in the ACL.</div>
@@ -2067,7 +2091,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>userHasAdministratorAccess</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1334">userHasAdministratorAccess</a>(org.apache.hadoop.security.authorize.AccessControlList&nbsp;acl,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/http/HttpServer.html#line.1352">userHasAdministratorAccess</a>(org.apache.hadoop.security.authorize.AccessControlList&nbsp;acl,
                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;remoteUser)</pre>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
index d0bf6ab..657f27b 100644
--- a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
@@ -141,8 +141,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/HttpConfig.Policy.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">HttpConfig.Policy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Output.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Output</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Event.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Event</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Output.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Output</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 92d32b5..d98c6ea 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -305,12 +305,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/ReaderContext.ReaderType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">ReaderContext.ReaderType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/ReaderContext.ReaderType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">ReaderContext.ReaderType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 24a3b11..3139f55 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -356,9 +356,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index c533474..44142fa 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -300,11 +300,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/WALPlayer.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">WALPlayer.Counter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
index 4391a13..e2157f1 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.2232">HMaster.TableDescriptorGetter</a></pre>
+<pre>protected static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2231">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.2233">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.2232">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 3d74a0e..a939411 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
@@ -128,7 +128,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.LimitedPrivate(value="Tools")
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.250">HMaster</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.247">HMaster</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></pre>
 <div class="block">HMaster is the "master server" for HBase. An HBase cluster has one active master. If many masters
@@ -1566,7 +1566,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.252">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.249">LOG</a></pre>
 </li>
 </ul>
 <a name="MASTER">
@@ -1575,7 +1575,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.256">MASTER</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.253">MASTER</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.MASTER">Constant Field Values</a></dd>
@@ -1588,7 +1588,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>activeMasterManager</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ActiveMasterManager.html" title="class in org.apache.hadoop.hbase.master">ActiveMasterManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.259">activeMasterManager</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ActiveMasterManager.html" title="class in org.apache.hadoop.hbase.master">ActiveMasterManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.256">activeMasterManager</a></pre>
 </li>
 </ul>
 <a name="regionServerTracker">
@@ -1597,7 +1597,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServerTracker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.261">regionServerTracker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.258">regionServerTracker</a></pre>
 </li>
 </ul>
 <a name="drainingServerTracker">
@@ -1606,7 +1606,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>drainingServerTracker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/DrainingServerTracker.html" title="class in org.apache.hadoop.hbase.master">DrainingServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.263">drainingServerTracker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/DrainingServerTracker.html" title="class in org.apache.hadoop.hbase.master">DrainingServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.260">drainingServerTracker</a></pre>
 </li>
 </ul>
 <a name="loadBalancerTracker">
@@ -1615,7 +1615,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>loadBalancerTracker</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">LoadBalancerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.265">loadBalancerTracker</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">LoadBalancerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.262">loadBalancerTracker</a></pre>
 </li>
 </ul>
 <a name="metaLocationSyncer">
@@ -1624,7 +1624,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>metaLocationSyncer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/zksyncer/MetaLocationSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">MetaLocationSyncer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.267">metaLocationSyncer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/zksyncer/MetaLocationSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">MetaLocationSyncer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.264">metaLocationSyncer</a></pre>
 </li>
 </ul>
 <a name="masterAddressSyncer">
@@ -1634,7 +1634,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <li class="blockList">
 <h4>masterAddressSyncer</h4>
 <pre>@InterfaceAudience.Private
-<a href="../../../../../org/apache/hadoop/hbase/master/zksyncer/MasterAddressSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">MasterAddressSyncer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.270">masterAddressSyncer</a></pre>
+<a href="../../../../../org/apache/hadoop/hbase/master/zksyncer/MasterAddressSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">MasterAddressSyncer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.267">masterAddressSyncer</a></pre>
 </li>
 </ul>
 <a name="snapshotCleanupTracker">
@@ -1643,7 +1643,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotCleanupTracker</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/zookeeper/SnapshotCleanupTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">SnapshotCleanupTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.272">snapshotCleanupTracker</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/zookeeper/SnapshotCleanupTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">SnapshotCleanupTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.269">snapshotCleanupTracker</a></pre>
 </li>
 </ul>
 <a name="splitOrMergeTracker">
@@ -1652,7 +1652,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>splitOrMergeTracker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.master">SplitOrMergeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.275">splitOrMergeTracker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.master">SplitOrMergeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.272">splitOrMergeTracker</a></pre>
 </li>
 </ul>
 <a name="clusterSchemaService">
@@ -1661,7 +1661,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterSchemaService</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ClusterSchemaService.html" title="interface in org.apache.hadoop.hbase.master">ClusterSchemaService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.277">clusterSchemaService</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ClusterSchemaService.html" title="interface in org.apache.hadoop.hbase.master">ClusterSchemaService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.274">clusterSchemaService</a></pre>
 </li>
 </ul>
 <a name="HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS">
@@ -1670,7 +1670,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.279">HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.276">HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS">Constant Field Values</a></dd>
@@ -1683,7 +1683,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</h4>
-<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.281">DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.278">DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS">Constant Field Values</a></dd>
@@ -1696,7 +1696,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_MASTER_CLEANER_INTERVAL</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.283">HBASE_MASTER_CLEANER_INTERVAL</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.280">HBASE_MASTER_CLEANER_INTERVAL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.HBASE_MASTER_CLEANER_INTERVAL">Constant Field Values</a></dd>
@@ -1709,7 +1709,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HBASE_MASTER_CLEANER_INTERVAL</h4>
-<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.285">DEFAULT_HBASE_MASTER_CLEANER_INTERVAL</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.282">DEFAULT_HBASE_MASTER_CLEANER_INTERVAL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.DEFAULT_HBASE_MASTER_CLEANER_INTERVAL">Constant Field Values</a></dd>
@@ -1722,7 +1722,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>metricsMaster</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.288">metricsMaster</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.285">metricsMaster</a></pre>
 </li>
 </ul>
 <a name="fileSystemManager">
@@ -1731,7 +1731,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>fileSystemManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.290">fileSystemManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.287">fileSystemManager</a></pre>
 </li>
 </ul>
 <a name="walManager">
@@ -1740,7 +1740,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>walManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.291">walManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.288">walManager</a></pre>
 </li>
 </ul>
 <a name="splitWALManager">
@@ -1749,7 +1749,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>splitWALManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/SplitWALManager.html" title="class in org.apache.hadoop.hbase.master">SplitWALManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.298">splitWALManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/SplitWALManager.html" title="class in org.apache.hadoop.hbase.master">SplitWALManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.295">splitWALManager</a></pre>
 </li>
 </ul>
 <a name="serverManager">
@@ -1758,7 +1758,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>serverManager</h4>
-<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.301">serverManager</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.298">serverManager</a></pre>
 </li>
 </ul>
 <a name="assignmentManager">
@@ -1767,7 +1767,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>assignmentManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.304">assignmentManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.301">assignmentManager</a></pre>
 </li>
 </ul>
 <a name="metaRegionLocationCache">
@@ -1776,7 +1776,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>metaRegionLocationCache</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetaRegionLocationCache.html" title="class in org.apache.hadoop.hbase.master">MetaRegionLocationCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.311">metaRegionLocationCache</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetaRegionLocationCache.html" title="class in org.apache.hadoop.hbase.master">MetaRegionLocationCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.308">metaRegionLocationCache</a></pre>
 <div class="block">Cache for the meta region replica's locations. Also tracks their changes to avoid stale
  cache entries.</div>
 </li>
@@ -1787,7 +1787,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>rsGroupInfoManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.313">rsGroupInfoManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.310">rsGroupInfoManager</a></pre>
 </li>
 </ul>
 <a name="replicationPeerManager">
@@ -1796,7 +1796,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationPeerManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication">ReplicationPeerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.316">replicationPeerManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication">ReplicationPeerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.313">replicationPeerManager</a></pre>
 </li>
 </ul>
 <a name="syncReplicationReplayWALManager">
@@ -1805,7 +1805,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>syncReplicationReplayWALManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.html" title="class in org.apache.hadoop.hbase.master.replication">SyncReplicationReplayWALManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.318">syncReplicationReplayWALManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.html" title="class in org.apache.hadoop.hbase.master.replication">SyncReplicationReplayWALManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.315">syncReplicationReplayWALManager</a></pre>
 </li>
 </ul>
 <a name="rsFatals">
@@ -1814,7 +1814,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>rsFatals</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.html" title="class in org.apache.hadoop.hbase.monitoring">MemoryBoundedLogMessageBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.323">rsFatals</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.html" title="class in org.apache.hadoop.hbase.monitoring">MemoryBoundedLogMessageBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.320">rsFatals</a></pre>
 </li>
 </ul>
 <a name="activeMaster">
@@ -1823,7 +1823,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>activeMaster</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.326">activeMaster</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.323">activeMaster</a></pre>
 </li>
 </ul>
 <a name="initialized">
@@ -1832,7 +1832,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initialized</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a>&lt;?&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.329">initialized</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a>&lt;?&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.326">initialized</a></pre>
 </li>
 </ul>
 <a name="serviceStarted">
@@ -1841,7 +1841,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>serviceStarted</h4>
-<pre>volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.333">serviceStarted</a></pre>
+<pre>volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.330">serviceStarted</a></pre>
 </li>
 </ul>
 <a name="maxBalancingTime">
@@ -1850,7 +1850,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>maxBalancingTime</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.336">maxBalancingTime</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.333">maxBalancingTime</a></pre>
 </li>
 </ul>
 <a name="maxRitPercent">
@@ -1859,7 +1859,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>maxRitPercent</h4>
-<pre>private final&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.338">maxRitPercent</a></pre>
+<pre>private final&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.335">maxRitPercent</a></pre>
 </li>
 </ul>
 <a name="lockManager">
@@ -1868,7 +1868,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>lockManager</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/locking/LockManager.html" title="class in org.apache.hadoop.hbase.master.locking">LockManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.340">lockManager</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/locking/LockManager.html" title="class in org.apache.hadoop.hbase.master.locking">LockManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.337">lockManager</a></pre>
 </li>
 </ul>
 <a name="balancer">
@@ -1877,7 +1877,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balancer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupBasedLoadBalancer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.342">balancer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupBasedLoadBalancer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.339">balancer</a></pre>
 </li>
 </ul>
 <a name="balancerChore">
@@ -1886,7 +1886,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balancerChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/balancer/BalancerChore.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.343">balancerChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/balancer/BalancerChore.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.340">balancerChore</a></pre>
 </li>
 </ul>
 <a name="regionNormalizerManager">
@@ -1895,7 +1895,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>regionNormalizerManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerManager.html" title="class in org.apache.hadoop.hbase.master.normalizer">RegionNormalizerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.344">regionNormalizerManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerManager.html" title="class in org.apache.hadoop.hbase.master.normalizer">RegionNormalizerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.341">regionNormalizerManager</a></pre>
 </li>
 </ul>
 <a name="clusterStatusChore">
@@ -1904,7 +1904,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterStatusChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.html" title="class in org.apache.hadoop.hbase.master.balancer">ClusterStatusChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.345">clusterStatusChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.html" title="class in org.apache.hadoop.hbase.master.balancer">ClusterStatusChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.342">clusterStatusChore</a></pre>
 </li>
 </ul>
 <a name="clusterStatusPublisherChore">
@@ -1913,7 +1913,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterStatusPublisherChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ClusterStatusPublisher.html" title="class in org.apache.hadoop.hbase.master">ClusterStatusPublisher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.346">clusterStatusPublisherChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ClusterStatusPublisher.html" title="class in org.apache.hadoop.hbase.master">ClusterStatusPublisher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.343">clusterStatusPublisherChore</a></pre>
 </li>
 </ul>
 <a name="snapshotCleanerChore">
@@ -1922,7 +1922,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotCleanerChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/SnapshotCleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">SnapshotCleanerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.347">snapshotCleanerChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/SnapshotCleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">SnapshotCleanerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.344">snapshotCleanerChore</a></pre>
 </li>
 </ul>
 <a name="hbckChore">
@@ -1931,7 +1931,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>hbckChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/HbckChore.html" title="class in org.apache.hadoop.hbase.master">HbckChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.349">hbckChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/HbckChore.html" title="class in org.apache.hadoop.hbase.master">HbckChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.346">hbckChore</a></pre>
 </li>
 </ul>
 <a name="catalogJanitorChore">
@@ -1940,7 +1940,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>catalogJanitorChore</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/janitor/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master.janitor">CatalogJanitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.350">catalogJanitorChore</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/janitor/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master.janitor">CatalogJanitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.347">catalogJanitorChore</a></pre>
 </li>
 </ul>
 <a name="cleanerPool">
@@ -1949,7 +1949,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanerPool</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/DirScanPool.html" title="class in org.apache.hadoop.hbase.master.cleaner">DirScanPool</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.351">cleanerPool</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/DirScanPool.html" title="class in org.apache.hadoop.hbase.master.cleaner">DirScanPool</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.348">cleanerPool</a></pre>
 </li>
 </ul>
 <a name="logCleaner">
@@ -1958,7 +1958,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>logCleaner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/LogCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">LogCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.352">logCleaner</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/LogCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">LogCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.349">logCleaner</a></pre>
 </li>
 </ul>
 <a name="hfileCleaner">
@@ -1967,7 +1967,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>hfileCleaner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">HFileCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.353">hfileCleaner</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">HFileCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.350">hfileCleaner</a></pre>
 </li>
 </ul>
 <a name="replicationBarrierCleaner">
@@ -1976,7 +1976,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationBarrierCleaner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/ReplicationBarrierCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">ReplicationBarrierCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.354">replicationBarrierCleaner</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/ReplicationBarrierCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">ReplicationBarrierCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.351">replicationBarrierCleaner</a></pre>
 </li>
 </ul>
 <a name="mobFileCleanerChore">
@@ -1985,7 +1985,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mobFileCleanerChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCleanerChore.html" title="class in org.apache.hadoop.hbase.mob">MobFileCleanerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.355">mobFileCleanerChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCleanerChore.html" title="class in org.apache.hadoop.hbase.mob">MobFileCleanerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.352">mobFileCleanerChore</a></pre>
 </li>
 </ul>
 <a name="mobFileCompactionChore">
@@ -1994,7 +1994,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mobFileCompactionChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCompactionChore.html" title="class in org.apache.hadoop.hbase.mob">MobFileCompactionChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.356">mobFileCompactionChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCompactionChore.html" title="class in org.apache.hadoop.hbase.mob">MobFileCompactionChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.353">mobFileCompactionChore</a></pre>
 </li>
 </ul>
 <a name="mobCompactionLock">
@@ -2003,7 +2003,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mobCompactionLock</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.358">mobCompactionLock</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.355">mobCompactionLock</a></pre>
 </li>
 </ul>
 <a name="mobCompactionStates">
@@ -2012,7 +2012,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mobCompactionStates</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a>&gt; <a href="../../../.. [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a>&gt; <a href="../../../.. [...]
 </li>
 </ul>
 <a name="cpHost">
@@ -2021,7 +2021,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>cpHost</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.363">cpHost</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.360">cpHost</a></pre>
 </li>
 </ul>
 <a name="preLoadTableDescriptors">
@@ -2030,7 +2030,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>preLoadTableDescriptors</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.365">preLoadTableDescriptors</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.362">preLoadTableDescriptors</a></pre>
 </li>
 </ul>
 <a name="masterActiveTime">
@@ -2039,7 +2039,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>masterActiveTime</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.368">masterActiveTime</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.365">masterActiveTime</a></pre>
 </li>
 </ul>
 <a name="masterFinishedInitializationTime">
@@ -2048,7 +2048,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>masterFinishedInitializationTime</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.371">masterFinishedInitializationTime</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.368">masterFinishedInitializationTime</a></pre>
 </li>
 </ul>
 <a name="coprocessorServiceHandlers">
@@ -2057,7 +2057,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorServiceHandlers</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hbase.thirdparty.com.google.protobuf.Service&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.373">coprocessorServiceHandlers</a></pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hbase.thirdparty.com.google.protobuf.Service&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.370">coprocessorServiceHandlers</a></pre>
 </li>
 </ul>
 <a name="snapshotManager">
@@ -2066,7 +2066,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotManager</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.376">snapshotManager</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.373">snapshotManager</a></pre>
 </li>
 </ul>
 <a name="mpmHost">
@@ -2075,7 +2075,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mpmHost</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure/MasterProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">MasterProcedureManagerHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.378">mpmHost</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure/MasterProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">MasterProcedureManagerHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.375">mpmHost</a></pre>
 </li>
 </ul>
 <a name="regionsRecoveryChore">
@@ -2084,7 +2084,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsRecoveryChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/RegionsRecoveryChore.html" title="class in org.apache.hadoop.hbase.master">RegionsRecoveryChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.380">regionsRecoveryChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/RegionsRecoveryChore.html" title="class in org.apache.hadoop.hbase.master">RegionsRecoveryChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.377">regionsRecoveryChore</a></pre>
 </li>
 </ul>
 <a name="regionsRecoveryConfigManager">
@@ -2093,7 +2093,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsRecoveryConfigManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/RegionsRecoveryConfigManager.html" title="class in org.apache.hadoop.hbase.master">RegionsRecoveryConfigManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.382">regionsRecoveryConfigManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/RegionsRecoveryConfigManager.html" title="class in org.apache.hadoop.hbase.master">RegionsRecoveryConfigManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.379">regionsRecoveryConfigManager</a></pre>
 </li>
 </ul>
 <a name="quotaManager">
@@ -2102,7 +2102,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>quotaManager</h4>
-<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/MasterQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">MasterQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.384">quotaManager</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/MasterQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">MasterQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.381">quotaManager</a></pre>
 </li>
 </ul>
 <a name="spaceQuotaSnapshotNotifier">
@@ -2111,7 +2111,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>spaceQuotaSnapshotNotifier</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.385">spaceQuotaSnapshotNotifier</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.382">spaceQuotaSnapshotNotifier</a></pre>
 </li>
 </ul>
 <a name="quotaObserverChore">
@@ -2120,7 +2120,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>quotaObserverChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.386">quotaObserverChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.383">quotaObserverChore</a></pre>
 </li>
 </ul>
 <a name="snapshotQuotaChore">
@@ -2129,7 +2129,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotQuotaChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">SnapshotQuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.387">snapshotQuotaChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">SnapshotQuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.384">snapshotQuotaChore</a></pre>
 </li>
 </ul>
 <a name="procedureExecutor">
@@ -2138,7 +2138,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>procedureExecutor</h4>
-<pre>private&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; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.389">procedureExecutor</a></pre>
+<pre>private&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; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.386">procedureExecutor</a></pre>
 </li>
 </ul>
 <a name="procedureStore">
@@ -2147,7 +2147,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>procedureStore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.390">procedureStore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.387">procedureStore</a></pre>
 </li>
 </ul>
 <a name="masterRegion">
@@ -2156,7 +2156,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>masterRegion</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/region/MasterRegion.html" title="class in org.apache.hadoop.hbase.master.region">MasterRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.393">masterRegion</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/region/MasterRegion.html" title="class in org.apache.hadoop.hbase.master.region">MasterRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.390">masterRegion</a></pre>
 </li>
 </ul>
 <a name="tableStateManager">
@@ -2165,7 +2165,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>tableStateManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.396">tableStateManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.393">tableStateManager</a></pre>
 </li>
 </ul>
 <a name="masterJettyServer">
@@ -2174,7 +2174,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>masterJettyServer</h4>
-<pre>private&nbsp;org.apache.hbase.thirdparty.org.eclipse.jetty.server.Server <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.399">masterJettyServer</a></pre>
+<pre>private&nbsp;org.apache.hbase.thirdparty.org.eclipse.jetty.server.Server <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.396">masterJettyServer</a></pre>
 <div class="block">jetty server for master to redirect requests to regionserver infoServer</div>
 </li>
 </ul>
@@ -2184,7 +2184,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>maintenanceMode</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.403">maintenanceMode</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.400">maintenanceMode</a></pre>
 </li>
 </ul>
 <a name="MAINTENANCE_MODE">
@@ -2193,7 +2193,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>MAINTENANCE_MODE</h4>
-<pre>static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.404">MAINTENANCE_MODE</a></pre>
+<pre>static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.401">MAINTENANCE_MODE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.MAINTENANCE_MODE">Constant Field Values</a></dd>
@@ -2206,7 +2206,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockListLast">
 <li class="blockList">
 <h4>cachedClusterId</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/CachedClusterId.html" title="class in org.apache.hadoop.hbase.master">CachedClusterId</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.407">cachedClusterId</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/CachedClusterId.html" title="class in org.apache.hadoop.hbase.master">CachedClusterId</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.404">cachedClusterId</a></pre>
 </li>
 </ul>
 </li>
@@ -2223,7 +2223,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HMaster</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.421">HMaster</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.418">HMaster</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Initializes the HMaster. The steps are as follows:
  <p>
@@ -2255,7 +2255,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>createActiveMasterManager</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ActiveMasterManager.html" title="class in org.apache.hadoop.hbase.master">ActiveMasterManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.496">createActiveMasterManager</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zk,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ActiveMasterManager.html" title="class in org.apache.hadoop.hbase.master">ActiveMasterManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.493">createActiveMasterManager</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zk,
                                                         <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn,
                                                         <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;server)
                                                  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>
@@ -2273,7 +2273,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>getUseThisHostnameInstead</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.502">getUseThisHostnameInstead</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.499">getUseThisHostnameInstead</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getUseThisHostnameInstead-org.apache.hadoop.conf.Configuration-">getUseThisHostnameInstead</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>
@@ -2286,7 +2286,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.509">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.506">run</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#run--">HRegionServer</a></code></span></div>
 <div class="block">The HRegionServer sticks in this loop until closed.</div>
 <dl>
@@ -2303,7 +2303,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>putUpJettyServer</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.545">putUpJettyServer</a>()
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.542">putUpJettyServer</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>
@@ -2317,7 +2317,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>login</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.598">login</a>(<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;user,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.597">login</a>(<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;user,
                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;host)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">For compatibility, if failed with regionserver credentials, try the master one</div>
@@ -2335,7 +2335,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForMasterActive</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.613">waitForMasterActive</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.612">waitForMasterActive</a>()</pre>
 <div class="block">If configured to put regions on active master,
  wait till a backup master becomes active.
  Otherwise, loop till the server is stopped or aborted.</div>
@@ -2352,7 +2352,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <li class="blockList">
 <h4>getMasterRpcServices</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.html" title="class in org.apache.hadoop.hbase.master">MasterRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.624">getMasterRpcServices</a>()</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.html" title="class in org.apache.hadoop.hbase.master">MasterRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.623">getMasterRpcServices</a>()</pre>
 </li>
 </ul>
 <a name="balanceSwitch-boolean-">
@@ -2361,7 +2361,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServ
 <ul class="blockList">
 <li class="blockList">
 <h4>balanceSwitch</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.628">balanceSwitch</a>(boolean&nbsp;b)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.627">balanceSwitch</a>(boolean&nbsp;b)
                       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>
@@ -2375,7 +2375,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcessName</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.633">getProcessName</a>()</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.632">getProcessName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getProcessName--">getProcessName</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>
@@ -2388,7 +2388,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServ
 <ul class="blockList">
 <li class="blockList">
 <h4>canCreateBaseZNode</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.638">canCreateBaseZNode</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.637">canCreateBaseZNode</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#canCreateBaseZNode--">canCreateBaseZNode</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>
@@ -2401,7 +2401,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServ
 <ul class="blockList">
 <li class="blockList">
 <h4>canUpdateTableDescriptor</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.643">canUpdateTableDescriptor</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.642">canUpdateTableDescriptor</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#canUpdateTableDescriptor--">canUpdateTableDescriptor</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>
@@ -2414,7 +2414,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServ
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheTableDescriptor</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.648">cacheTableDescriptor</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.647">cacheTableDescriptor</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#cacheTableDescriptor--">cacheTableDescriptor</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>
@@ -2427,7 +2427,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServ
 <ul class="blockList">
 <li class="blockList">
 <h4>createRpcServices</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.653">createRpcServices</a>()
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.652">createRpcServices</a>()
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -2443,7 +2443,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServ
 <ul class="blockList">
 <li class="blockList">
 <h4>configureInfoServer</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.658">configureInfoServer</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.657">configureInfoServer</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#configureInfoServer--">configureInfoServer</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>
@@ -2456,7 +2456,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getDumpServlet</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends javax.servlet.http.HttpServlet&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.667">getDumpServlet</a>()</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends javax.servlet.http.HttpServlet&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.666">getDumpServlet</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getDumpServlet--">getDumpServlet</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>
@@ -2469,7 +2469,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServ
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.672">getMasterMetrics</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.671">getMasterMetrics</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMasterMetrics--">getMasterMetrics</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>
@@ -2484,7 +2484,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServ
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeZKBasedSystemTrackers</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.680">initializeZKBasedSystemTrackers</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.679">initializeZKBasedSystemTrackers</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>,
                                              org.apache.zookeeper.KeeperException,
                                              <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
@@ -2505,7 +2505,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServ
 <li class="blockList">
 <h4>createAssignmentManager</h4>
 <pre>@InterfaceAudience.Private
-protected&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.754">createAssignmentManager</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/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.753">createAssignmentManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)</pre>
 </li>
 </ul>
 <a name="finishActiveMasterInitialization-org.apache.hadoop.hbase.monitoring.MonitoredTask-">
@@ -2514,7 +2514,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/assignment
 <ul class="blockList">
 <li class="blockList">
 <h4>finishActiveMasterInitialization</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.795">finishActiveMasterInitialization</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.794">finishActiveMasterInitialization</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>,
                                               org.apache.zookeeper.KeeperException,
@@ -2570,7 +2570,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/assignment
 <li class="blockList">
 <h4>waitForMetaOnline</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1120">waitForMetaOnline</a>()</pre>
+public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1119">waitForMetaOnline</a>()</pre>
 <div class="block">Check hbase:meta is up and ready for reading. For use during Master startup only.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -2585,7 +2585,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isRegionOnline</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1128">isRegionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;ri)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1127">isRegionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;ri)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if region is online and scannable else false if an error or shutdown (Otherwise
@@ -2599,7 +2599,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForNamespaceOnline</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1163">waitForNamespaceOnline</a>()
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1162">waitForNamespaceOnline</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">Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table
  <p/>
@@ -2621,7 +2621,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>updateConfigurationForQuotasObserver</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1191">updateConfigurationForQuotasObserver</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1190">updateConfigurationForQuotasObserver</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Adds the <code>MasterQuotasObserver</code> to the list of configured Master observers to
  automatically remove quotas for a table when that table is deleted.</div>
 </li>
@@ -2632,7 +2632,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <ul class="blockList">
 <li class="blockList">
 <h4>initMobCleaner</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1208">initMobCleaner</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1207">initMobCleaner</a>()</pre>
 </li>
 </ul>
 <a name="createServerManager-org.apache.hadoop.hbase.master.MasterServices-">
@@ -2642,7 +2642,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <li class="blockList">
 <h4>createServerManager</h4>
 <pre>@InterfaceAudience.Private
-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.1224">createServerManager</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;master)
+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.1223">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.
@@ -2662,7 +2662,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerMana
 <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.1231">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.1230">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>
@@ -2679,7 +2679,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerMana
 <li class="blockList">
 <h4>initClusterSchemaService</h4>
 <pre>@InterfaceAudience.Private
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1238">initClusterSchemaService</a>()
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1237">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>
@@ -2695,7 +2695,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1250">initQuotaManager</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1249">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>
@@ -2709,7 +2709,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1256">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.1255">createQuotaSnapshotNotifier</a>()</pre>
 </li>
 </ul>
 <a name="isCatalogJanitorEnabled--">
@@ -2718,7 +2718,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isCatalogJanitorEnabled</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1262">isCatalogJanitorEnabled</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1261">isCatalogJanitorEnabled</a>()</pre>
 </li>
 </ul>
 <a name="isCleanerChoreEnabled--">
@@ -2727,7 +2727,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isCleanerChoreEnabled</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1266">isCleanerChoreEnabled</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1265">isCleanerChoreEnabled</a>()</pre>
 </li>
 </ul>
 <a name="getServerManager--">
@@ -2736,7 +2736,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1281">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.1280">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>
@@ -2751,7 +2751,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1286">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.1285">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>
@@ -2766,7 +2766,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1291">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.1290">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>
@@ -2781,7 +2781,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1296">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.1295">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>
@@ -2796,7 +2796,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1301">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.1300">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>
@@ -2811,7 +2811,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1312">startServiceThreads</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1311">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>
@@ -2825,7 +2825,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1409">stopServiceThreads</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1408">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>
@@ -2841,7 +2841,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1467">createProcedureExecutor</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1466">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>
@@ -2855,7 +2855,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1498">startProcedureExecutor</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1497">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>
@@ -2869,7 +2869,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>switchSnapshotCleanup</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1507">switchSnapshotCleanup</a>(boolean&nbsp;on,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1506">switchSnapshotCleanup</a>(boolean&nbsp;on,
                            boolean&nbsp;synchronous)</pre>
 <div class="block">Turn on/off Snapshot Cleanup Chore</div>
 <dl>
@@ -2884,7 +2884,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1517">switchSnapshotCleanup</a>(boolean&nbsp;on)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1516">switchSnapshotCleanup</a>(boolean&nbsp;on)</pre>
 </li>
 </ul>
 <a name="stopProcedureExecutor--">
@@ -2893,7 +2893,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1531">stopProcedureExecutor</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1530">stopProcedureExecutor</a>()</pre>
 </li>
 </ul>
 <a name="stopChores--">
@@ -2902,7 +2902,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1546">stopChores</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1545">stopChores</a>()</pre>
 </li>
 </ul>
 <a name="getRemoteInetAddress-int-long-">
@@ -2911,7 +2911,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1570">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.1569">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>
@@ -2928,7 +2928,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1590">getMaxBalancingTime</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1589">getMaxBalancingTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Maximum time we should run balancer for</dd>
@@ -2941,7 +2941,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1601">getMaxRegionsInTransition</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1600">getMaxRegionsInTransition</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Maximum number of regions in transition</dd>
@@ -2954,7 +2954,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1613">balanceThrottling</a>(long&nbsp;nextBalanceStartTime,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1612">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
@@ -2973,7 +2973,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1644">balance</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1643">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>
@@ -2987,7 +2987,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>skipRegionManagementAction</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1654">skipRegionManagementAction</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;action)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1653">skipRegionManagementAction</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;action)</pre>
 <div class="block">Checks master state before initiating action over region topology.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -3005,7 +3005,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1671">balance</a>(boolean&nbsp;force)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1670">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>
@@ -3019,7 +3019,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1754">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.1753">executeRegionPlansWithThrottling</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List [...]
 <div class="block">Execute region plans with throttling</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -3037,7 +3037,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionNormalizerManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerManager.html" title="class in org.apache.hadoop.hbase.master.normalizer">RegionNormalizerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1800">getRegionNormalizerManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerManager.html" title="class in org.apache.hadoop.hbase.master.normalizer">RegionNormalizerManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1799">getRegionNormalizerManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getRegionNormalizerManager--">getRegionNormalizerManager</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>
@@ -3052,7 +3052,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1805">normalizeRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/client/NormalizeTableFilterParams.html" title="class in org.apache.hadoop.hbase.client">NormalizeTableFilterParams</a>&nbsp;ntfp,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1804">normalizeRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/client/NormalizeTableFilterParams.html" title="class in org.apache.hadoop.hbase.client">NormalizeTableFilterParams</a>&nbsp;ntfp,
                                 boolean&nbsp;isHighPriority)
                          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#normalizeRegions-org.apache.hadoop.hbase.client.NormalizeTableFilterParams-boolean-">MasterServices</a></code></span></div>
@@ -3077,7 +3077,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1837">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.1836">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>
@@ -3092,7 +3092,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1848">setCatalogJanitorEnabled</a>(boolean&nbsp;b)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1847">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>
@@ -3108,7 +3108,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1853">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.1852">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)
@@ -3136,7 +3136,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1888">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.1887">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)
@@ -3164,7 +3164,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.1917">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.1916">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>
@@ -3175,7 +3175,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>move</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1930">move</a>(byte[]&nbsp;encodedRegionName,
+public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.1929">move</a>(byte[]&nbsp;encodedRegionName,
                                             byte[]&nbsp;destServerName)
                                      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>
@@ -3190,7 +3190,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2022">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.2021">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)
@@ -3215,7 +3215,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2064">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.2063">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>
@@ -3236,7 +3236,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2087">startActiveMasterManager</a>(int&nbsp;infoPort)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2086">startActiveMasterManager</a>(int&nbsp;infoPort)
                                throws org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3250,7 +3250,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2140">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.2139">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-">
@@ -3259,7 +3259,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2145">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.2144">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>
@@ -3281,7 +3281,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2179">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.2178">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)
@@ -3305,7 +3305,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2209">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.2208">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)
@@ -3329,7 +3329,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2237">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.2236">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)
@@ -3353,7 +3353,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2257">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.2256">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)
@@ -3377,7 +3377,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2282">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.2281">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>
@@ -3399,7 +3399,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2337">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.2336">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>
@@ -3421,7 +3421,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2372">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.2371">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,
@@ -3439,7 +3439,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2409">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.2408">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)
@@ -3463,7 +3463,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2421">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.2420">restoreSnapshot</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshotDesc,
                             long&nbsp;nonceGroup,
                             long&nbsp;nonce,
                             boolean&nbsp;restoreAcl)
@@ -3480,7 +3480,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2445">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.2444">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>
@@ -3496,7 +3496,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2453">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.2452">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>
@@ -3520,7 +3520,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2465">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.2464">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>
@@ -3534,7 +3534,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2469">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.2468">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>
@@ -3548,7 +3548,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2555">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.2554">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>
@@ -3564,7 +3564,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2559">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.2558">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>
@@ -3578,7 +3578,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <ul class="blockList">
 <li class="blockList">
 <h4>getBackupMasters</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/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.2570">getBackupMasters</a>()</pre>
+<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/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.2569">getBackupMasters</a>()</pre>
 </li>
 </ul>
 <a name="getLoadedCoprocessors--">
@@ -3587,7 +3587,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2580">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.2579">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>
@@ -3603,7 +3603,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2587">getMasterStartTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2586">getMasterStartTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>timestamp in millis when HMaster was started.</dd>
@@ -3616,7 +3616,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2594">getMasterActiveTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2593">getMasterActiveTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>timestamp in millis when HMaster became the active master.</dd>
@@ -3629,7 +3629,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2601">getMasterFinishedInitializationTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2600">getMasterFinishedInitializationTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>timestamp in millis when HMaster finished becoming the active master</dd>
@@ -3642,7 +3642,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2605">getNumWALFiles</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2604">getNumWALFiles</a>()</pre>
 </li>
 </ul>
 <a name="getProcedureStore--">
@@ -3651,7 +3651,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcedureStore</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2609">getProcedureStore</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2608">getProcedureStore</a>()</pre>
 </li>
 </ul>
 <a name="getRegionServerInfoPort-org.apache.hadoop.hbase.ServerName-">
@@ -3660,7 +3660,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2613">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.2612">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-">
@@ -3669,7 +3669,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2620">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.2619">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>
@@ -3682,7 +3682,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2627">checkIfShouldMoveSystemRegionAsync</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2626">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
@@ -3699,7 +3699,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2634">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.2633">getMasterCoprocessors</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>array of coprocessor SimpleNames.</dd>
@@ -3712,7 +3712,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2640">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.2639">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
@@ -3735,7 +3735,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2665">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.2664">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>
@@ -3752,7 +3752,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2670">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.2669">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>
@@ -3767,7 +3767,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2675">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.2674">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>
@@ -3782,7 +3782,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2680">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.2679">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>
@@ -3797,7 +3797,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2685">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.2684">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>
@@ -3814,7 +3814,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2690">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.2689">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>
@@ -3829,7 +3829,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <ul class="blockList">
 <li class="blockList">
 <h4>getCatalogJanitor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/janitor/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master.janitor">CatalogJanitor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2695">getCatalogJanitor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/janitor/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master.janitor">CatalogJanitor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2694">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>
@@ -3844,7 +3844,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2699">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.2698">getRegionServerFatalLogBuffer</a>()</pre>
 </li>
 </ul>
 <a name="shutdown--">
@@ -3853,7 +3853,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2707">shutdown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2706">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>
@@ -3869,7 +3869,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2740">stopMaster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2739">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>
@@ -3883,7 +3883,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2748">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.2747">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>
@@ -3904,7 +3904,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <li class="blockList">
 <h4>checkServiceStarted</h4>
 <pre>@InterfaceAudience.Private
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2758">checkServiceStarted</a>()
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2757">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>
@@ -3918,7 +3918,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>checkInitialized</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2764">checkInitialized</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2763">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>,
@@ -3938,7 +3938,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.2784">isActiveMaster</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2783">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.
 
@@ -3957,7 +3957,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.2798">isInitialized</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2797">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.
@@ -3977,7 +3977,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isOnline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2811">isOnline</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2810">isOnline</a>()</pre>
 <div class="block">Report whether this master is started
 
  This method is used for testing.</div>
@@ -3995,7 +3995,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <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.2821">isInMaintenanceMode</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2820">isInMaintenanceMode</a>()</pre>
 <div class="block">Report whether this master is in maintenance mode.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -4012,7 +4012,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>setInitialized</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2826">setInitialized</a>(boolean&nbsp;isInitialized)</pre>
+public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2825">setInitialized</a>(boolean&nbsp;isInitialized)</pre>
 </li>
 </ul>
 <a name="getInitializedEvent--">
@@ -4021,7 +4021,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2831">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.2830">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>
@@ -4036,7 +4036,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2841">getAverageLoad</a>()</pre>
+<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2840">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>
@@ -4052,7 +4052,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2854">registerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.Service&nbsp;instance)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2853">registerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.Service&nbsp;instance)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#registerService-org.apache.hbase.thirdparty.com.google.protobuf.Service-">RegionServerServices</a></code></span></div>
 <div class="block">Registers a new protocol buffer <code>Service</code> subclass as a coprocessor endpoint to be
  available for handling</div>
@@ -4076,7 +4076,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2879">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.2878">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>
@@ -4093,7 +4093,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2898">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.2897">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>
@@ -4106,7 +4106,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2904">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.2903">getHFileCleaner</a>()</pre>
 </li>
 </ul>
 <a name="getLogCleaner--">
@@ -4115,7 +4115,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2908">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.2907">getLogCleaner</a>()</pre>
 </li>
 </ul>
 <a name="getSnapshotManager--">
@@ -4124,7 +4124,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2916">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.2915">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>
@@ -4139,7 +4139,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2924">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.2923">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>
@@ -4154,7 +4154,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.2929">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.2928">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>
@@ -4169,7 +4169,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <ul class="blockList">
 <li class="blockList">
 <h4>createNamespace</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2941">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.2940">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>
@@ -4193,7 +4193,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <ul class="blockList">
 <li class="blockList">
 <h4>modifyNamespace</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2977">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.2976">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>
@@ -4216,7 +4216,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteNamespace</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3015">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.3014">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>
@@ -4239,7 +4239,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3050">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.3049">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>
@@ -4258,7 +4258,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3062">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.3061">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>
@@ -4275,7 +4275,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3079">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.3078">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>
@@ -4292,7 +4292,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3095">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.3094">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>
@@ -4314,7 +4314,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3101">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.3100">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>
@@ -4336,7 +4336,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3107">abortProcedure</a>(long&nbsp;procId,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3106">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>
@@ -4360,7 +4360,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3123">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.3122">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>
@@ -4380,7 +4380,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3139">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.3138">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>
@@ -4400,7 +4400,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3164">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.3163">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)
@@ -4425,7 +4425,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3185">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.3184">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>
@@ -4448,7 +4448,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3205">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.3204">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,
@@ -4469,7 +4469,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3246">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.3245">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>
@@ -4485,7 +4485,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3264">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.3263">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>
@@ -4506,7 +4506,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3270">getLastMajorCompactionTimestampForRegion</a>(byte[]&nbsp;regionName)
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3269">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>
@@ -4525,7 +4525,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3284">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.3283">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
@@ -4545,7 +4545,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3292">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.3291">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>
@@ -4559,7 +4559,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3309">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.3308">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>
@@ -4573,7 +4573,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3335">isBalancerOn</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3334">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>
@@ -4590,7 +4590,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3345">isNormalizerOn</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3344">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>
@@ -4601,7 +4601,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3357">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.3356">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>
@@ -4620,7 +4620,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3370">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.3369">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.
  <p/>
  Notice that, the base load balancer will always be <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html" title="class in org.apache.hadoop.hbase.rsgroup"><code>RSGroupBasedLoadBalancer</code></a> now, so
@@ -4637,7 +4637,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3375">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.3374">getSplitOrMergeTracker</a>()</pre>
 </li>
 </ul>
 <a name="getLoadBalancer--">
@@ -4646,7 +4646,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <ul class="blockList">
 <li class="blockList">
 <h4>getLoadBalancer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupBasedLoadBalancer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3380">getLoadBalancer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupBasedLoadBalancer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3379">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>
@@ -4661,7 +4661,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3385">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.3384">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>
@@ -4676,7 +4676,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3389">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.3388">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>
@@ -4690,7 +4690,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3396">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.3395">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>,
@@ -4716,7 +4716,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3404">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.3403">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>
@@ -4738,7 +4738,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3410">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.3409">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>
@@ -4760,7 +4760,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3416">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.3415">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>
@@ -4782,7 +4782,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3422">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.3421">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>
@@ -4806,7 +4806,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3437">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.3436">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>
@@ -4830,7 +4830,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3445">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.3444">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>
@@ -4854,7 +4854,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3461">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.3460">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>
@@ -4878,7 +4878,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3475">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.3474">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="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">Mark region server(s) as decommissioned (previously called 'draining') to prevent additional
@@ -4897,7 +4897,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3514">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.3513">listDecommissionedRegionServers</a>()</pre>
 <div class="block">List region servers marked as decommissioned (previously called 'draining') to not get regions
  assigned to them.</div>
 <dl>
@@ -4912,7 +4912,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3523">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.3522">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
@@ -4931,7 +4931,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3562">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.3561">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>
@@ -4946,7 +4946,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3566">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.3565">getQuotaObserverChore</a>()</pre>
 </li>
 </ul>
 <a name="getSpaceQuotaSnapshotNotifier--">
@@ -4955,7 +4955,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3570">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.3569">getSpaceQuotaSnapshotNotifier</a>()</pre>
 </li>
 </ul>
 <a name="getRemoteProcedure-long-">
@@ -4964,7 +4964,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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-">
@@ -4973,7 +4973,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3584">remoteProcedureCompleted</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3583">remoteProcedureCompleted</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="remoteProcedureFailed-long-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">
@@ -4982,7 +4982,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3592">remoteProcedureFailed</a>(long&nbsp;procId,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3591">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>
@@ -4992,7 +4992,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <ul class="blockList">
 <li class="blockList">
 <h4>reopenRegions</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3611">reopenRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3610">reopenRegions</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;byte[]&gt;&nbsp;regionNames,
                    long&nbsp;nonceGroup,
                    long&nbsp;nonce)
@@ -5018,7 +5018,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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.3633">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.3632">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>
@@ -5033,7 +5033,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <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-">
@@ -5043,7 +5043,7 @@ public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/m
 <li class="blockList">
 <h4>decorateMasterConfiguration</h4>
 <pre>@InterfaceAudience.Private
-public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3674">decorateMasterConfiguration</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3673">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>
@@ -5053,7 +5053,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <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.3689">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.3688">getSnapshotQuotaObserverChore</a>()</pre>
 </li>
 </ul>
 <a name="getSyncReplicationReplayWALManager--">
@@ -5062,7 +5062,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <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.3694">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.3693">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>
@@ -5077,7 +5077,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <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>
@@ -5090,7 +5090,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <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.3706">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.3705">getHbckChore</a>()</pre>
 </li>
 </ul>
 <a name="getClusterId--">
@@ -5099,7 +5099,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterId</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3711">getClusterId</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3710">getClusterId</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getClusterId--">getClusterId</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>
@@ -5112,7 +5112,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>getActiveMaster</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/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.3718">getActiveMaster</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/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.3717">getActiveMaster</a>()</pre>
 </li>
 </ul>
 <a name="runReplicationBarrierCleaner--">
@@ -5121,7 +5121,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>runReplicationBarrierCleaner</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3723">runReplicationBarrierCleaner</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3722">runReplicationBarrierCleaner</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#runReplicationBarrierCleaner--">MasterServices</a></code></span></div>
 <div class="block">Run the ReplicationBarrierChore.</div>
 <dl>
@@ -5136,7 +5136,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaRegionLocationCache</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetaRegionLocationCache.html" title="class in org.apache.hadoop.hbase.master">MetaRegionLocationCache</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3730">getMetaRegionLocationCache</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetaRegionLocationCache.html" title="class in org.apache.hadoop.hbase.master">MetaRegionLocationCache</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3729">getMetaRegionLocationCache</a>()</pre>
 </li>
 </ul>
 <a name="getRSGroupInfoManager--">
@@ -5145,7 +5145,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSGroupInfoManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3735">getRSGroupInfoManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3734">getRSGroupInfoManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getRSGroupInfoManager--">getRSGroupInfoManager</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>
@@ -5160,7 +5160,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionState</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3745">getCompactionState</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3744">getCompactionState</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Get the compaction state of the table</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -5176,7 +5176,7 @@ public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMetaLocationSyncer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/zksyncer/MetaLocationSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">MetaLocationSyncer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3783">getMetaLocationSyncer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/zksyncer/MetaLocationSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">MetaLocationSyncer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3782">getMetaLocationSyncer</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#getMetaLocationSyncer--">MasterServices</a></code></span></div>
 <div class="block">Get the meta location syncer.
  <p/>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
index e2ae864..7ebf7f7 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
@@ -151,8 +151,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">ServerState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TransitRegionStateProcedure.TransitionType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">ServerState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index 0273bd9..9d233ef 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -205,8 +205,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 3204742..46fad59 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -338,13 +338,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetaRegionLocationCache.ZNodeOpType.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetaRegionLocationCache.ZNodeOpType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
index c29587a..4b6a729 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -126,8 +126,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 998b82f..e8e6ee8 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -424,19 +424,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 53c8a10..e85fcf2 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -217,10 +217,10 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
index b0ced2c..4ef4954 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
@@ -133,8 +133,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureStore.PushType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureStoreTracker.DeleteState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureStore.PushType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index b18a1db..af8171d 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -242,10 +242,10 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 6db3dec..fa13ba0 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -732,20 +732,20 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index 7589ab7..7ffb304 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,9 +130,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index 18cfb09..3ab870a 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -249,8 +249,8 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index a2afef9..2747544 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -110,8 +110,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index 537f6ea..1d87952 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -162,11 +162,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 719f57f..acb6131 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -190,8 +190,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 9ef7a37..e1b9e6c 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -211,9 +211,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ImplType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 90c15a8..421e566 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -534,15 +534,15 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/DNS.ServerType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">DNS.ServerType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLockWithObjectPool.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLockWithObjectPool.ReferenceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/DNS.ServerType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">DNS.ServerType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index a04f920..791fd83 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -198,8 +198,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/http/HttpServer.Builder.html b/devapidocs/src-html/org/apache/hadoop/hbase/http/HttpServer.Builder.html
index 01bf522..267a894 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/http/HttpServer.Builder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/http/HttpServer.Builder.html
@@ -74,21 +74,21 @@
 <span class="sourceLineNo">066</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.66"></a>
 <span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
 <span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.http.HttpVersion;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.Handler;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpConfiguration;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpConnectionFactory;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.RequestLog;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.SecureRequestCustomizer;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.Server;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.ServerConnector;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.SslConnectionFactory;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ContextHandlerCollection;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.HandlerCollection;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.RequestLogHandler;<a name="line.83"></a>
+<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.http.HttpVersion;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.Handler;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpConfiguration;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpConnectionFactory;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.RequestLog;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.SecureRequestCustomizer;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.Server;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.ServerConnector;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.SslConnectionFactory;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ContextHandlerCollection;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.HandlerCollection;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.RequestLogHandler;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.gzip.GzipHandler;<a name="line.83"></a>
 <span class="sourceLineNo">084</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.DefaultServlet;<a name="line.84"></a>
 <span class="sourceLineNo">085</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.FilterHolder;<a name="line.85"></a>
 <span class="sourceLineNo">086</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.FilterMapping;<a name="line.86"></a>
@@ -583,932 +583,950 @@
 <span class="sourceLineNo">575</span>    this.findPort = b.findPort;<a name="line.575"></a>
 <span class="sourceLineNo">576</span>    this.authenticationEnabled = b.securityEnabled;<a name="line.576"></a>
 <span class="sourceLineNo">577</span>    initializeWebServer(b.name, b.hostName, b.conf, b.pathSpecs, b);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  private void initializeWebServer(String name, String hostName,<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      Configuration conf, String[] pathSpecs, HttpServer.Builder b)<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      throws FileNotFoundException, IOException {<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>    Preconditions.checkNotNull(webAppContext);<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span>    HandlerCollection handlerCollection = new HandlerCollection();<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>    ContextHandlerCollection contexts = new ContextHandlerCollection();<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    RequestLog requestLog = HttpRequestLog.getRequestLog(name);<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>    if (requestLog != null) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      RequestLogHandler requestLogHandler = new RequestLogHandler();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      requestLogHandler.setRequestLog(requestLog);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      handlerCollection.addHandler(requestLogHandler);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>    }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>    final String appDir = getWebAppsPath(name);<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>    handlerCollection.addHandler(contexts);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    handlerCollection.addHandler(webAppContext);<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>    webServer.setHandler(handlerCollection);<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    webAppContext.setAttribute(ADMINS_ACL, adminsAcl);<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>    // Default apps need to be set first, so that all filters are applied to them.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    // Because they're added to defaultContexts, we need them there before we start<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    // adding filters<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    addDefaultApps(contexts, appDir, conf);<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span>    addGlobalFilter("safety", QuotingInputFilter.class.getName(), null);<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>    addGlobalFilter("clickjackingprevention",<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        ClickjackingPreventionFilter.class.getName(),<a name="line.614"></a>
-<span class="sourceLineNo">615</span>        ClickjackingPreventionFilter.getDefaultParameters(conf));<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    addGlobalFilter("securityheaders",<a name="line.617"></a>
-<span class="sourceLineNo">618</span>        SecurityHeadersFilter.class.getName(),<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        SecurityHeadersFilter.getDefaultParameters(conf));<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>    // But security needs to be enabled prior to adding the other servlets<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    if (authenticationEnabled) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      initSpnego(conf, hostName, b.usernameConfKey, b.keytabConfKey, b.kerberosNameRulesKey,<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          b.signatureSecretFileKey);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>    final FilterInitializer[] initializers = getFilterInitializers(conf);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    if (initializers != null) {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      conf = new Configuration(conf);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      conf.set(BIND_ADDRESS, hostName);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      for (FilterInitializer c : initializers) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        c.initFilter(this, conf);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    }<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>    addDefaultServlets(contexts, conf);<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>    if (pathSpecs != null) {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      for (String path : pathSpecs) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        LOG.info("adding path spec: " + path);<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        addFilterPathMapping(path, webAppContext);<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      }<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    }<a name="line.643"></a>
-<span class="sourceLineNo">644</span>  }<a name="line.644"></a>
-<span class="sourceLineNo">645</span><a name="line.645"></a>
-<span class="sourceLineNo">646</span>  private void addManagedListener(ServerConnector connector) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    listeners.add(new ListenerInfo(true, connector));<a name="line.647"></a>
-<span class="sourceLineNo">648</span>  }<a name="line.648"></a>
-<span class="sourceLineNo">649</span><a name="line.649"></a>
-<span class="sourceLineNo">650</span>  private static WebAppContext createWebAppContext(String name,<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      Configuration conf, AccessControlList adminsAcl, final String appDir) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    WebAppContext ctx = new WebAppContext();<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    ctx.setDisplayName(name);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    ctx.setContextPath("/");<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    ctx.setWar(appDir + "/" + name);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    ctx.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    // for org.apache.hadoop.metrics.MetricsServlet<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    ctx.getServletContext().setAttribute(<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      org.apache.hadoop.http.HttpServer2.CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    ctx.getServletContext().setAttribute(ADMINS_ACL, adminsAcl);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    addNoCacheFilter(ctx);<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    return ctx;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
-<span class="sourceLineNo">664</span><a name="line.664"></a>
-<span class="sourceLineNo">665</span>  private static void addNoCacheFilter(WebAppContext ctxt) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    defineFilter(ctxt, NO_CACHE_FILTER, NoCacheFilter.class.getName(),<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        Collections.&lt;String, String&gt; emptyMap(), new String[] { "/*" });<a name="line.667"></a>
-<span class="sourceLineNo">668</span>  }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /** Get an array of FilterConfiguration specified in the conf */<a name="line.670"></a>
-<span class="sourceLineNo">671</span>  private static FilterInitializer[] getFilterInitializers(Configuration conf) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    if (conf == null) {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      return null;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    }<a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span>    Class&lt;?&gt;[] classes = conf.getClasses(FILTER_INITIALIZERS_PROPERTY);<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    if (classes == null) {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      return null;<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    }<a name="line.679"></a>
-<span class="sourceLineNo">680</span><a name="line.680"></a>
-<span class="sourceLineNo">681</span>    FilterInitializer[] initializers = new FilterInitializer[classes.length];<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    for(int i = 0; i &lt; classes.length; i++) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      initializers[i] = (FilterInitializer)ReflectionUtils.newInstance(classes[i]);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    return initializers;<a name="line.685"></a>
+<span class="sourceLineNo">578</span>    this.webServer.setHandler(buildGzipHandler(this.webServer.getHandler()));<a name="line.578"></a>
+<span class="sourceLineNo">579</span>  }<a name="line.579"></a>
+<span class="sourceLineNo">580</span><a name="line.580"></a>
+<span class="sourceLineNo">581</span>  private void initializeWebServer(String name, String hostName,<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      Configuration conf, String[] pathSpecs, HttpServer.Builder b)<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      throws FileNotFoundException, IOException {<a name="line.583"></a>
+<span class="sourceLineNo">584</span><a name="line.584"></a>
+<span class="sourceLineNo">585</span>    Preconditions.checkNotNull(webAppContext);<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span>    HandlerCollection handlerCollection = new HandlerCollection();<a name="line.587"></a>
+<span class="sourceLineNo">588</span><a name="line.588"></a>
+<span class="sourceLineNo">589</span>    ContextHandlerCollection contexts = new ContextHandlerCollection();<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    RequestLog requestLog = HttpRequestLog.getRequestLog(name);<a name="line.590"></a>
+<span class="sourceLineNo">591</span><a name="line.591"></a>
+<span class="sourceLineNo">592</span>    if (requestLog != null) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      RequestLogHandler requestLogHandler = new RequestLogHandler();<a name="line.593"></a>
+<span class="sourceLineNo">594</span>      requestLogHandler.setRequestLog(requestLog);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      handlerCollection.addHandler(requestLogHandler);<a name="line.595"></a>
+<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span>    final String appDir = getWebAppsPath(name);<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>    handlerCollection.addHandler(contexts);<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    handlerCollection.addHandler(webAppContext);<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span>    webServer.setHandler(handlerCollection);<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>    webAppContext.setAttribute(ADMINS_ACL, adminsAcl);<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>    // Default apps need to be set first, so that all filters are applied to them.<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    // Because they're added to defaultContexts, we need them there before we start<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    // adding filters<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    addDefaultApps(contexts, appDir, conf);<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>    addGlobalFilter("safety", QuotingInputFilter.class.getName(), null);<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span>    addGlobalFilter("clickjackingprevention",<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        ClickjackingPreventionFilter.class.getName(),<a name="line.615"></a>
+<span class="sourceLineNo">616</span>        ClickjackingPreventionFilter.getDefaultParameters(conf));<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span>    addGlobalFilter("securityheaders",<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        SecurityHeadersFilter.class.getName(),<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        SecurityHeadersFilter.getDefaultParameters(conf));<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span>    // But security needs to be enabled prior to adding the other servlets<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    if (authenticationEnabled) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>      initSpnego(conf, hostName, b.usernameConfKey, b.keytabConfKey, b.kerberosNameRulesKey,<a name="line.624"></a>
+<span class="sourceLineNo">625</span>          b.signatureSecretFileKey);<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>    final FilterInitializer[] initializers = getFilterInitializers(conf);<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    if (initializers != null) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      conf = new Configuration(conf);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      conf.set(BIND_ADDRESS, hostName);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      for (FilterInitializer c : initializers) {<a name="line.632"></a>
+<span class="sourceLineNo">633</span>        c.initFilter(this, conf);<a name="line.633"></a>
+<span class="sourceLineNo">634</span>      }<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    }<a name="line.635"></a>
+<span class="sourceLineNo">636</span><a name="line.636"></a>
+<span class="sourceLineNo">637</span>    addDefaultServlets(contexts, conf);<a name="line.637"></a>
+<span class="sourceLineNo">638</span><a name="line.638"></a>
+<span class="sourceLineNo">639</span>    if (pathSpecs != null) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      for (String path : pathSpecs) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>        LOG.info("adding path spec: " + path);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>        addFilterPathMapping(path, webAppContext);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      }<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    }<a name="line.644"></a>
+<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
+<span class="sourceLineNo">646</span><a name="line.646"></a>
+<span class="sourceLineNo">647</span>  private void addManagedListener(ServerConnector connector) {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    listeners.add(new ListenerInfo(true, connector));<a name="line.648"></a>
+<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>  private static WebAppContext createWebAppContext(String name,<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      Configuration conf, AccessControlList adminsAcl, final String appDir) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>    WebAppContext ctx = new WebAppContext();<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    ctx.setDisplayName(name);<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    ctx.setContextPath("/");<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    ctx.setWar(appDir + "/" + name);<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    ctx.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    // for org.apache.hadoop.metrics.MetricsServlet<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    ctx.getServletContext().setAttribute(<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      org.apache.hadoop.http.HttpServer2.CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.660"></a>
+<span class="sourceLineNo">661</span>    ctx.getServletContext().setAttribute(ADMINS_ACL, adminsAcl);<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    addNoCacheFilter(ctx);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    return ctx;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  }<a name="line.664"></a>
+<span class="sourceLineNo">665</span><a name="line.665"></a>
+<span class="sourceLineNo">666</span>  /**<a name="line.666"></a>
+<span class="sourceLineNo">667</span>   * Construct and configure an instance of {@link GzipHandler}. With complex<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   * multi-{@link WebAppContext} configurations, it's easiest to apply this handler directly to the<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * instance of {@link Server} near the end of its configuration, something like<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * &lt;pre&gt;<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   *    Server server = new Server();<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   *    //...<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   *    server.setHandler(buildGzipHandler(server.getHandler()));<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   *    server.start();<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   * &lt;/pre&gt;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   */<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  public static GzipHandler buildGzipHandler(final Handler wrapped) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    final GzipHandler gzipHandler = new GzipHandler();<a name="line.678"></a>
+<span class="sourceLineNo">679</span>    gzipHandler.setHandler(wrapped);<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    return gzipHandler;<a name="line.680"></a>
+<span class="sourceLineNo">681</span>  }<a name="line.681"></a>
+<span class="sourceLineNo">682</span><a name="line.682"></a>
+<span class="sourceLineNo">683</span>  private static void addNoCacheFilter(WebAppContext ctxt) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    defineFilter(ctxt, NO_CACHE_FILTER, NoCacheFilter.class.getName(),<a name="line.684"></a>
+<span class="sourceLineNo">685</span>        Collections.&lt;String, String&gt; emptyMap(), new String[] { "/*" });<a name="line.685"></a>
 <span class="sourceLineNo">686</span>  }<a name="line.686"></a>
 <span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>  /**<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   * Add default apps.<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * @param appDir The application directory<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   */<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  protected void addDefaultApps(ContextHandlerCollection parent,<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      final String appDir, Configuration conf) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // set up the context for "/logs/" if "hadoop.log.dir" property is defined.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    String logDir = this.logDir;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    if (logDir == null) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      logDir = System.getProperty("hadoop.log.dir");<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    if (logDir != null) {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      ServletContextHandler logContext = new ServletContextHandler(parent, "/logs");<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      logContext.addServlet(AdminAuthorizedServlet.class, "/*");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      logContext.setResourceBase(logDir);<a name="line.702"></a>
-<span class="sourceLineNo">703</span><a name="line.703"></a>
-<span class="sourceLineNo">704</span>      if (conf.getBoolean(<a name="line.704"></a>
-<span class="sourceLineNo">705</span>          ServerConfigurationKeys.HBASE_JETTY_LOGS_SERVE_ALIASES,<a name="line.705"></a>
-<span class="sourceLineNo">706</span>          ServerConfigurationKeys.DEFAULT_HBASE_JETTY_LOGS_SERVE_ALIASES)) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>        Map&lt;String, String&gt; params = logContext.getInitParams();<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        params.put(<a name="line.708"></a>
-<span class="sourceLineNo">709</span>            "org.mortbay.jetty.servlet.Default.aliases", "true");<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      }<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      logContext.setDisplayName("logs");<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      setContextAttributes(logContext, conf);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      defaultContexts.put(logContext, true);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    // set up the context for "/static/*"<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    ServletContextHandler staticContext = new ServletContextHandler(parent, "/static");<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    staticContext.setResourceBase(appDir + "/static");<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    staticContext.addServlet(DefaultServlet.class, "/*");<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    staticContext.setDisplayName("static");<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    setContextAttributes(staticContext, conf);<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    defaultContexts.put(staticContext, true);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  private void setContextAttributes(ServletContextHandler context, Configuration conf) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    context.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    context.getServletContext().setAttribute(ADMINS_ACL, adminsAcl);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>  /**<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * Add default servlets.<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   */<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  protected void addDefaultServlets(<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      ContextHandlerCollection contexts, Configuration conf) throws IOException {<a name="line.733"></a>
-<span class="sourceLineNo">734</span>    // set up default servlets<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    addPrivilegedServlet("stacks", "/stacks", StackServlet.class);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    addPrivilegedServlet("logLevel", "/logLevel", LogLevel.Servlet.class);<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    // Hadoop3 has moved completely to metrics2, and  dropped support for Metrics v1's<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    // MetricsServlet (see HADOOP-12504).  We'll using reflection to load if against hadoop2.<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    // Remove when we drop support for hbase on hadoop2.x.<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    try {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      Class&lt;?&gt; clz = Class.forName("org.apache.hadoop.metrics.MetricsServlet");<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      addPrivilegedServlet("metrics", "/metrics", clz.asSubclass(HttpServlet.class));<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    } catch (Exception e) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      // do nothing<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    }<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    addPrivilegedServlet("jmx", "/jmx", JMXJsonServlet.class);<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    // While we don't expect users to have sensitive information in their configuration, they<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    // might. Give them an option to not expose the service configuration to all users.<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    if (conf.getBoolean(HTTP_PRIVILEGED_CONF_KEY, HTTP_PRIVILEGED_CONF_DEFAULT)) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      addPrivilegedServlet("conf", "/conf", ConfServlet.class);<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    } else {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      addUnprivilegedServlet("conf", "/conf", ConfServlet.class);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    }<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    final String asyncProfilerHome = ProfileServlet.getAsyncProfilerHome();<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    if (asyncProfilerHome != null &amp;&amp; !asyncProfilerHome.trim().isEmpty()) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      addPrivilegedServlet("prof", "/prof", ProfileServlet.class);<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      Path tmpDir = Paths.get(ProfileServlet.OUTPUT_DIR);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      if (Files.notExists(tmpDir)) {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>        Files.createDirectories(tmpDir);<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      }<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      ServletContextHandler genCtx = new ServletContextHandler(contexts, "/prof-output");<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      genCtx.addServlet(ProfileOutputServlet.class, "/*");<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      genCtx.setResourceBase(tmpDir.toAbsolutePath().toString());<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      genCtx.setDisplayName("prof-output");<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    } else {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>      addUnprivilegedServlet("prof", "/prof", ProfileServlet.DisabledServlet.class);<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      LOG.info("ASYNC_PROFILER_HOME environment variable and async.profiler.home system property " +<a name="line.767"></a>
-<span class="sourceLineNo">768</span>        "not specified. Disabling /prof endpoint.");<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    }<a name="line.769"></a>
-<span class="sourceLineNo">770</span>  }<a name="line.770"></a>
-<span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>  /**<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   * Set a value in the webapp context. These values are available to the jsp<a name="line.773"></a>
-<span class="sourceLineNo">774</span>   * pages as "application.getAttribute(name)".<a name="line.774"></a>
-<span class="sourceLineNo">775</span>   * @param name The name of the attribute<a name="line.775"></a>
-<span class="sourceLineNo">776</span>   * @param value The value of the attribute<a name="line.776"></a>
-<span class="sourceLineNo">777</span>   */<a name="line.777"></a>
-<span class="sourceLineNo">778</span>  public void setAttribute(String name, Object value) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    webAppContext.setAttribute(name, value);<a name="line.779"></a>
-<span class="sourceLineNo">780</span>  }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>  /**<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   * Add a Jersey resource package.<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * @param packageName The Java package name containing the Jersey resource.<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * @param pathSpec The path spec for the servlet<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   */<a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public void addJerseyResourcePackage(final String packageName,<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      final String pathSpec) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    LOG.info("addJerseyResourcePackage: packageName=" + packageName<a name="line.789"></a>
-<span class="sourceLineNo">790</span>        + ", pathSpec=" + pathSpec);<a name="line.790"></a>
-<span class="sourceLineNo">791</span><a name="line.791"></a>
-<span class="sourceLineNo">792</span>    ResourceConfig application = new ResourceConfig().packages(packageName);<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    final ServletHolder sh = new ServletHolder(new ServletContainer(application));<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    webAppContext.addServlet(sh, pathSpec);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>  /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * Adds a servlet in the server that any user can access. This method differs from<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * {@link #addPrivilegedServlet(String, String, Class)} in that any authenticated user<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   * can interact with the servlet added by this method.<a name="line.800"></a>
-<span class="sourceLineNo">801</span>   * @param name The name of the servlet (can be passed as null)<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @param pathSpec The path spec for the servlet<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   * @param clazz The servlet class<a name="line.803"></a>
+<span class="sourceLineNo">688</span>  /** Get an array of FilterConfiguration specified in the conf */<a name="line.688"></a>
+<span class="sourceLineNo">689</span>  private static FilterInitializer[] getFilterInitializers(Configuration conf) {<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    if (conf == null) {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>      return null;<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
+<span class="sourceLineNo">693</span><a name="line.693"></a>
+<span class="sourceLineNo">694</span>    Class&lt;?&gt;[] classes = conf.getClasses(FILTER_INITIALIZERS_PROPERTY);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    if (classes == null) {<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      return null;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>    FilterInitializer[] initializers = new FilterInitializer[classes.length];<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    for(int i = 0; i &lt; classes.length; i++) {<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      initializers[i] = (FilterInitializer)ReflectionUtils.newInstance(classes[i]);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    return initializers;<a name="line.703"></a>
+<span class="sourceLineNo">704</span>  }<a name="line.704"></a>
+<span class="sourceLineNo">705</span><a name="line.705"></a>
+<span class="sourceLineNo">706</span>  /**<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   * Add default apps.<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * @param appDir The application directory<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   */<a name="line.709"></a>
+<span class="sourceLineNo">710</span>  protected void addDefaultApps(ContextHandlerCollection parent,<a name="line.710"></a>
+<span class="sourceLineNo">711</span>      final String appDir, Configuration conf) {<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    // set up the context for "/logs/" if "hadoop.log.dir" property is defined.<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    String logDir = this.logDir;<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    if (logDir == null) {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      logDir = System.getProperty("hadoop.log.dir");<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    if (logDir != null) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      ServletContextHandler logContext = new ServletContextHandler(parent, "/logs");<a name="line.718"></a>
+<span class="sourceLineNo">719</span>      logContext.addServlet(AdminAuthorizedServlet.class, "/*");<a name="line.719"></a>
+<span class="sourceLineNo">720</span>      logContext.setResourceBase(logDir);<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>      if (conf.getBoolean(<a name="line.722"></a>
+<span class="sourceLineNo">723</span>          ServerConfigurationKeys.HBASE_JETTY_LOGS_SERVE_ALIASES,<a name="line.723"></a>
+<span class="sourceLineNo">724</span>          ServerConfigurationKeys.DEFAULT_HBASE_JETTY_LOGS_SERVE_ALIASES)) {<a name="line.724"></a>
+<span class="sourceLineNo">725</span>        Map&lt;String, String&gt; params = logContext.getInitParams();<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        params.put(<a name="line.726"></a>
+<span class="sourceLineNo">727</span>            "org.mortbay.jetty.servlet.Default.aliases", "true");<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
+<span class="sourceLineNo">729</span>      logContext.setDisplayName("logs");<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      setContextAttributes(logContext, conf);<a name="line.730"></a>
+<span class="sourceLineNo">731</span>      defaultContexts.put(logContext, true);<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    }<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    // set up the context for "/static/*"<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    ServletContextHandler staticContext = new ServletContextHandler(parent, "/static");<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    staticContext.setResourceBase(appDir + "/static");<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    staticContext.addServlet(DefaultServlet.class, "/*");<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    staticContext.setDisplayName("static");<a name="line.737"></a>
+<span class="sourceLineNo">738</span>    setContextAttributes(staticContext, conf);<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    defaultContexts.put(staticContext, true);<a name="line.739"></a>
+<span class="sourceLineNo">740</span>  }<a name="line.740"></a>
+<span class="sourceLineNo">741</span><a name="line.741"></a>
+<span class="sourceLineNo">742</span>  private void setContextAttributes(ServletContextHandler context, Configuration conf) {<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    context.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.743"></a>
+<span class="sourceLineNo">744</span>    context.getServletContext().setAttribute(ADMINS_ACL, adminsAcl);<a name="line.744"></a>
+<span class="sourceLineNo">745</span>  }<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span>  /**<a name="line.747"></a>
+<span class="sourceLineNo">748</span>   * Add default servlets.<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   */<a name="line.749"></a>
+<span class="sourceLineNo">750</span>  protected void addDefaultServlets(<a name="line.750"></a>
+<span class="sourceLineNo">751</span>      ContextHandlerCollection contexts, Configuration conf) throws IOException {<a name="line.751"></a>
+<span class="sourceLineNo">752</span>    // set up default servlets<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    addPrivilegedServlet("stacks", "/stacks", StackServlet.class);<a name="line.753"></a>
+<span class="sourceLineNo">754</span>    addPrivilegedServlet("logLevel", "/logLevel", LogLevel.Servlet.class);<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    // Hadoop3 has moved completely to metrics2, and  dropped support for Metrics v1's<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    // MetricsServlet (see HADOOP-12504).  We'll using reflection to load if against hadoop2.<a name="line.756"></a>
+<span class="sourceLineNo">757</span>    // Remove when we drop support for hbase on hadoop2.x.<a name="line.757"></a>
+<span class="sourceLineNo">758</span>    try {<a name="line.758"></a>
+<span class="sourceLineNo">759</span>      Class&lt;?&gt; clz = Class.forName("org.apache.hadoop.metrics.MetricsServlet");<a name="line.759"></a>
+<span class="sourceLineNo">760</span>      addPrivilegedServlet("metrics", "/metrics", clz.asSubclass(HttpServlet.class));<a name="line.760"></a>
+<span class="sourceLineNo">761</span>    } catch (Exception e) {<a name="line.761"></a>
+<span class="sourceLineNo">762</span>      // do nothing<a name="line.762"></a>
+<span class="sourceLineNo">763</span>    }<a name="line.763"></a>
+<span class="sourceLineNo">764</span>    addPrivilegedServlet("jmx", "/jmx", JMXJsonServlet.class);<a name="line.764"></a>
+<span class="sourceLineNo">765</span>    // While we don't expect users to have sensitive information in their configuration, they<a name="line.765"></a>
+<span class="sourceLineNo">766</span>    // might. Give them an option to not expose the service configuration to all users.<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    if (conf.getBoolean(HTTP_PRIVILEGED_CONF_KEY, HTTP_PRIVILEGED_CONF_DEFAULT)) {<a name="line.767"></a>
+<span class="sourceLineNo">768</span>      addPrivilegedServlet("conf", "/conf", ConfServlet.class);<a name="line.768"></a>
+<span class="sourceLineNo">769</span>    } else {<a name="line.769"></a>
+<span class="sourceLineNo">770</span>      addUnprivilegedServlet("conf", "/conf", ConfServlet.class);<a name="line.770"></a>
+<span class="sourceLineNo">771</span>    }<a name="line.771"></a>
+<span class="sourceLineNo">772</span>    final String asyncProfilerHome = ProfileServlet.getAsyncProfilerHome();<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    if (asyncProfilerHome != null &amp;&amp; !asyncProfilerHome.trim().isEmpty()) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      addPrivilegedServlet("prof", "/prof", ProfileServlet.class);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      Path tmpDir = Paths.get(ProfileServlet.OUTPUT_DIR);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      if (Files.notExists(tmpDir)) {<a name="line.776"></a>
+<span class="sourceLineNo">777</span>        Files.createDirectories(tmpDir);<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      }<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      ServletContextHandler genCtx = new ServletContextHandler(contexts, "/prof-output");<a name="line.779"></a>
+<span class="sourceLineNo">780</span>      genCtx.addServlet(ProfileOutputServlet.class, "/*");<a name="line.780"></a>
+<span class="sourceLineNo">781</span>      genCtx.setResourceBase(tmpDir.toAbsolutePath().toString());<a name="line.781"></a>
+<span class="sourceLineNo">782</span>      genCtx.setDisplayName("prof-output");<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    } else {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>      addUnprivilegedServlet("prof", "/prof", ProfileServlet.DisabledServlet.class);<a name="line.784"></a>
+<span class="sourceLineNo">785</span>      LOG.info("ASYNC_PROFILER_HOME environment variable and async.profiler.home system property " +<a name="line.785"></a>
+<span class="sourceLineNo">786</span>        "not specified. Disabling /prof endpoint.");<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    }<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  }<a name="line.788"></a>
+<span class="sourceLineNo">789</span><a name="line.789"></a>
+<span class="sourceLineNo">790</span>  /**<a name="line.790"></a>
+<span class="sourceLineNo">791</span>   * Set a value in the webapp context. These values are available to the jsp<a name="line.791"></a>
+<span class="sourceLineNo">792</span>   * pages as "application.getAttribute(name)".<a name="line.792"></a>
+<span class="sourceLineNo">793</span>   * @param name The name of the attribute<a name="line.793"></a>
+<span class="sourceLineNo">794</span>   * @param value The value of the attribute<a name="line.794"></a>
+<span class="sourceLineNo">795</span>   */<a name="line.795"></a>
+<span class="sourceLineNo">796</span>  public void setAttribute(String name, Object value) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>    webAppContext.setAttribute(name, value);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>  }<a name="line.798"></a>
+<span class="sourceLineNo">799</span><a name="line.799"></a>
+<span class="sourceLineNo">800</span>  /**<a name="line.800"></a>
+<span class="sourceLineNo">801</span>   * Add a Jersey resource package.<a name="line.801"></a>
+<span class="sourceLineNo">802</span>   * @param packageName The Java package name containing the Jersey resource.<a name="line.802"></a>
+<span class="sourceLineNo">803</span>   * @param pathSpec The path spec for the servlet<a name="line.803"></a>
 <span class="sourceLineNo">804</span>   */<a name="line.804"></a>
-<span class="sourceLineNo">805</span>  public void addUnprivilegedServlet(String name, String pathSpec,<a name="line.805"></a>
-<span class="sourceLineNo">806</span>      Class&lt;? extends HttpServlet&gt; clazz) {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    addServletWithAuth(name, pathSpec, clazz, false);<a name="line.807"></a>
-<span class="sourceLineNo">808</span>  }<a name="line.808"></a>
+<span class="sourceLineNo">805</span>  public void addJerseyResourcePackage(final String packageName,<a name="line.805"></a>
+<span class="sourceLineNo">806</span>      final String pathSpec) {<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    LOG.info("addJerseyResourcePackage: packageName=" + packageName<a name="line.807"></a>
+<span class="sourceLineNo">808</span>        + ", pathSpec=" + pathSpec);<a name="line.808"></a>
 <span class="sourceLineNo">809</span><a name="line.809"></a>
-<span class="sourceLineNo">810</span>  /**<a name="line.810"></a>
-<span class="sourceLineNo">811</span>   * Adds a servlet in the server that only administrators can access. This method differs from<a name="line.811"></a>
-<span class="sourceLineNo">812</span>   * {@link #addUnprivilegedServlet(String, String, Class)} in that only those authenticated user<a name="line.812"></a>
-<span class="sourceLineNo">813</span>   * who are identified as administrators can interact with the servlet added by this method.<a name="line.813"></a>
-<span class="sourceLineNo">814</span>   */<a name="line.814"></a>
-<span class="sourceLineNo">815</span>  public void addPrivilegedServlet(String name, String pathSpec,<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      Class&lt;? extends HttpServlet&gt; clazz) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    addServletWithAuth(name, pathSpec, clazz, true);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>  }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span>  /**<a name="line.820"></a>
-<span class="sourceLineNo">821</span>   * Internal method to add a servlet to the HTTP server. Developers should not call this method<a name="line.821"></a>
-<span class="sourceLineNo">822</span>   * directly, but invoke it via {@link #addUnprivilegedServlet(String, String, Class)} or<a name="line.822"></a>
-<span class="sourceLineNo">823</span>   * {@link #addPrivilegedServlet(String, String, Class)}.<a name="line.823"></a>
-<span class="sourceLineNo">824</span>   */<a name="line.824"></a>
-<span class="sourceLineNo">825</span>  void addServletWithAuth(String name, String pathSpec,<a name="line.825"></a>
-<span class="sourceLineNo">826</span>      Class&lt;? extends HttpServlet&gt; clazz, boolean requireAuthz) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    addInternalServlet(name, pathSpec, clazz, requireAuthz);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    addFilterPathMapping(pathSpec, webAppContext);<a name="line.828"></a>
-<span class="sourceLineNo">829</span>  }<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>  /**<a name="line.831"></a>
-<span class="sourceLineNo">832</span>   * Add an internal servlet in the server, specifying whether or not to<a name="line.832"></a>
-<span class="sourceLineNo">833</span>   * protect with Kerberos authentication.<a name="line.833"></a>
-<span class="sourceLineNo">834</span>   * Note: This method is to be used for adding servlets that facilitate<a name="line.834"></a>
-<span class="sourceLineNo">835</span>   * internal communication and not for user facing functionality. For<a name="line.835"></a>
-<span class="sourceLineNo">836</span>   * servlets added using this method, filters (except internal Kerberos<a name="line.836"></a>
-<span class="sourceLineNo">837</span>   * filters) are not enabled.<a name="line.837"></a>
-<span class="sourceLineNo">838</span>   *<a name="line.838"></a>
-<span class="sourceLineNo">839</span>   * @param name The name of the servlet (can be passed as null)<a name="line.839"></a>
-<span class="sourceLineNo">840</span>   * @param pathSpec The path spec for the servlet<a name="line.840"></a>
-<span class="sourceLineNo">841</span>   * @param clazz The servlet class<a name="line.841"></a>
-<span class="sourceLineNo">842</span>   * @param requireAuth Require Kerberos authenticate to access servlet<a name="line.842"></a>
-<span class="sourceLineNo">843</span>   */<a name="line.843"></a>
-<span class="sourceLineNo">844</span>  void addInternalServlet(String name, String pathSpec,<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      Class&lt;? extends HttpServlet&gt; clazz, boolean requireAuthz) {<a name="line.845"></a>
-<span class="sourceLineNo">846</span>    ServletHolder holder = new ServletHolder(clazz);<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    if (name != null) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>      holder.setName(name);<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    }<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    if (authenticationEnabled &amp;&amp; requireAuthz) {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      FilterHolder filter = new FilterHolder(AdminAuthorizedFilter.class);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      filter.setName(AdminAuthorizedFilter.class.getSimpleName());<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      FilterMapping fmap = new FilterMapping();<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      fmap.setPathSpec(pathSpec);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>      fmap.setDispatches(FilterMapping.ALL);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>      fmap.setFilterName(AdminAuthorizedFilter.class.getSimpleName());<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      webAppContext.getServletHandler().addFilter(filter, fmap);<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    }<a name="line.858"></a>
-<span class="sourceLineNo">859</span>    webAppContext.getSessionHandler().getSessionCookieConfig().setHttpOnly(true);<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    webAppContext.getSessionHandler().getSessionCookieConfig().setSecure(true);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    webAppContext.addServlet(holder, pathSpec);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  }<a name="line.862"></a>
-<span class="sourceLineNo">863</span><a name="line.863"></a>
-<span class="sourceLineNo">864</span>  @Override<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  public void addFilter(String name, String classname, Map&lt;String, String&gt; parameters) {<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    final String[] USER_FACING_URLS = { "*.html", "*.jsp" };<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    defineFilter(webAppContext, name, classname, parameters, USER_FACING_URLS);<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    LOG.info("Added filter " + name + " (class=" + classname<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        + ") to context " + webAppContext.getDisplayName());<a name="line.869"></a>
-<span class="sourceLineNo">870</span>    final String[] ALL_URLS = { "/*" };<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    for (Map.Entry&lt;ServletContextHandler, Boolean&gt; e : defaultContexts.entrySet()) {<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      if (e.getValue()) {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>        ServletContextHandler handler = e.getKey();<a name="line.873"></a>
-<span class="sourceLineNo">874</span>        defineFilter(handler, name, classname, parameters, ALL_URLS);<a name="line.874"></a>
-<span class="sourceLineNo">875</span>        LOG.info("Added filter " + name + " (class=" + classname<a name="line.875"></a>
-<span class="sourceLineNo">876</span>            + ") to context " + handler.getDisplayName());<a name="line.876"></a>
-<span class="sourceLineNo">877</span>      }<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    }<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    filterNames.add(name);<a name="line.879"></a>
+<span class="sourceLineNo">810</span>    ResourceConfig application = new ResourceConfig().packages(packageName);<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    final ServletHolder sh = new ServletHolder(new ServletContainer(application));<a name="line.811"></a>
+<span class="sourceLineNo">812</span>    webAppContext.addServlet(sh, pathSpec);<a name="line.812"></a>
+<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span>  /**<a name="line.815"></a>
+<span class="sourceLineNo">816</span>   * Adds a servlet in the server that any user can access. This method differs from<a name="line.816"></a>
+<span class="sourceLineNo">817</span>   * {@link #addPrivilegedServlet(String, String, Class)} in that any authenticated user<a name="line.817"></a>
+<span class="sourceLineNo">818</span>   * can interact with the servlet added by this method.<a name="line.818"></a>
+<span class="sourceLineNo">819</span>   * @param name The name of the servlet (can be passed as null)<a name="line.819"></a>
+<span class="sourceLineNo">820</span>   * @param pathSpec The path spec for the servlet<a name="line.820"></a>
+<span class="sourceLineNo">821</span>   * @param clazz The servlet class<a name="line.821"></a>
+<span class="sourceLineNo">822</span>   */<a name="line.822"></a>
+<span class="sourceLineNo">823</span>  public void addUnprivilegedServlet(String name, String pathSpec,<a name="line.823"></a>
+<span class="sourceLineNo">824</span>      Class&lt;? extends HttpServlet&gt; clazz) {<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    addServletWithAuth(name, pathSpec, clazz, false);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>  }<a name="line.826"></a>
+<span class="sourceLineNo">827</span><a name="line.827"></a>
+<span class="sourceLineNo">828</span>  /**<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * Adds a servlet in the server that only administrators can access. This method differs from<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   * {@link #addUnprivilegedServlet(String, String, Class)} in that only those authenticated user<a name="line.830"></a>
+<span class="sourceLineNo">831</span>   * who are identified as administrators can interact with the servlet added by this method.<a name="line.831"></a>
+<span class="sourceLineNo">832</span>   */<a name="line.832"></a>
+<span class="sourceLineNo">833</span>  public void addPrivilegedServlet(String name, String pathSpec,<a name="line.833"></a>
+<span class="sourceLineNo">834</span>      Class&lt;? extends HttpServlet&gt; clazz) {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    addServletWithAuth(name, pathSpec, clazz, true);<a name="line.835"></a>
+<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
+<span class="sourceLineNo">837</span><a name="line.837"></a>
+<span class="sourceLineNo">838</span>  /**<a name="line.838"></a>
+<span class="sourceLineNo">839</span>   * Internal method to add a servlet to the HTTP server. Developers should not call this method<a name="line.839"></a>
+<span class="sourceLineNo">840</span>   * directly, but invoke it via {@link #addUnprivilegedServlet(String, String, Class)} or<a name="line.840"></a>
+<span class="sourceLineNo">841</span>   * {@link #addPrivilegedServlet(String, String, Class)}.<a name="line.841"></a>
+<span class="sourceLineNo">842</span>   */<a name="line.842"></a>
+<span class="sourceLineNo">843</span>  void addServletWithAuth(String name, String pathSpec,<a name="line.843"></a>
+<span class="sourceLineNo">844</span>      Class&lt;? extends HttpServlet&gt; clazz, boolean requireAuthz) {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    addInternalServlet(name, pathSpec, clazz, requireAuthz);<a name="line.845"></a>
+<span class="sourceLineNo">846</span>    addFilterPathMapping(pathSpec, webAppContext);<a name="line.846"></a>
+<span class="sourceLineNo">847</span>  }<a name="line.847"></a>
+<span class="sourceLineNo">848</span><a name="line.848"></a>
+<span class="sourceLineNo">849</span>  /**<a name="line.849"></a>
+<span class="sourceLineNo">850</span>   * Add an internal servlet in the server, specifying whether or not to<a name="line.850"></a>
+<span class="sourceLineNo">851</span>   * protect with Kerberos authentication.<a name="line.851"></a>
+<span class="sourceLineNo">852</span>   * Note: This method is to be used for adding servlets that facilitate<a name="line.852"></a>
+<span class="sourceLineNo">853</span>   * internal communication and not for user facing functionality. For<a name="line.853"></a>
+<span class="sourceLineNo">854</span>   * servlets added using this method, filters (except internal Kerberos<a name="line.854"></a>
+<span class="sourceLineNo">855</span>   * filters) are not enabled.<a name="line.855"></a>
+<span class="sourceLineNo">856</span>   *<a name="line.856"></a>
+<span class="sourceLineNo">857</span>   * @param name The name of the servlet (can be passed as null)<a name="line.857"></a>
+<span class="sourceLineNo">858</span>   * @param pathSpec The path spec for the servlet<a name="line.858"></a>
+<span class="sourceLineNo">859</span>   * @param clazz The servlet class<a name="line.859"></a>
+<span class="sourceLineNo">860</span>   * @param requireAuth Require Kerberos authenticate to access servlet<a name="line.860"></a>
+<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
+<span class="sourceLineNo">862</span>  void addInternalServlet(String name, String pathSpec,<a name="line.862"></a>
+<span class="sourceLineNo">863</span>      Class&lt;? extends HttpServlet&gt; clazz, boolean requireAuthz) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>    ServletHolder holder = new ServletHolder(clazz);<a name="line.864"></a>
+<span class="sourceLineNo">865</span>    if (name != null) {<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      holder.setName(name);<a name="line.866"></a>
+<span class="sourceLineNo">867</span>    }<a name="line.867"></a>
+<span class="sourceLineNo">868</span>    if (authenticationEnabled &amp;&amp; requireAuthz) {<a name="line.868"></a>
+<span class="sourceLineNo">869</span>      FilterHolder filter = new FilterHolder(AdminAuthorizedFilter.class);<a name="line.869"></a>
+<span class="sourceLineNo">870</span>      filter.setName(AdminAuthorizedFilter.class.getSimpleName());<a name="line.870"></a>
+<span class="sourceLineNo">871</span>      FilterMapping fmap = new FilterMapping();<a name="line.871"></a>
+<span class="sourceLineNo">872</span>      fmap.setPathSpec(pathSpec);<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      fmap.setDispatches(FilterMapping.ALL);<a name="line.873"></a>
+<span class="sourceLineNo">874</span>      fmap.setFilterName(AdminAuthorizedFilter.class.getSimpleName());<a name="line.874"></a>
+<span class="sourceLineNo">875</span>      webAppContext.getServletHandler().addFilter(filter, fmap);<a name="line.875"></a>
+<span class="sourceLineNo">876</span>    }<a name="line.876"></a>
+<span class="sourceLineNo">877</span>    webAppContext.getSessionHandler().getSessionCookieConfig().setHttpOnly(true);<a name="line.877"></a>
+<span class="sourceLineNo">878</span>    webAppContext.getSessionHandler().getSessionCookieConfig().setSecure(true);<a name="line.878"></a>
+<span class="sourceLineNo">879</span>    webAppContext.addServlet(holder, pathSpec);<a name="line.879"></a>
 <span class="sourceLineNo">880</span>  }<a name="line.880"></a>
 <span class="sourceLineNo">881</span><a name="line.881"></a>
 <span class="sourceLineNo">882</span>  @Override<a name="line.882"></a>
-<span class="sourceLineNo">883</span>  public void addGlobalFilter(String name, String classname, Map&lt;String, String&gt; parameters) {<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    final String[] ALL_URLS = { "/*" };<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    defineFilter(webAppContext, name, classname, parameters, ALL_URLS);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    for (ServletContextHandler ctx : defaultContexts.keySet()) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      defineFilter(ctx, name, classname, parameters, ALL_URLS);<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    }<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    LOG.info("Added global filter '" + name + "' (class=" + classname + ")");<a name="line.889"></a>
-<span class="sourceLineNo">890</span>  }<a name="line.890"></a>
-<span class="sourceLineNo">891</span><a name="line.891"></a>
-<span class="sourceLineNo">892</span>  /**<a name="line.892"></a>
-<span class="sourceLineNo">893</span>   * Define a filter for a context and set up default url mappings.<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   */<a name="line.894"></a>
-<span class="sourceLineNo">895</span>  public static void defineFilter(ServletContextHandler handler, String name,<a name="line.895"></a>
-<span class="sourceLineNo">896</span>      String classname, Map&lt;String,String&gt; parameters, String[] urls) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    FilterHolder holder = new FilterHolder();<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    holder.setName(name);<a name="line.898"></a>
-<span class="sourceLineNo">899</span>    holder.setClassName(classname);<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    if (parameters != null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      holder.setInitParameters(parameters);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>    }<a name="line.902"></a>
-<span class="sourceLineNo">903</span>    FilterMapping fmap = new FilterMapping();<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    fmap.setPathSpecs(urls);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    fmap.setDispatches(FilterMapping.ALL);<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    fmap.setFilterName(name);<a name="line.906"></a>
-<span class="sourceLineNo">907</span>    handler.getServletHandler().addFilter(holder, fmap);<a name="line.907"></a>
+<span class="sourceLineNo">883</span>  public void addFilter(String name, String classname, Map&lt;String, String&gt; parameters) {<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    final String[] USER_FACING_URLS = { "*.html", "*.jsp" };<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    defineFilter(webAppContext, name, classname, parameters, USER_FACING_URLS);<a name="line.885"></a>
+<span class="sourceLineNo">886</span>    LOG.info("Added filter " + name + " (class=" + classname<a name="line.886"></a>
+<span class="sourceLineNo">887</span>        + ") to context " + webAppContext.getDisplayName());<a name="line.887"></a>
+<span class="sourceLineNo">888</span>    final String[] ALL_URLS = { "/*" };<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    for (Map.Entry&lt;ServletContextHandler, Boolean&gt; e : defaultContexts.entrySet()) {<a name="line.889"></a>
+<span class="sourceLineNo">890</span>      if (e.getValue()) {<a name="line.890"></a>
+<span class="sourceLineNo">891</span>        ServletContextHandler handler = e.getKey();<a name="line.891"></a>
+<span class="sourceLineNo">892</span>        defineFilter(handler, name, classname, parameters, ALL_URLS);<a name="line.892"></a>
+<span class="sourceLineNo">893</span>        LOG.info("Added filter " + name + " (class=" + classname<a name="line.893"></a>
+<span class="sourceLineNo">894</span>            + ") to context " + handler.getDisplayName());<a name="line.894"></a>
+<span class="sourceLineNo">895</span>      }<a name="line.895"></a>
+<span class="sourceLineNo">896</span>    }<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    filterNames.add(name);<a name="line.897"></a>
+<span class="sourceLineNo">898</span>  }<a name="line.898"></a>
+<span class="sourceLineNo">899</span><a name="line.899"></a>
+<span class="sourceLineNo">900</span>  @Override<a name="line.900"></a>
+<span class="sourceLineNo">901</span>  public void addGlobalFilter(String name, String classname, Map&lt;String, String&gt; parameters) {<a name="line.901"></a>
+<span class="sourceLineNo">902</span>    final String[] ALL_URLS = { "/*" };<a name="line.902"></a>
+<span class="sourceLineNo">903</span>    defineFilter(webAppContext, name, classname, parameters, ALL_URLS);<a name="line.903"></a>
+<span class="sourceLineNo">904</span>    for (ServletContextHandler ctx : defaultContexts.keySet()) {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>      defineFilter(ctx, name, classname, parameters, ALL_URLS);<a name="line.905"></a>
+<span class="sourceLineNo">906</span>    }<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    LOG.info("Added global filter '" + name + "' (class=" + classname + ")");<a name="line.907"></a>
 <span class="sourceLineNo">908</span>  }<a name="line.908"></a>
 <span class="sourceLineNo">909</span><a name="line.909"></a>
 <span class="sourceLineNo">910</span>  /**<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   * Add the path spec to the filter path mapping.<a name="line.911"></a>
-<span class="sourceLineNo">912</span>   * @param pathSpec The path spec<a name="line.912"></a>
-<span class="sourceLineNo">913</span>   * @param webAppCtx The WebApplicationContext to add to<a name="line.913"></a>
-<span class="sourceLineNo">914</span>   */<a name="line.914"></a>
-<span class="sourceLineNo">915</span>  protected void addFilterPathMapping(String pathSpec,<a name="line.915"></a>
-<span class="sourceLineNo">916</span>      WebAppContext webAppCtx) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    for(String name : filterNames) {<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      FilterMapping fmap = new FilterMapping();<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      fmap.setPathSpec(pathSpec);<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      fmap.setFilterName(name);<a name="line.920"></a>
-<span class="sourceLineNo">921</span>      fmap.setDispatches(FilterMapping.ALL);<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      webAppCtx.getServletHandler().addFilterMapping(fmap);<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    }<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>  /**<a name="line.926"></a>
-<span class="sourceLineNo">927</span>   * Get the value in the webapp context.<a name="line.927"></a>
-<span class="sourceLineNo">928</span>   * @param name The name of the attribute<a name="line.928"></a>
-<span class="sourceLineNo">929</span>   * @return The value of the attribute<a name="line.929"></a>
-<span class="sourceLineNo">930</span>   */<a name="line.930"></a>
-<span class="sourceLineNo">931</span>  public Object getAttribute(String name) {<a name="line.931"></a>
-<span class="sourceLineNo">932</span>    return webAppContext.getAttribute(name);<a name="line.932"></a>
-<span class="sourceLineNo">933</span>  }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>  public WebAppContext getWebAppContext(){<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    return this.webAppContext;<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  }<a name="line.937"></a>
-<span class="sourceLineNo">938</span><a name="line.938"></a>
-<span class="sourceLineNo">939</span>  public String getWebAppsPath(String appName) throws FileNotFoundException {<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    return getWebAppsPath(this.appDir, appName);<a name="line.940"></a>
-<span class="sourceLineNo">941</span>  }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span>  /**<a name="line.943"></a>
-<span class="sourceLineNo">944</span>   * Get the pathname to the webapps files.<a name="line.944"></a>
-<span class="sourceLineNo">945</span>   * @param appName eg "secondary" or "datanode"<a name="line.945"></a>
-<span class="sourceLineNo">946</span>   * @return the pathname as a URL<a name="line.946"></a>
-<span class="sourceLineNo">947</span>   * @throws FileNotFoundException if 'webapps' directory cannot be found on CLASSPATH.<a name="line.947"></a>
+<span class="sourceLineNo">911</span>   * Define a filter for a context and set up default url mappings.<a name="line.911"></a>
+<span class="sourceLineNo">912</span>   */<a name="line.912"></a>
+<span class="sourceLineNo">913</span>  public static void defineFilter(ServletContextHandler handler, String name,<a name="line.913"></a>
+<span class="sourceLineNo">914</span>      String classname, Map&lt;String,String&gt; parameters, String[] urls) {<a name="line.914"></a>
+<span class="sourceLineNo">915</span>    FilterHolder holder = new FilterHolder();<a name="line.915"></a>
+<span class="sourceLineNo">916</span>    holder.setName(name);<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    holder.setClassName(classname);<a name="line.917"></a>
+<span class="sourceLineNo">918</span>    if (parameters != null) {<a name="line.918"></a>
+<span class="sourceLineNo">919</span>      holder.setInitParameters(parameters);<a name="line.919"></a>
+<span class="sourceLineNo">920</span>    }<a name="line.920"></a>
+<span class="sourceLineNo">921</span>    FilterMapping fmap = new FilterMapping();<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    fmap.setPathSpecs(urls);<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    fmap.setDispatches(FilterMapping.ALL);<a name="line.923"></a>
+<span class="sourceLineNo">924</span>    fmap.setFilterName(name);<a name="line.924"></a>
+<span class="sourceLineNo">925</span>    handler.getServletHandler().addFilter(holder, fmap);<a name="line.925"></a>
+<span class="sourceLineNo">926</span>  }<a name="line.926"></a>
+<span class="sourceLineNo">927</span><a name="line.927"></a>
+<span class="sourceLineNo">928</span>  /**<a name="line.928"></a>
+<span class="sourceLineNo">929</span>   * Add the path spec to the filter path mapping.<a name="line.929"></a>
+<span class="sourceLineNo">930</span>   * @param pathSpec The path spec<a name="line.930"></a>
+<span class="sourceLineNo">931</span>   * @param webAppCtx The WebApplicationContext to add to<a name="line.931"></a>
+<span class="sourceLineNo">932</span>   */<a name="line.932"></a>
+<span class="sourceLineNo">933</span>  protected void addFilterPathMapping(String pathSpec,<a name="line.933"></a>
+<span class="sourceLineNo">934</span>      WebAppContext webAppCtx) {<a name="line.934"></a>
+<span class="sourceLineNo">935</span>    for(String name : filterNames) {<a name="line.935"></a>
+<span class="sourceLineNo">936</span>      FilterMapping fmap = new FilterMapping();<a name="line.936"></a>
+<span class="sourceLineNo">937</span>      fmap.setPathSpec(pathSpec);<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      fmap.setFilterName(name);<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      fmap.setDispatches(FilterMapping.ALL);<a name="line.939"></a>
+<span class="sourceLineNo">940</span>      webAppCtx.getServletHandler().addFilterMapping(fmap);<a name="line.940"></a>
+<span class="sourceLineNo">941</span>    }<a name="line.941"></a>
+<span class="sourceLineNo">942</span>  }<a name="line.942"></a>
+<span class="sourceLineNo">943</span><a name="line.943"></a>
+<span class="sourceLineNo">944</span>  /**<a name="line.944"></a>
+<span class="sourceLineNo">945</span>   * Get the value in the webapp context.<a name="line.945"></a>
+<span class="sourceLineNo">946</span>   * @param name The name of the attribute<a name="line.946"></a>
+<span class="sourceLineNo">947</span>   * @return The value of the attribute<a name="line.947"></a>
 <span class="sourceLineNo">948</span>   */<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  protected String getWebAppsPath(String webapps, String appName) throws FileNotFoundException {<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    URL url = getClass().getClassLoader().getResource(webapps + "/" + appName);<a name="line.950"></a>
-<span class="sourceLineNo">951</span><a name="line.951"></a>
-<span class="sourceLineNo">952</span>    if (url == null) {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      throw new FileNotFoundException(webapps + "/" + appName<a name="line.953"></a>
-<span class="sourceLineNo">954</span>              + " not found in CLASSPATH");<a name="line.954"></a>
-<span class="sourceLineNo">955</span>    }<a name="line.955"></a>
+<span class="sourceLineNo">949</span>  public Object getAttribute(String name) {<a name="line.949"></a>
+<span class="sourceLineNo">950</span>    return webAppContext.getAttribute(name);<a name="line.950"></a>
+<span class="sourceLineNo">951</span>  }<a name="line.951"></a>
+<span class="sourceLineNo">952</span><a name="line.952"></a>
+<span class="sourceLineNo">953</span>  public WebAppContext getWebAppContext(){<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    return this.webAppContext;<a name="line.954"></a>
+<span class="sourceLineNo">955</span>  }<a name="line.955"></a>
 <span class="sourceLineNo">956</span><a name="line.956"></a>
-<span class="sourceLineNo">957</span>    String urlString = url.toString();<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    return urlString.substring(0, urlString.lastIndexOf('/'));<a name="line.958"></a>
+<span class="sourceLineNo">957</span>  public String getWebAppsPath(String appName) throws FileNotFoundException {<a name="line.957"></a>
+<span class="sourceLineNo">958</span>    return getWebAppsPath(this.appDir, appName);<a name="line.958"></a>
 <span class="sourceLineNo">959</span>  }<a name="line.959"></a>
 <span class="sourceLineNo">960</span><a name="line.960"></a>
 <span class="sourceLineNo">961</span>  /**<a name="line.961"></a>
-<span class="sourceLineNo">962</span>   * Get the port that the server is on<a name="line.962"></a>
-<span class="sourceLineNo">963</span>   * @return the port<a name="line.963"></a>
-<span class="sourceLineNo">964</span>   * @deprecated Since 0.99.0<a name="line.964"></a>
-<span class="sourceLineNo">965</span>   */<a name="line.965"></a>
-<span class="sourceLineNo">966</span>  @Deprecated<a name="line.966"></a>
-<span class="sourceLineNo">967</span>  public int getPort() {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>    return ((ServerConnector)webServer.getConnectors()[0]).getLocalPort();<a name="line.968"></a>
-<span class="sourceLineNo">969</span>  }<a name="line.969"></a>
-<span class="sourceLineNo">970</span><a name="line.970"></a>
-<span class="sourceLineNo">971</span>  /**<a name="line.971"></a>
-<span class="sourceLineNo">972</span>   * Get the address that corresponds to a particular connector.<a name="line.972"></a>
-<span class="sourceLineNo">973</span>   *<a name="line.973"></a>
-<span class="sourceLineNo">974</span>   * @return the corresponding address for the connector, or null if there's no<a name="line.974"></a>
-<span class="sourceLineNo">975</span>   *         such connector or the connector is not bounded.<a name="line.975"></a>
-<span class="sourceLineNo">976</span>   */<a name="line.976"></a>
-<span class="sourceLineNo">977</span>  public InetSocketAddress getConnectorAddress(int index) {<a name="line.977"></a>
-<span class="sourceLineNo">978</span>    Preconditions.checkArgument(index &gt;= 0);<a name="line.978"></a>
-<span class="sourceLineNo">979</span><a name="line.979"></a>
-<span class="sourceLineNo">980</span>    if (index &gt; webServer.getConnectors().length) {<a name="line.980"></a>
-<span class="sourceLineNo">981</span>      return null;<a name="line.981"></a>
-<span class="sourceLineNo">982</span>    }<a name="line.982"></a>
-<span class="sourceLineNo">983</span><a name="line.983"></a>
-<span class="sourceLineNo">984</span>    ServerConnector c = (ServerConnector)webServer.getConnectors()[index];<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    if (c.getLocalPort() == -1 || c.getLocalPort() == -2) {<a name="line.985"></a>
-<span class="sourceLineNo">986</span>      // -1 if the connector has not been opened<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      // -2 if it has been closed<a name="line.987"></a>
-<span class="sourceLineNo">988</span>      return null;<a name="line.988"></a>
-<span class="sourceLineNo">989</span>    }<a name="line.989"></a>
-<span class="sourceLineNo">990</span><a name="line.990"></a>
-<span class="sourceLineNo">991</span>    return new InetSocketAddress(c.getHost(), c.getLocalPort());<a name="line.991"></a>
-<span class="sourceLineNo">992</span>  }<a name="line.992"></a>
-<span class="sourceLineNo">993</span><a name="line.993"></a>
-<span class="sourceLineNo">994</span>  /**<a name="line.994"></a>
-<span class="sourceLineNo">995</span>   * Set the min, max number of worker threads (simultaneous connections).<a name="line.995"></a>
-<span class="sourceLineNo">996</span>   */<a name="line.996"></a>
-<span class="sourceLineNo">997</span>  public void setThreads(int min, int max) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    QueuedThreadPool pool = (QueuedThreadPool) webServer.getThreadPool();<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    pool.setMinThreads(min);<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>    pool.setMaxThreads(max);<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>  }<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span><a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>  private void initSpnego(Configuration conf, String hostName,<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      String usernameConfKey, String keytabConfKey, String kerberosNameRuleKey,<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>      String signatureSecretKeyFileKey) throws IOException {<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    Map&lt;String, String&gt; params = new HashMap&lt;&gt;();<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    String principalInConf = getOrEmptyString(conf, usernameConfKey);<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>    if (!principalInConf.isEmpty()) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_PRINCIPAL_SUFFIX, SecurityUtil.getServerPrincipal(<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>          principalInConf, hostName));<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>    }<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>    String httpKeytab = getOrEmptyString(conf, keytabConfKey);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>    if (!httpKeytab.isEmpty()) {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_KEYTAB_SUFFIX, httpKeytab);<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    }<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    String kerberosNameRule = getOrEmptyString(conf, kerberosNameRuleKey);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>    if (!kerberosNameRule.isEmpty()) {<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_KRB_NAME_SUFFIX, kerberosNameRule);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    String signatureSecretKeyFile = getOrEmptyString(conf, signatureSecretKeyFileKey);<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>    if (!signatureSecretKeyFile.isEmpty()) {<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>      params.put(HTTP_AUTHENTICATION_SIGNATURE_SECRET_FILE_SUFFIX,<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>          signatureSecretKeyFile);<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    params.put(AuthenticationFilter.AUTH_TYPE, "kerberos");<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>    // Verify that the required options were provided<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    if (isMissing(params.get(HTTP_SPNEGO_AUTHENTICATION_PRINCIPAL_SUFFIX)) ||<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>            isMissing(params.get(HTTP_SPNEGO_AUTHENTICATION_KEYTAB_SUFFIX))) {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      throw new IllegalArgumentException(usernameConfKey + " and "<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>          + keytabConfKey + " are both required in the configuration "<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>          + "to enable SPNEGO/Kerberos authentication for the Web UI");<a name="line.1032"></a>
+<span class="sourceLineNo">962</span>   * Get the pathname to the webapps files.<a name="line.962"></a>
+<span class="sourceLineNo">963</span>   * @param appName eg "secondary" or "datanode"<a name="line.963"></a>
+<span class="sourceLineNo">964</span>   * @return the pathname as a URL<a name="line.964"></a>
+<span class="sourceLineNo">965</span>   * @throws FileNotFoundException if 'webapps' directory cannot be found on CLASSPATH.<a name="line.965"></a>
+<span class="sourceLineNo">966</span>   */<a name="line.966"></a>
+<span class="sourceLineNo">967</span>  protected String getWebAppsPath(String webapps, String appName) throws FileNotFoundException {<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    URL url = getClass().getClassLoader().getResource(webapps + "/" + appName);<a name="line.968"></a>
+<span class="sourceLineNo">969</span><a name="line.969"></a>
+<span class="sourceLineNo">970</span>    if (url == null) {<a name="line.970"></a>
+<span class="sourceLineNo">971</span>      throw new FileNotFoundException(webapps + "/" + appName<a name="line.971"></a>
+<span class="sourceLineNo">972</span>              + " not found in CLASSPATH");<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    }<a name="line.973"></a>
+<span class="sourceLineNo">974</span><a name="line.974"></a>
+<span class="sourceLineNo">975</span>    String urlString = url.toString();<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    return urlString.substring(0, urlString.lastIndexOf('/'));<a name="line.976"></a>
+<span class="sourceLineNo">977</span>  }<a name="line.977"></a>
+<span class="sourceLineNo">978</span><a name="line.978"></a>
+<span class="sourceLineNo">979</span>  /**<a name="line.979"></a>
+<span class="sourceLineNo">980</span>   * Get the port that the server is on<a name="line.980"></a>
+<span class="sourceLineNo">981</span>   * @return the port<a name="line.981"></a>
+<span class="sourceLineNo">982</span>   * @deprecated Since 0.99.0<a name="line.982"></a>
+<span class="sourceLineNo">983</span>   */<a name="line.983"></a>
+<span class="sourceLineNo">984</span>  @Deprecated<a name="line.984"></a>
+<span class="sourceLineNo">985</span>  public int getPort() {<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    return ((ServerConnector)webServer.getConnectors()[0]).getLocalPort();<a name="line.986"></a>
+<span class="sourceLineNo">987</span>  }<a name="line.987"></a>
+<span class="sourceLineNo">988</span><a name="line.988"></a>
+<span class="sourceLineNo">989</span>  /**<a name="line.989"></a>
+<span class="sourceLineNo">990</span>   * Get the address that corresponds to a particular connector.<a name="line.990"></a>
+<span class="sourceLineNo">991</span>   *<a name="line.991"></a>
+<span class="sourceLineNo">992</span>   * @return the corresponding address for the connector, or null if there's no<a name="line.992"></a>
+<span class="sourceLineNo">993</span>   *         such connector or the connector is not bounded.<a name="line.993"></a>
+<span class="sourceLineNo">994</span>   */<a name="line.994"></a>
+<span class="sourceLineNo">995</span>  public InetSocketAddress getConnectorAddress(int index) {<a name="line.995"></a>
+<span class="sourceLineNo">996</span>    Preconditions.checkArgument(index &gt;= 0);<a name="line.996"></a>
+<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">998</span>    if (index &gt; webServer.getConnectors().length) {<a name="line.998"></a>
+<span class="sourceLineNo">999</span>      return null;<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span><a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    ServerConnector c = (ServerConnector)webServer.getConnectors()[index];<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    if (c.getLocalPort() == -1 || c.getLocalPort() == -2) {<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>      // -1 if the connector has not been opened<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      // -2 if it has been closed<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>      return null;<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    }<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span><a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    return new InetSocketAddress(c.getHost(), c.getLocalPort());<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>  }<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span><a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>  /**<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>   * Set the min, max number of worker threads (simultaneous connections).<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>   */<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>  public void setThreads(int min, int max) {<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>    QueuedThreadPool pool = (QueuedThreadPool) webServer.getThreadPool();<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>    pool.setMinThreads(min);<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    pool.setMaxThreads(max);<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>  }<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span><a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>  private void initSpnego(Configuration conf, String hostName,<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>      String usernameConfKey, String keytabConfKey, String kerberosNameRuleKey,<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>      String signatureSecretKeyFileKey) throws IOException {<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    Map&lt;String, String&gt; params = new HashMap&lt;&gt;();<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    String principalInConf = getOrEmptyString(conf, usernameConfKey);<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    if (!principalInConf.isEmpty()) {<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_PRINCIPAL_SUFFIX, SecurityUtil.getServerPrincipal(<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>          principalInConf, hostName));<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>    }<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>    String httpKeytab = getOrEmptyString(conf, keytabConfKey);<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    if (!httpKeytab.isEmpty()) {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_KEYTAB_SUFFIX, httpKeytab);<a name="line.1032"></a>
 <span class="sourceLineNo">1033</span>    }<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span><a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    if (conf.getBoolean(HTTP_SPNEGO_AUTHENTICATION_PROXYUSER_ENABLE_KEY,<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>        HTTP_SPNEGO_AUTHENTICATION_PROXYUSER_ENABLE_DEFAULT)) {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        //Copy/rename standard hadoop proxyuser settings to filter<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>        for(Map.Entry&lt;String, String&gt; proxyEntry :<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>            conf.getPropsWithPrefix(ProxyUsers.CONF_HADOOP_PROXYUSER).entrySet()) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>            params.put(ProxyUserAuthenticationFilter.PROXYUSER_PREFIX + proxyEntry.getKey(),<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>                proxyEntry.getValue());<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>        }<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>        addGlobalFilter(SPNEGO_PROXYUSER_FILTER, ProxyUserAuthenticationFilter.class.getName(), params);<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    } else {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        addGlobalFilter(SPNEGO_FILTER, AuthenticationFilter.class.getName(), params);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    }<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>  }<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span><a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>  /**<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>   * Returns true if the argument is non-null and not whitespace<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>   */<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>  private boolean isMissing(String value) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    if (null == value) {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      return true;<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    }<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    return value.trim().isEmpty();<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>  }<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span><a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>  /**<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>   * Extracts the value for the given key from the configuration of returns a string of<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>   * zero length.<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>   */<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>  private String getOrEmptyString(Configuration conf, String key) {<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    if (null == key) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>      return EMPTY_STRING;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    final String value = conf.get(key.trim());<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    return null == value ? EMPTY_STRING : value;<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  }<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span><a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>  /**<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>   * Start the server. Does not wait for the server to start.<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>   */<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>  public void start() throws IOException {<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    try {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>      try {<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>        openListeners();<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>        webServer.start();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>      } catch (IOException ex) {<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        LOG.info("HttpServer.start() threw a non Bind IOException", ex);<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>        throw ex;<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>      } catch (MultiException ex) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>        LOG.info("HttpServer.start() threw a MultiException", ex);<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>        throw ex;<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      // Make sure there is no handler failures.<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      Handler[] handlers = webServer.getHandlers();<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>      for (int i = 0; i &lt; handlers.length; i++) {<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>        if (handlers[i].isFailed()) {<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>          throw new IOException(<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>              "Problem in starting http server. Server handlers failed");<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>        }<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>      // Make sure there are no errors initializing the context.<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      Throwable unavailableException = webAppContext.getUnavailableException();<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      if (unavailableException != null) {<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        // Have to stop the webserver, or else its non-daemon threads<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>        // will hang forever.<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        webServer.stop();<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>        throw new IOException("Unable to initialize WebAppContext",<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>            unavailableException);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      }<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    } catch (IOException e) {<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      throw e;<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    } catch (InterruptedException e) {<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>      throw (IOException) new InterruptedIOException(<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>          "Interrupted while starting HTTP server").initCause(e);<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    } catch (Exception e) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      throw new IOException("Problem starting http server", e);<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>  }<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span><a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>  private void loadListeners() {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    for (ListenerInfo li : listeners) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      webServer.addConnector(li.listener);<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>    }<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>  }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span><a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  /**<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>   * Open the main listener for the server<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>   * @throws Exception if the listener cannot be opened or the appropriate port is already in use<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>   */<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>  void openListeners() throws Exception {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    for (ListenerInfo li : listeners) {<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>      ServerConnector listener = li.listener;<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>      if (!li.isManaged || (li.listener.getLocalPort() != -1 &amp;&amp; li.listener.getLocalPort() != -2)) {<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>        // This listener is either started externally, or has not been opened, or has been closed<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>        continue;<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>      }<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      int port = listener.getPort();<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>      while (true) {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>        // jetty has a bug where you can't reopen a listener that previously<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>        // failed to open w/o issuing a close first, even if the port is changed<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        try {<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>          listener.close();<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>          listener.open();<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>          LOG.info("Jetty bound to port " + listener.getLocalPort());<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>          break;<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        } catch (IOException ex) {<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>          if(!(ex instanceof BindException) &amp;&amp; !(ex.getCause() instanceof BindException)) {<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>            throw ex;<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>          }<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>          if (port == 0 || !findPort) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>            BindException be = new BindException("Port in use: "<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>                + listener.getHost() + ":" + listener.getPort());<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>            be.initCause(ex);<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>            throw be;<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>          }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>        }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>        // try the next port number<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>        listener.setPort(++port);<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>        Thread.sleep(100);<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      }<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>    }<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>  }<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span><a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>  /**<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>   * stop the server<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>   */<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>  public void stop() throws Exception {<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    MultiException exception = null;<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    for (ListenerInfo li : listeners) {<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>      if (!li.isManaged) {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>        continue;<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>      }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>      try {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>        li.listener.close();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>      } catch (Exception e) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>        LOG.error(<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>            "Error while stopping listener for webapp"<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>                + webAppContext.getDisplayName(), e);<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>        exception = addMultiException(exception, e);<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>      }<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    }<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    try {<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>      // clear &amp; stop webAppContext attributes to avoid memory leaks.<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>      webAppContext.clearAttributes();<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      webAppContext.stop();<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    } catch (Exception e) {<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      LOG.error("Error while stopping web app context for webapp "<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>          + webAppContext.getDisplayName(), e);<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>      exception = addMultiException(exception, e);<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span><a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>    try {<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>      webServer.stop();<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    } catch (Exception e) {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>      LOG.error("Error while stopping web server for webapp "<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>          + webAppContext.getDisplayName(), e);<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>      exception = addMultiException(exception, e);<a name="line.1192"></a>
+<span class="sourceLineNo">1034</span>    String kerberosNameRule = getOrEmptyString(conf, kerberosNameRuleKey);<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>    if (!kerberosNameRule.isEmpty()) {<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_KRB_NAME_SUFFIX, kerberosNameRule);<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>    }<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>    String signatureSecretKeyFile = getOrEmptyString(conf, signatureSecretKeyFileKey);<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>    if (!signatureSecretKeyFile.isEmpty()) {<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      params.put(HTTP_AUTHENTICATION_SIGNATURE_SECRET_FILE_SUFFIX,<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>          signatureSecretKeyFile);<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>    }<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>    params.put(AuthenticationFilter.AUTH_TYPE, "kerberos");<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span><a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    // Verify that the required options were provided<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    if (isMissing(params.get(HTTP_SPNEGO_AUTHENTICATION_PRINCIPAL_SUFFIX)) ||<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>            isMissing(params.get(HTTP_SPNEGO_AUTHENTICATION_KEYTAB_SUFFIX))) {<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>      throw new IllegalArgumentException(usernameConfKey + " and "<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>          + keytabConfKey + " are both required in the configuration "<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          + "to enable SPNEGO/Kerberos authentication for the Web UI");<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>    }<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span><a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>    if (conf.getBoolean(HTTP_SPNEGO_AUTHENTICATION_PROXYUSER_ENABLE_KEY,<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>        HTTP_SPNEGO_AUTHENTICATION_PROXYUSER_ENABLE_DEFAULT)) {<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>        //Copy/rename standard hadoop proxyuser settings to filter<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>        for(Map.Entry&lt;String, String&gt; proxyEntry :<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>            conf.getPropsWithPrefix(ProxyUsers.CONF_HADOOP_PROXYUSER).entrySet()) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>            params.put(ProxyUserAuthenticationFilter.PROXYUSER_PREFIX + proxyEntry.getKey(),<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>                proxyEntry.getValue());<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>        }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>        addGlobalFilter(SPNEGO_PROXYUSER_FILTER, ProxyUserAuthenticationFilter.class.getName(), params);<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    } else {<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>        addGlobalFilter(SPNEGO_FILTER, AuthenticationFilter.class.getName(), params);<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>  }<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span><a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>  /**<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>   * Returns true if the argument is non-null and not whitespace<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>   */<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>  private boolean isMissing(String value) {<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    if (null == value) {<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      return true;<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    }<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    return value.trim().isEmpty();<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>  }<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span><a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>  /**<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>   * Extracts the value for the given key from the configuration of returns a string of<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>   * zero length.<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>   */<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>  private String getOrEmptyString(Configuration conf, String key) {<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    if (null == key) {<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>      return EMPTY_STRING;<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    }<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    final String value = conf.get(key.trim());<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    return null == value ? EMPTY_STRING : value;<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>  }<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span><a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>  /**<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>   * Start the server. Does not wait for the server to start.<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>   */<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>  public void start() throws IOException {<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    try {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      try {<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>        openListeners();<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>        webServer.start();<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      } catch (IOException ex) {<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>        LOG.info("HttpServer.start() threw a non Bind IOException", ex);<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>        throw ex;<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      } catch (MultiException ex) {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>        LOG.info("HttpServer.start() threw a MultiException", ex);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>        throw ex;<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>      }<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      // Make sure there is no handler failures.<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>      Handler[] handlers = webServer.getHandlers();<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      for (int i = 0; i &lt; handlers.length; i++) {<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>        if (handlers[i].isFailed()) {<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>          throw new IOException(<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>              "Problem in starting http server. Server handlers failed");<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>        }<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      }<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      // Make sure there are no errors initializing the context.<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>      Throwable unavailableException = webAppContext.getUnavailableException();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>      if (unavailableException != null) {<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>        // Have to stop the webserver, or else its non-daemon threads<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>        // will hang forever.<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>        webServer.stop();<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>        throw new IOException("Unable to initialize WebAppContext",<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>            unavailableException);<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      }<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    } catch (IOException e) {<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>      throw e;<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>    } catch (InterruptedException e) {<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>      throw (IOException) new InterruptedIOException(<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>          "Interrupted while starting HTTP server").initCause(e);<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    } catch (Exception e) {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>      throw new IOException("Problem starting http server", e);<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    }<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>  }<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span><a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>  private void loadListeners() {<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    for (ListenerInfo li : listeners) {<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>      webServer.addConnector(li.listener);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    }<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>  }<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span><a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>  /**<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>   * Open the main listener for the server<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>   * @throws Exception if the listener cannot be opened or the appropriate port is already in use<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>   */<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>  void openListeners() throws Exception {<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>    for (ListenerInfo li : listeners) {<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>      ServerConnector listener = li.listener;<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>      if (!li.isManaged || (li.listener.getLocalPort() != -1 &amp;&amp; li.listener.getLocalPort() != -2)) {<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>        // This listener is either started externally, or has not been opened, or has been closed<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>        continue;<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>      }<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>      int port = listener.getPort();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>      while (true) {<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>        // jetty has a bug where you can't reopen a listener that previously<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>        // failed to open w/o issuing a close first, even if the port is changed<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>        try {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>          listener.close();<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>          listener.open();<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>          LOG.info("Jetty bound to port " + listener.getLocalPort());<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>          break;<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>        } catch (IOException ex) {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>          if(!(ex instanceof BindException) &amp;&amp; !(ex.getCause() instanceof BindException)) {<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>            throw ex;<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>          }<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>          if (port == 0 || !findPort) {<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>            BindException be = new BindException("Port in use: "<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>                + listener.getHost() + ":" + listener.getPort());<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>            be.initCause(ex);<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>            throw be;<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>          }<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>        }<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>        // try the next port number<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>        listener.setPort(++port);<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>        Thread.sleep(100);<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>      }<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>  }<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span><a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>  /**<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>   * stop the server<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>   */<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>  public void stop() throws Exception {<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    MultiException exception = null;<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    for (ListenerInfo li : listeners) {<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>      if (!li.isManaged) {<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>        continue;<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>      }<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span><a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>      try {<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>        li.listener.close();<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>      } catch (Exception e) {<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>        LOG.error(<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>            "Error while stopping listener for webapp"<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>                + webAppContext.getDisplayName(), e);<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>        exception = addMultiException(exception, e);<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>      }<a name="line.1192"></a>
 <span class="sourceLineNo">1193</span>    }<a name="line.1193"></a>
 <span class="sourceLineNo">1194</span><a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>    if (exception != null) {<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      exception.ifExceptionThrow();<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>    }<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span><a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>  }<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span><a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>  private MultiException addMultiException(MultiException exception, Exception e) {<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>    if(exception == null){<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>      exception = new MultiException();<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>    }<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>    exception.add(e);<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>    return exception;<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>  }<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span><a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>  public void join() throws InterruptedException {<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    webServer.join();<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>  }<a name="line.1211"></a>
+<span class="sourceLineNo">1195</span>    try {<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>      // clear &amp; stop webAppContext attributes to avoid memory leaks.<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>      webAppContext.clearAttributes();<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>      webAppContext.stop();<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>    } catch (Exception e) {<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>      LOG.error("Error while stopping web app context for webapp "<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>          + webAppContext.getDisplayName(), e);<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>      exception = addMultiException(exception, e);<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    }<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span><a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>    try {<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>      webServer.stop();<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>    } catch (Exception e) {<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>      LOG.error("Error while stopping web server for webapp "<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>          + webAppContext.getDisplayName(), e);<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>      exception = addMultiException(exception, e);<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    }<a name="line.1211"></a>
 <span class="sourceLineNo">1212</span><a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>  /**<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>   * Test for the availability of the web server<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>   * @return true if the web server is started, false otherwise<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>   */<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>  public boolean isAlive() {<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>    return webServer != null &amp;&amp; webServer.isStarted();<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  }<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span><a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>  /**<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>   * Return the host and port of the HttpServer, if live<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>   * @return the classname and any HTTP URL<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>   */<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>  @Override<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>  public String toString() {<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>    if (listeners.isEmpty()) {<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      return "Inactive HttpServer";<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>    } else {<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>      StringBuilder sb = new StringBuilder("HttpServer (")<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>        .append(isAlive() ? STATE_DESCRIPTION_ALIVE :<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>                STATE_DESCRIPTION_NOT_LIVE).append("), listening at:");<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>      for (ListenerInfo li : listeners) {<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        ServerConnector l = li.listener;<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>        sb.append(l.getHost()).append(":").append(l.getPort()).append("/,");<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>      return sb.toString();<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>    }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>  }<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span><a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>  /**<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>   * Checks the user has privileges to access to instrumentation servlets.<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>   * &lt;p&gt;<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>   * If &lt;code&gt;hadoop.security.instrumentation.requires.admin&lt;/code&gt; is set to FALSE<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>   * (default value) it always returns TRUE.<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>   * &lt;/p&gt;&lt;p&gt;<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>   * If &lt;code&gt;hadoop.security.instrumentation.requires.admin&lt;/code&gt; is set to TRUE<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>   * it will check that if the current user is in the admin ACLS. If the user is<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>   * in the admin ACLs it returns TRUE, otherwise it returns FALSE.<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>   * &lt;/p&gt;<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>   *<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>   * @param servletContext the servlet context.<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>   * @param request the servlet request.<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>   * @param response the servlet response.<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>   * @return TRUE/FALSE based on the logic decribed above.<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>   */<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>  public static boolean isInstrumentationAccessAllowed(<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>    ServletContext servletContext, HttpServletRequest request,<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>    HttpServletResponse response) throws IOException {<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    Configuration conf =<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      (Configuration) servletContext.getAttribute(CONF_CONTEXT_ATTRIBUTE);<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span><a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>    boolean access = true;<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    boolean adminAccess = conf.getBoolean(<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      CommonConfigurationKeys.HADOOP_SECURITY_INSTRUMENTATION_REQUIRES_ADMIN,<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>      false);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    if (adminAccess) {<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>      access = hasAdministratorAccess(servletContext, request, response);<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>    }<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    return access;<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>  }<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span><a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>  /**<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>   * Does the user sending the HttpServletRequest has the administrator ACLs? If<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   * it isn't the case, response will be modified to send an error to the user.<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>   *<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>   * @param servletContext the {@link ServletContext} to use<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>   * @param request the {@link HttpServletRequest} to check<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>   * @param response used to send the error response if user does not have admin access.<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>   * @return true if admin-authorized, false otherwise<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>   * @throws IOException if an unauthenticated or unauthorized user tries to access the page<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>   */<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>  public static boolean hasAdministratorAccess(<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      ServletContext servletContext, HttpServletRequest request,<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>      HttpServletResponse response) throws IOException {<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>    Configuration conf =<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        (Configuration) servletContext.getAttribute(CONF_CONTEXT_ATTRIBUTE);<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    AccessControlList acl = (AccessControlList) servletContext.getAttribute(ADMINS_ACL);<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span><a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>    return hasAdministratorAccess(conf, acl, request, response);<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>  }<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span><a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>  public static boolean hasAdministratorAccess(Configuration conf, AccessControlList acl,<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>      HttpServletRequest request, HttpServletResponse response) throws IOException {<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    // If there is no authorization, anybody has administrator access.<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    if (!conf.getBoolean(<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>        CommonConfigurationKeys.HADOOP_SECURITY_AUTHORIZATION, false)) {<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>      return true;<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    }<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span><a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>    String remoteUser = request.getRemoteUser();<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    if (remoteUser == null) {<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>      response.sendError(HttpServletResponse.SC_UNAUTHORIZED,<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>                         "Unauthenticated users are not " +<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>                         "authorized to access this page.");<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>      return false;<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    }<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span><a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    if (acl != null &amp;&amp; !userHasAdministratorAccess(acl, remoteUser)) {<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>      response.sendError(HttpServletResponse.SC_FORBIDDEN, "User "<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>          + remoteUser + " is unauthorized to access this page.");<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>      return false;<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>    }<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span><a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    return true;<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>  /**<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>   * Get the admin ACLs from the given ServletContext and check if the given<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * user is in the ACL.<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   *<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>   * @param servletContext the context containing the admin ACL.<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>   * @param remoteUser the remote user to check for.<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>   * @return true if the user is present in the ACL, false if no ACL is set or<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>   *         the user is not present<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>   */<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  public static boolean userHasAdministratorAccess(ServletContext servletContext,<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>      String remoteUser) {<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>    AccessControlList adminsAcl = (AccessControlList) servletContext<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>        .getAttribute(ADMINS_ACL);<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    return userHasAdministratorAccess(adminsAcl, remoteUser);<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>  }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span><a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  public static boolean userHasAdministratorAccess(AccessControlList acl, String remoteUser) {<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    UserGroupInformation remoteUserUGI =<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>        UserGroupInformation.createRemoteUser(remoteUser);<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    return acl != null &amp;&amp; acl.isUserAllowed(remoteUserUGI);<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>  }<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span><a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  /**<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>   * A very simple servlet to serve up a text representation of the current<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>   * stack traces. It both returns the stacks to the caller and logs them.<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>   * Currently the stack traces are done sequentially rather than exactly the<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>   * same data.<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>   */<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>  public static class StackServlet extends HttpServlet {<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    private static final long serialVersionUID = -6284183679759467039L;<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span><a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    @Override<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>    public void doGet(HttpServletRequest request, HttpServletResponse response)<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>      throws ServletException, IOException {<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>      if (!HttpServer.isInstrumentationAccessAllowed(getServletContext(),<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>                                                     request, response)) {<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>        return;<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>      }<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>      response.setContentType("text/plain; charset=UTF-8");<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>      try (PrintStream out = new PrintStream(<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>        response.getOutputStream(), false, "UTF-8")) {<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>        Threads.printThreadInfo(out, "");<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>        out.flush();<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>      }<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>      ReflectionUtils.logThreadInfo(LOG, "jsp requested", 1);<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>    }<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>   * A Servlet input filter that quotes all HTML active characters in the<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>   * parameter names and values. The goal is to quote the characters to make<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>   * all of the servlets resistant to cross-site scripting attacks.<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>   */<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>  public static class QuotingInputFilter implements Filter {<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>    private FilterConfig config;<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span><a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>    public static class RequestQuoter extends HttpServletRequestWrapper {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      private final HttpServletRequest rawRequest;<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      public RequestQuoter(HttpServletRequest rawRequest) {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>        super(rawRequest);<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>        this.rawRequest = rawRequest;<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      /**<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>       * Return the set of parameter names, quoting each name.<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>       */<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      @Override<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>      public Enumeration&lt;String&gt; getParameterNames() {<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>        return new Enumeration&lt;String&gt;() {<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>          private Enumeration&lt;String&gt; rawIterator =<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>            rawRequest.getParameterNames();<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>          @Override<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>          public boolean hasMoreElements() {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>            return rawIterator.hasMoreElements();<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>          @Override<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>          public String nextElement() {<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>            return HtmlQuoting.quoteHtmlChars(rawIterator.nextElement());<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>          }<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>        };<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span><a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>      /**<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>       * Unquote the name and quote the value.<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>       */<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      @Override<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>      public String getParameter(String name) {<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>        return HtmlQuoting.quoteHtmlChars(rawRequest.getParameter(<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>                HtmlQuoting.unquoteHtmlChars(name)));<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      }<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span><a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      @Override<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>      public String[] getParameterValues(String name) {<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>        String unquoteName = HtmlQuoting.unquoteHtmlChars(name);<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>        String[] unquoteValue = rawRequest.getParameterValues(unquoteName);<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>        if (unquoteValue == null) {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>          return null;<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>        }<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>        String[] result = new String[unquoteValue.length];<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>        for(int i=0; i &lt; result.length; ++i) {<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>          result[i] = HtmlQuoting.quoteHtmlChars(unquoteValue[i]);<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>        }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>        return result;<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>      }<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span><a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>      @Override<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>      public Map&lt;String, String[]&gt; getParameterMap() {<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>        Map&lt;String, String[]&gt; result = new HashMap&lt;&gt;();<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        Map&lt;String, String[]&gt; raw = rawRequest.getParameterMap();<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        for (Map.Entry&lt;String,String[]&gt; item: raw.entrySet()) {<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>          String[] rawValue = item.getValue();<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>          String[] cookedValue = new String[rawValue.length];<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>          for(int i=0; i&lt; rawValue.length; ++i) {<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>            cookedValue[i] = HtmlQuoting.quoteHtmlChars(rawValue[i]);<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>          }<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>          result.put(HtmlQuoting.quoteHtmlChars(item.getKey()), cookedValue);<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>        }<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>        return result;<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      }<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span><a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      /**<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>       * Quote the url so that users specifying the HOST HTTP header<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>       * can't inject attacks.<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>       */<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      @Override<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      public StringBuffer getRequestURL(){<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>        String url = rawRequest.getRequestURL().toString();<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        return new StringBuffer(HtmlQuoting.quoteHtmlChars(url));<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      }<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span><a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>      /**<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>       * Quote the server name so that users specifying the HOST HTTP header<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>       * can't inject attacks.<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>       */<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>      @Override<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>      public String getServerName() {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>        return HtmlQuoting.quoteHtmlChars(rawRequest.getServerName());<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span><a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>    @Override<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    public void init(FilterConfig config) throws ServletException {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      this.config = config;<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span><a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>    @Override<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>    public void destroy() {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span><a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    @Override<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>    public void doFilter(ServletRequest request,<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>                         ServletResponse response,<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>                         FilterChain chain<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>                         ) throws IOException, ServletException {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>      HttpServletRequestWrapper quoted =<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>        new RequestQuoter((HttpServletRequest) request);<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>      HttpServletResponse httpResponse = (HttpServletResponse) response;<a name="line.1476"></a>
+<span class="sourceLineNo">1213</span>    if (exception != null) {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>      exception.ifExceptionThrow();<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    }<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span><a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>  }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span><a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>  private MultiException addMultiException(MultiException exception, Exception e) {<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    if(exception == null){<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      exception = new MultiException();<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>    }<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>    exception.add(e);<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>    return exception;<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>  }<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span><a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>  public void join() throws InterruptedException {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>    webServer.join();<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>  }<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span><a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>  /**<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>   * Test for the availability of the web server<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>   * @return true if the web server is started, false otherwise<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>   */<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>  public boolean isAlive() {<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>    return webServer != null &amp;&amp; webServer.isStarted();<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>  }<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span><a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>  /**<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>   * Return the host and port of the HttpServer, if live<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>   * @return the classname and any HTTP URL<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>   */<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>  @Override<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>  public String toString() {<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    if (listeners.isEmpty()) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>      return "Inactive HttpServer";<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>    } else {<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>      StringBuilder sb = new StringBuilder("HttpServer (")<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>        .append(isAlive() ? STATE_DESCRIPTION_ALIVE :<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>                STATE_DESCRIPTION_NOT_LIVE).append("), listening at:");<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>      for (ListenerInfo li : listeners) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>        ServerConnector l = li.listener;<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>        sb.append(l.getHost()).append(":").append(l.getPort()).append("/,");<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>      }<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>      return sb.toString();<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>    }<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>  }<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span><a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>  /**<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   * Checks the user has privileges to access to instrumentation servlets.<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>   * &lt;p&gt;<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>   * If &lt;code&gt;hadoop.security.instrumentation.requires.admin&lt;/code&gt; is set to FALSE<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>   * (default value) it always returns TRUE.<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>   * &lt;/p&gt;&lt;p&gt;<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>   * If &lt;code&gt;hadoop.security.instrumentation.requires.admin&lt;/code&gt; is set to TRUE<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>   * it will check that if the current user is in the admin ACLS. If the user is<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>   * in the admin ACLs it returns TRUE, otherwise it returns FALSE.<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>   * &lt;/p&gt;<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>   *<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>   * @param servletContext the servlet context.<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>   * @param request the servlet request.<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>   * @param response the servlet response.<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   * @return TRUE/FALSE based on the logic decribed above.<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>   */<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>  public static boolean isInstrumentationAccessAllowed(<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>    ServletContext servletContext, HttpServletRequest request,<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>    HttpServletResponse response) throws IOException {<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>    Configuration conf =<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>      (Configuration) servletContext.getAttribute(CONF_CONTEXT_ATTRIBUTE);<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span><a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>    boolean access = true;<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    boolean adminAccess = conf.getBoolean(<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>      CommonConfigurationKeys.HADOOP_SECURITY_INSTRUMENTATION_REQUIRES_ADMIN,<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>      false);<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>    if (adminAccess) {<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>      access = hasAdministratorAccess(servletContext, request, response);<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>    }<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    return access;<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>  }<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span><a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>  /**<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * Does the user sending the HttpServletRequest has the administrator ACLs? If<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   * it isn't the case, response will be modified to send an error to the user.<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>   *<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>   * @param servletContext the {@link ServletContext} to use<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>   * @param request the {@link HttpServletRequest} to check<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>   * @param response used to send the error response if user does not have admin access.<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>   * @return true if admin-authorized, false otherwise<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>   * @throws IOException if an unauthenticated or unauthorized user tries to access the page<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>   */<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>  public static boolean hasAdministratorAccess(<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      ServletContext servletContext, HttpServletRequest request,<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>      HttpServletResponse response) throws IOException {<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>    Configuration conf =<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>        (Configuration) servletContext.getAttribute(CONF_CONTEXT_ATTRIBUTE);<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>    AccessControlList acl = (AccessControlList) servletContext.getAttribute(ADMINS_ACL);<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span><a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    return hasAdministratorAccess(conf, acl, request, response);<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>  }<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span><a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>  public static boolean hasAdministratorAccess(Configuration conf, AccessControlList acl,<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>      HttpServletRequest request, HttpServletResponse response) throws IOException {<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    // If there is no authorization, anybody has administrator access.<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>    if (!conf.getBoolean(<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>        CommonConfigurationKeys.HADOOP_SECURITY_AUTHORIZATION, false)) {<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>      return true;<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>    }<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span><a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>    String remoteUser = request.getRemoteUser();<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>    if (remoteUser == null) {<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>      response.sendError(HttpServletResponse.SC_UNAUTHORIZED,<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>                         "Unauthenticated users are not " +<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>                         "authorized to access this page.");<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>      return false;<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>    if (acl != null &amp;&amp; !userHasAdministratorAccess(acl, remoteUser)) {<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>      response.sendError(HttpServletResponse.SC_FORBIDDEN, "User "<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>          + remoteUser + " is unauthorized to access this page.");<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>      return false;<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>    return true;<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>  }<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span><a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>  /**<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>   * Get the admin ACLs from the given ServletContext and check if the given<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>   * user is in the ACL.<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>   *<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>   * @param servletContext the context containing the admin ACL.<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>   * @param remoteUser the remote user to check for.<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>   * @return true if the user is present in the ACL, false if no ACL is set or<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>   *         the user is not present<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>   */<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>  public static boolean userHasAdministratorAccess(ServletContext servletContext,<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>      String remoteUser) {<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>    AccessControlList adminsAcl = (AccessControlList) servletContext<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>        .getAttribute(ADMINS_ACL);<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>    return userHasAdministratorAccess(adminsAcl, remoteUser);<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>  }<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span><a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>  public static boolean userHasAdministratorAccess(AccessControlList acl, String remoteUser) {<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>    UserGroupInformation remoteUserUGI =<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>        UserGroupInformation.createRemoteUser(remoteUser);<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    return acl != null &amp;&amp; acl.isUserAllowed(remoteUserUGI);<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>  }<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span><a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>  /**<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>   * A very simple servlet to serve up a text representation of the current<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>   * stack traces. It both returns the stacks to the caller and logs them.<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>   * Currently the stack traces are done sequentially rather than exactly the<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>   * same data.<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>   */<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>  public static class StackServlet extends HttpServlet {<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>    private static final long serialVersionUID = -6284183679759467039L;<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span><a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>    @Override<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>    public void doGet(HttpServletRequest request, HttpServletResponse response)<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      throws ServletException, IOException {<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      if (!HttpServer.isInstrumentationAccessAllowed(getServletContext(),<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>                                                     request, response)) {<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        return;<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>      }<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      response.setContentType("text/plain; charset=UTF-8");<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>      try (PrintStream out = new PrintStream(<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>        response.getOutputStream(), false, "UTF-8")) {<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>        Threads.printThreadInfo(out, "");<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>        out.flush();<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      }<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>      ReflectionUtils.logThreadInfo(LOG, "jsp requested", 1);<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>    }<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>  }<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span><a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>  /**<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>   * A Servlet input filter that quotes all HTML active characters in the<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>   * parameter names and values. The goal is to quote the characters to make<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>   * all of the servlets resistant to cross-site scripting attacks.<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>   */<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>  public static class QuotingInputFilter implements Filter {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>    private FilterConfig config;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span><a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    public static class RequestQuoter extends HttpServletRequestWrapper {<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      private final HttpServletRequest rawRequest;<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>      public RequestQuoter(HttpServletRequest rawRequest) {<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>        super(rawRequest);<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>        this.rawRequest = rawRequest;<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      }<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span><a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>      /**<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>       * Return the set of parameter names, quoting each name.<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 Enumeration&lt;String&gt; getParameterNames() {<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>        return new Enumeration&lt;String&gt;() {<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>          private Enumeration&lt;String&gt; rawIterator =<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>            rawRequest.getParameterNames();<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>          @Override<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>          public boolean hasMoreElements() {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>            return rawIterator.hasMoreElements();<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 String nextElement() {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>            return HtmlQuoting.quoteHtmlChars(rawIterator.nextElement());<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>      }<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span><a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>      /**<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>       * Unquote the name and quote the value.<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>       */<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      @Override<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>      public String getParameter(String name) {<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>        return HtmlQuoting.quoteHtmlChars(rawRequest.getParameter(<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>                HtmlQuoting.unquoteHtmlChars(name)));<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>      }<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span><a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      @Override<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      public String[] getParameterValues(String name) {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>        String unquoteName = HtmlQuoting.unquoteHtmlChars(name);<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>        String[] unquoteValue = rawRequest.getParameterValues(unquoteName);<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>        if (unquoteValue == null) {<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>          return null;<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>        }<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>        String[] result = new String[unquoteValue.length];<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>        for(int i=0; i &lt; result.length; ++i) {<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>          result[i] = HtmlQuoting.quoteHtmlChars(unquoteValue[i]);<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>        }<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>        return result;<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>      }<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span><a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      @Override<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      public Map&lt;String, String[]&gt; getParameterMap() {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>        Map&lt;String, String[]&gt; result = new HashMap&lt;&gt;();<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        Map&lt;String, String[]&gt; raw = rawRequest.getParameterMap();<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        for (Map.Entry&lt;String,String[]&gt; item: raw.entrySet()) {<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>          String[] rawValue = item.getValue();<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>          String[] cookedValue = new String[rawValue.length];<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>          for(int i=0; i&lt; rawValue.length; ++i) {<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>            cookedValue[i] = HtmlQuoting.quoteHtmlChars(rawValue[i]);<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>          }<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>          result.put(HtmlQuoting.quoteHtmlChars(item.getKey()), cookedValue);<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        }<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>        return result;<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>      }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span><a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      /**<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>       * Quote the url so that users specifying the HOST HTTP header<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>       * can't inject attacks.<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>       */<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>      @Override<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>      public StringBuffer getRequestURL(){<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>        String url = rawRequest.getRequestURL().toString();<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>        return new StringBuffer(HtmlQuoting.quoteHtmlChars(url));<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      }<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span><a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      /**<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>       * Quote the server name so that users specifying the HOST HTTP header<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>       * can't inject attacks.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>       */<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>      @Override<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      public String getServerName() {<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        return HtmlQuoting.quoteHtmlChars(rawRequest.getServerName());<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>      }<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    }<a name="line.1476"></a>
 <span class="sourceLineNo">1477</span><a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      String mime = inferMimeType(request);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      if (mime == null) {<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        httpResponse.setContentType("text/plain; charset=utf-8");<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>      } else if (mime.startsWith("text/html")) {<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>        // HTML with unspecified encoding, we want to<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>        // force HTML with utf-8 encoding<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>        // This is to avoid the following security issue:<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>        // http://openmya.hacker.jp/hasegawa/security/utf7cs.html<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        httpResponse.setContentType("text/html; charset=utf-8");<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>      } else if (mime.startsWith("application/xml")) {<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>        httpResponse.setContentType("text/xml; charset=utf-8");<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>      }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>      chain.doFilter(quoted, httpResponse);<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>    }<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span><a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>    /**<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>     * Infer the mime type for the response based on the extension of the request<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>     * URI. Returns null if unknown.<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>     */<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    private String inferMimeType(ServletRequest request) {<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>      String path = ((HttpServletRequest)request).getRequestURI();<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>      ServletContext context = config.getServletContext();<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>      return context.getMimeType(path);<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>    }<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>  }<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>}<a name="line.1503"></a>
+<span class="sourceLineNo">1478</span>    @Override<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    public void init(FilterConfig config) throws ServletException {<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      this.config = config;<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>    }<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span><a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>    @Override<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    public void destroy() {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>    }<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span><a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>    @Override<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>    public void doFilter(ServletRequest request,<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>                         ServletResponse response,<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>                         FilterChain chain<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>                         ) throws IOException, ServletException {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>      HttpServletRequestWrapper quoted =<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        new RequestQuoter((HttpServletRequest) request);<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>      HttpServletResponse httpResponse = (HttpServletResponse) response;<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span><a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>      String mime = inferMimeType(request);<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>      if (mime == null) {<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        httpResponse.setContentType("text/plain; charset=utf-8");<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      } else if (mime.startsWith("text/html")) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>        // HTML with unspecified encoding, we want to<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>        // force HTML with utf-8 encoding<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>        // This is to avoid the following security issue:<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>        // http://openmya.hacker.jp/hasegawa/security/utf7cs.html<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>        httpResponse.setContentType("text/html; charset=utf-8");<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>      } else if (mime.startsWith("application/xml")) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        httpResponse.setContentType("text/xml; charset=utf-8");<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      chain.doFilter(quoted, httpResponse);<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>    /**<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>     * Infer the mime type for the response based on the extension of the request<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>     * URI. Returns null if unknown.<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>     */<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>    private String inferMimeType(ServletRequest request) {<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>      String path = ((HttpServletRequest)request).getRequestURI();<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>      ServletContext context = config.getServletContext();<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>      return context.getMimeType(path);<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    }<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>  }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>}<a name="line.1521"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/http/HttpServer.ListenerInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/http/HttpServer.ListenerInfo.html
index 01bf522..267a894 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/http/HttpServer.ListenerInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/http/HttpServer.ListenerInfo.html
@@ -74,21 +74,21 @@
 <span class="sourceLineNo">066</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.66"></a>
 <span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
 <span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.http.HttpVersion;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.Handler;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpConfiguration;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpConnectionFactory;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.RequestLog;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.SecureRequestCustomizer;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.Server;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.ServerConnector;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.SslConnectionFactory;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ContextHandlerCollection;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.HandlerCollection;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.RequestLogHandler;<a name="line.83"></a>
+<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.http.HttpVersion;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.Handler;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpConfiguration;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpConnectionFactory;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.RequestLog;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.SecureRequestCustomizer;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.Server;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.ServerConnector;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.SslConnectionFactory;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ContextHandlerCollection;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.HandlerCollection;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.RequestLogHandler;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.gzip.GzipHandler;<a name="line.83"></a>
 <span class="sourceLineNo">084</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.DefaultServlet;<a name="line.84"></a>
 <span class="sourceLineNo">085</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.FilterHolder;<a name="line.85"></a>
 <span class="sourceLineNo">086</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.FilterMapping;<a name="line.86"></a>
@@ -583,932 +583,950 @@
 <span class="sourceLineNo">575</span>    this.findPort = b.findPort;<a name="line.575"></a>
 <span class="sourceLineNo">576</span>    this.authenticationEnabled = b.securityEnabled;<a name="line.576"></a>
 <span class="sourceLineNo">577</span>    initializeWebServer(b.name, b.hostName, b.conf, b.pathSpecs, b);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  private void initializeWebServer(String name, String hostName,<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      Configuration conf, String[] pathSpecs, HttpServer.Builder b)<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      throws FileNotFoundException, IOException {<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>    Preconditions.checkNotNull(webAppContext);<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span>    HandlerCollection handlerCollection = new HandlerCollection();<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>    ContextHandlerCollection contexts = new ContextHandlerCollection();<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    RequestLog requestLog = HttpRequestLog.getRequestLog(name);<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>    if (requestLog != null) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      RequestLogHandler requestLogHandler = new RequestLogHandler();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      requestLogHandler.setRequestLog(requestLog);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      handlerCollection.addHandler(requestLogHandler);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>    }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>    final String appDir = getWebAppsPath(name);<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>    handlerCollection.addHandler(contexts);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    handlerCollection.addHandler(webAppContext);<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>    webServer.setHandler(handlerCollection);<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    webAppContext.setAttribute(ADMINS_ACL, adminsAcl);<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>    // Default apps need to be set first, so that all filters are applied to them.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    // Because they're added to defaultContexts, we need them there before we start<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    // adding filters<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    addDefaultApps(contexts, appDir, conf);<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span>    addGlobalFilter("safety", QuotingInputFilter.class.getName(), null);<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>    addGlobalFilter("clickjackingprevention",<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        ClickjackingPreventionFilter.class.getName(),<a name="line.614"></a>
-<span class="sourceLineNo">615</span>        ClickjackingPreventionFilter.getDefaultParameters(conf));<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    addGlobalFilter("securityheaders",<a name="line.617"></a>
-<span class="sourceLineNo">618</span>        SecurityHeadersFilter.class.getName(),<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        SecurityHeadersFilter.getDefaultParameters(conf));<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>    // But security needs to be enabled prior to adding the other servlets<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    if (authenticationEnabled) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      initSpnego(conf, hostName, b.usernameConfKey, b.keytabConfKey, b.kerberosNameRulesKey,<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          b.signatureSecretFileKey);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>    final FilterInitializer[] initializers = getFilterInitializers(conf);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    if (initializers != null) {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      conf = new Configuration(conf);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      conf.set(BIND_ADDRESS, hostName);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      for (FilterInitializer c : initializers) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        c.initFilter(this, conf);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    }<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>    addDefaultServlets(contexts, conf);<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>    if (pathSpecs != null) {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      for (String path : pathSpecs) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        LOG.info("adding path spec: " + path);<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        addFilterPathMapping(path, webAppContext);<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      }<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    }<a name="line.643"></a>
-<span class="sourceLineNo">644</span>  }<a name="line.644"></a>
-<span class="sourceLineNo">645</span><a name="line.645"></a>
-<span class="sourceLineNo">646</span>  private void addManagedListener(ServerConnector connector) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    listeners.add(new ListenerInfo(true, connector));<a name="line.647"></a>
-<span class="sourceLineNo">648</span>  }<a name="line.648"></a>
-<span class="sourceLineNo">649</span><a name="line.649"></a>
-<span class="sourceLineNo">650</span>  private static WebAppContext createWebAppContext(String name,<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      Configuration conf, AccessControlList adminsAcl, final String appDir) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    WebAppContext ctx = new WebAppContext();<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    ctx.setDisplayName(name);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    ctx.setContextPath("/");<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    ctx.setWar(appDir + "/" + name);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    ctx.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    // for org.apache.hadoop.metrics.MetricsServlet<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    ctx.getServletContext().setAttribute(<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      org.apache.hadoop.http.HttpServer2.CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    ctx.getServletContext().setAttribute(ADMINS_ACL, adminsAcl);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    addNoCacheFilter(ctx);<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    return ctx;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
-<span class="sourceLineNo">664</span><a name="line.664"></a>
-<span class="sourceLineNo">665</span>  private static void addNoCacheFilter(WebAppContext ctxt) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    defineFilter(ctxt, NO_CACHE_FILTER, NoCacheFilter.class.getName(),<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        Collections.&lt;String, String&gt; emptyMap(), new String[] { "/*" });<a name="line.667"></a>
-<span class="sourceLineNo">668</span>  }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /** Get an array of FilterConfiguration specified in the conf */<a name="line.670"></a>
-<span class="sourceLineNo">671</span>  private static FilterInitializer[] getFilterInitializers(Configuration conf) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    if (conf == null) {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      return null;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    }<a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span>    Class&lt;?&gt;[] classes = conf.getClasses(FILTER_INITIALIZERS_PROPERTY);<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    if (classes == null) {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      return null;<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    }<a name="line.679"></a>
-<span class="sourceLineNo">680</span><a name="line.680"></a>
-<span class="sourceLineNo">681</span>    FilterInitializer[] initializers = new FilterInitializer[classes.length];<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    for(int i = 0; i &lt; classes.length; i++) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      initializers[i] = (FilterInitializer)ReflectionUtils.newInstance(classes[i]);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    return initializers;<a name="line.685"></a>
+<span class="sourceLineNo">578</span>    this.webServer.setHandler(buildGzipHandler(this.webServer.getHandler()));<a name="line.578"></a>
+<span class="sourceLineNo">579</span>  }<a name="line.579"></a>
+<span class="sourceLineNo">580</span><a name="line.580"></a>
+<span class="sourceLineNo">581</span>  private void initializeWebServer(String name, String hostName,<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      Configuration conf, String[] pathSpecs, HttpServer.Builder b)<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      throws FileNotFoundException, IOException {<a name="line.583"></a>
+<span class="sourceLineNo">584</span><a name="line.584"></a>
+<span class="sourceLineNo">585</span>    Preconditions.checkNotNull(webAppContext);<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span>    HandlerCollection handlerCollection = new HandlerCollection();<a name="line.587"></a>
+<span class="sourceLineNo">588</span><a name="line.588"></a>
+<span class="sourceLineNo">589</span>    ContextHandlerCollection contexts = new ContextHandlerCollection();<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    RequestLog requestLog = HttpRequestLog.getRequestLog(name);<a name="line.590"></a>
+<span class="sourceLineNo">591</span><a name="line.591"></a>
+<span class="sourceLineNo">592</span>    if (requestLog != null) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      RequestLogHandler requestLogHandler = new RequestLogHandler();<a name="line.593"></a>
+<span class="sourceLineNo">594</span>      requestLogHandler.setRequestLog(requestLog);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      handlerCollection.addHandler(requestLogHandler);<a name="line.595"></a>
+<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span>    final String appDir = getWebAppsPath(name);<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>    handlerCollection.addHandler(contexts);<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    handlerCollection.addHandler(webAppContext);<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span>    webServer.setHandler(handlerCollection);<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>    webAppContext.setAttribute(ADMINS_ACL, adminsAcl);<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>    // Default apps need to be set first, so that all filters are applied to them.<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    // Because they're added to defaultContexts, we need them there before we start<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    // adding filters<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    addDefaultApps(contexts, appDir, conf);<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>    addGlobalFilter("safety", QuotingInputFilter.class.getName(), null);<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span>    addGlobalFilter("clickjackingprevention",<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        ClickjackingPreventionFilter.class.getName(),<a name="line.615"></a>
+<span class="sourceLineNo">616</span>        ClickjackingPreventionFilter.getDefaultParameters(conf));<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span>    addGlobalFilter("securityheaders",<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        SecurityHeadersFilter.class.getName(),<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        SecurityHeadersFilter.getDefaultParameters(conf));<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span>    // But security needs to be enabled prior to adding the other servlets<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    if (authenticationEnabled) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>      initSpnego(conf, hostName, b.usernameConfKey, b.keytabConfKey, b.kerberosNameRulesKey,<a name="line.624"></a>
+<span class="sourceLineNo">625</span>          b.signatureSecretFileKey);<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>    final FilterInitializer[] initializers = getFilterInitializers(conf);<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    if (initializers != null) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      conf = new Configuration(conf);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      conf.set(BIND_ADDRESS, hostName);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      for (FilterInitializer c : initializers) {<a name="line.632"></a>
+<span class="sourceLineNo">633</span>        c.initFilter(this, conf);<a name="line.633"></a>
+<span class="sourceLineNo">634</span>      }<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    }<a name="line.635"></a>
+<span class="sourceLineNo">636</span><a name="line.636"></a>
+<span class="sourceLineNo">637</span>    addDefaultServlets(contexts, conf);<a name="line.637"></a>
+<span class="sourceLineNo">638</span><a name="line.638"></a>
+<span class="sourceLineNo">639</span>    if (pathSpecs != null) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      for (String path : pathSpecs) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>        LOG.info("adding path spec: " + path);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>        addFilterPathMapping(path, webAppContext);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      }<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    }<a name="line.644"></a>
+<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
+<span class="sourceLineNo">646</span><a name="line.646"></a>
+<span class="sourceLineNo">647</span>  private void addManagedListener(ServerConnector connector) {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    listeners.add(new ListenerInfo(true, connector));<a name="line.648"></a>
+<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>  private static WebAppContext createWebAppContext(String name,<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      Configuration conf, AccessControlList adminsAcl, final String appDir) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>    WebAppContext ctx = new WebAppContext();<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    ctx.setDisplayName(name);<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    ctx.setContextPath("/");<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    ctx.setWar(appDir + "/" + name);<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    ctx.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    // for org.apache.hadoop.metrics.MetricsServlet<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    ctx.getServletContext().setAttribute(<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      org.apache.hadoop.http.HttpServer2.CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.660"></a>
+<span class="sourceLineNo">661</span>    ctx.getServletContext().setAttribute(ADMINS_ACL, adminsAcl);<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    addNoCacheFilter(ctx);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    return ctx;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  }<a name="line.664"></a>
+<span class="sourceLineNo">665</span><a name="line.665"></a>
+<span class="sourceLineNo">666</span>  /**<a name="line.666"></a>
+<span class="sourceLineNo">667</span>   * Construct and configure an instance of {@link GzipHandler}. With complex<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   * multi-{@link WebAppContext} configurations, it's easiest to apply this handler directly to the<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * instance of {@link Server} near the end of its configuration, something like<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * &lt;pre&gt;<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   *    Server server = new Server();<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   *    //...<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   *    server.setHandler(buildGzipHandler(server.getHandler()));<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   *    server.start();<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   * &lt;/pre&gt;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   */<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  public static GzipHandler buildGzipHandler(final Handler wrapped) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    final GzipHandler gzipHandler = new GzipHandler();<a name="line.678"></a>
+<span class="sourceLineNo">679</span>    gzipHandler.setHandler(wrapped);<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    return gzipHandler;<a name="line.680"></a>
+<span class="sourceLineNo">681</span>  }<a name="line.681"></a>
+<span class="sourceLineNo">682</span><a name="line.682"></a>
+<span class="sourceLineNo">683</span>  private static void addNoCacheFilter(WebAppContext ctxt) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    defineFilter(ctxt, NO_CACHE_FILTER, NoCacheFilter.class.getName(),<a name="line.684"></a>
+<span class="sourceLineNo">685</span>        Collections.&lt;String, String&gt; emptyMap(), new String[] { "/*" });<a name="line.685"></a>
 <span class="sourceLineNo">686</span>  }<a name="line.686"></a>
 <span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>  /**<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   * Add default apps.<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * @param appDir The application directory<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   */<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  protected void addDefaultApps(ContextHandlerCollection parent,<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      final String appDir, Configuration conf) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // set up the context for "/logs/" if "hadoop.log.dir" property is defined.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    String logDir = this.logDir;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    if (logDir == null) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      logDir = System.getProperty("hadoop.log.dir");<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    if (logDir != null) {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      ServletContextHandler logContext = new ServletContextHandler(parent, "/logs");<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      logContext.addServlet(AdminAuthorizedServlet.class, "/*");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      logContext.setResourceBase(logDir);<a name="line.702"></a>
-<span class="sourceLineNo">703</span><a name="line.703"></a>
-<span class="sourceLineNo">704</span>      if (conf.getBoolean(<a name="line.704"></a>
-<span class="sourceLineNo">705</span>          ServerConfigurationKeys.HBASE_JETTY_LOGS_SERVE_ALIASES,<a name="line.705"></a>
-<span class="sourceLineNo">706</span>          ServerConfigurationKeys.DEFAULT_HBASE_JETTY_LOGS_SERVE_ALIASES)) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>        Map&lt;String, String&gt; params = logContext.getInitParams();<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        params.put(<a name="line.708"></a>
-<span class="sourceLineNo">709</span>            "org.mortbay.jetty.servlet.Default.aliases", "true");<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      }<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      logContext.setDisplayName("logs");<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      setContextAttributes(logContext, conf);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      defaultContexts.put(logContext, true);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    // set up the context for "/static/*"<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    ServletContextHandler staticContext = new ServletContextHandler(parent, "/static");<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    staticContext.setResourceBase(appDir + "/static");<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    staticContext.addServlet(DefaultServlet.class, "/*");<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    staticContext.setDisplayName("static");<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    setContextAttributes(staticContext, conf);<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    defaultContexts.put(staticContext, true);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  private void setContextAttributes(ServletContextHandler context, Configuration conf) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    context.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    context.getServletContext().setAttribute(ADMINS_ACL, adminsAcl);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>  /**<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * Add default servlets.<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   */<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  protected void addDefaultServlets(<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      ContextHandlerCollection contexts, Configuration conf) throws IOException {<a name="line.733"></a>
-<span class="sourceLineNo">734</span>    // set up default servlets<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    addPrivilegedServlet("stacks", "/stacks", StackServlet.class);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    addPrivilegedServlet("logLevel", "/logLevel", LogLevel.Servlet.class);<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    // Hadoop3 has moved completely to metrics2, and  dropped support for Metrics v1's<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    // MetricsServlet (see HADOOP-12504).  We'll using reflection to load if against hadoop2.<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    // Remove when we drop support for hbase on hadoop2.x.<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    try {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      Class&lt;?&gt; clz = Class.forName("org.apache.hadoop.metrics.MetricsServlet");<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      addPrivilegedServlet("metrics", "/metrics", clz.asSubclass(HttpServlet.class));<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    } catch (Exception e) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      // do nothing<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    }<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    addPrivilegedServlet("jmx", "/jmx", JMXJsonServlet.class);<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    // While we don't expect users to have sensitive information in their configuration, they<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    // might. Give them an option to not expose the service configuration to all users.<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    if (conf.getBoolean(HTTP_PRIVILEGED_CONF_KEY, HTTP_PRIVILEGED_CONF_DEFAULT)) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      addPrivilegedServlet("conf", "/conf", ConfServlet.class);<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    } else {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      addUnprivilegedServlet("conf", "/conf", ConfServlet.class);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    }<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    final String asyncProfilerHome = ProfileServlet.getAsyncProfilerHome();<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    if (asyncProfilerHome != null &amp;&amp; !asyncProfilerHome.trim().isEmpty()) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      addPrivilegedServlet("prof", "/prof", ProfileServlet.class);<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      Path tmpDir = Paths.get(ProfileServlet.OUTPUT_DIR);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      if (Files.notExists(tmpDir)) {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>        Files.createDirectories(tmpDir);<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      }<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      ServletContextHandler genCtx = new ServletContextHandler(contexts, "/prof-output");<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      genCtx.addServlet(ProfileOutputServlet.class, "/*");<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      genCtx.setResourceBase(tmpDir.toAbsolutePath().toString());<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      genCtx.setDisplayName("prof-output");<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    } else {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>      addUnprivilegedServlet("prof", "/prof", ProfileServlet.DisabledServlet.class);<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      LOG.info("ASYNC_PROFILER_HOME environment variable and async.profiler.home system property " +<a name="line.767"></a>
-<span class="sourceLineNo">768</span>        "not specified. Disabling /prof endpoint.");<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    }<a name="line.769"></a>
-<span class="sourceLineNo">770</span>  }<a name="line.770"></a>
-<span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>  /**<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   * Set a value in the webapp context. These values are available to the jsp<a name="line.773"></a>
-<span class="sourceLineNo">774</span>   * pages as "application.getAttribute(name)".<a name="line.774"></a>
-<span class="sourceLineNo">775</span>   * @param name The name of the attribute<a name="line.775"></a>
-<span class="sourceLineNo">776</span>   * @param value The value of the attribute<a name="line.776"></a>
-<span class="sourceLineNo">777</span>   */<a name="line.777"></a>
-<span class="sourceLineNo">778</span>  public void setAttribute(String name, Object value) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    webAppContext.setAttribute(name, value);<a name="line.779"></a>
-<span class="sourceLineNo">780</span>  }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>  /**<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   * Add a Jersey resource package.<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * @param packageName The Java package name containing the Jersey resource.<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * @param pathSpec The path spec for the servlet<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   */<a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public void addJerseyResourcePackage(final String packageName,<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      final String pathSpec) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    LOG.info("addJerseyResourcePackage: packageName=" + packageName<a name="line.789"></a>
-<span class="sourceLineNo">790</span>        + ", pathSpec=" + pathSpec);<a name="line.790"></a>
-<span class="sourceLineNo">791</span><a name="line.791"></a>
-<span class="sourceLineNo">792</span>    ResourceConfig application = new ResourceConfig().packages(packageName);<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    final ServletHolder sh = new ServletHolder(new ServletContainer(application));<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    webAppContext.addServlet(sh, pathSpec);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>  /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * Adds a servlet in the server that any user can access. This method differs from<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * {@link #addPrivilegedServlet(String, String, Class)} in that any authenticated user<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   * can interact with the servlet added by this method.<a name="line.800"></a>
-<span class="sourceLineNo">801</span>   * @param name The name of the servlet (can be passed as null)<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @param pathSpec The path spec for the servlet<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   * @param clazz The servlet class<a name="line.803"></a>
+<span class="sourceLineNo">688</span>  /** Get an array of FilterConfiguration specified in the conf */<a name="line.688"></a>
+<span class="sourceLineNo">689</span>  private static FilterInitializer[] getFilterInitializers(Configuration conf) {<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    if (conf == null) {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>      return null;<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
+<span class="sourceLineNo">693</span><a name="line.693"></a>
+<span class="sourceLineNo">694</span>    Class&lt;?&gt;[] classes = conf.getClasses(FILTER_INITIALIZERS_PROPERTY);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    if (classes == null) {<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      return null;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>    FilterInitializer[] initializers = new FilterInitializer[classes.length];<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    for(int i = 0; i &lt; classes.length; i++) {<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      initializers[i] = (FilterInitializer)ReflectionUtils.newInstance(classes[i]);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    return initializers;<a name="line.703"></a>
+<span class="sourceLineNo">704</span>  }<a name="line.704"></a>
+<span class="sourceLineNo">705</span><a name="line.705"></a>
+<span class="sourceLineNo">706</span>  /**<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   * Add default apps.<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * @param appDir The application directory<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   */<a name="line.709"></a>
+<span class="sourceLineNo">710</span>  protected void addDefaultApps(ContextHandlerCollection parent,<a name="line.710"></a>
+<span class="sourceLineNo">711</span>      final String appDir, Configuration conf) {<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    // set up the context for "/logs/" if "hadoop.log.dir" property is defined.<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    String logDir = this.logDir;<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    if (logDir == null) {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      logDir = System.getProperty("hadoop.log.dir");<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    if (logDir != null) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      ServletContextHandler logContext = new ServletContextHandler(parent, "/logs");<a name="line.718"></a>
+<span class="sourceLineNo">719</span>      logContext.addServlet(AdminAuthorizedServlet.class, "/*");<a name="line.719"></a>
+<span class="sourceLineNo">720</span>      logContext.setResourceBase(logDir);<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>      if (conf.getBoolean(<a name="line.722"></a>
+<span class="sourceLineNo">723</span>          ServerConfigurationKeys.HBASE_JETTY_LOGS_SERVE_ALIASES,<a name="line.723"></a>
+<span class="sourceLineNo">724</span>          ServerConfigurationKeys.DEFAULT_HBASE_JETTY_LOGS_SERVE_ALIASES)) {<a name="line.724"></a>
+<span class="sourceLineNo">725</span>        Map&lt;String, String&gt; params = logContext.getInitParams();<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        params.put(<a name="line.726"></a>
+<span class="sourceLineNo">727</span>            "org.mortbay.jetty.servlet.Default.aliases", "true");<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
+<span class="sourceLineNo">729</span>      logContext.setDisplayName("logs");<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      setContextAttributes(logContext, conf);<a name="line.730"></a>
+<span class="sourceLineNo">731</span>      defaultContexts.put(logContext, true);<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    }<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    // set up the context for "/static/*"<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    ServletContextHandler staticContext = new ServletContextHandler(parent, "/static");<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    staticContext.setResourceBase(appDir + "/static");<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    staticContext.addServlet(DefaultServlet.class, "/*");<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    staticContext.setDisplayName("static");<a name="line.737"></a>
+<span class="sourceLineNo">738</span>    setContextAttributes(staticContext, conf);<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    defaultContexts.put(staticContext, true);<a name="line.739"></a>
+<span class="sourceLineNo">740</span>  }<a name="line.740"></a>
+<span class="sourceLineNo">741</span><a name="line.741"></a>
+<span class="sourceLineNo">742</span>  private void setContextAttributes(ServletContextHandler context, Configuration conf) {<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    context.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.743"></a>
+<span class="sourceLineNo">744</span>    context.getServletContext().setAttribute(ADMINS_ACL, adminsAcl);<a name="line.744"></a>
+<span class="sourceLineNo">745</span>  }<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span>  /**<a name="line.747"></a>
+<span class="sourceLineNo">748</span>   * Add default servlets.<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   */<a name="line.749"></a>
+<span class="sourceLineNo">750</span>  protected void addDefaultServlets(<a name="line.750"></a>
+<span class="sourceLineNo">751</span>      ContextHandlerCollection contexts, Configuration conf) throws IOException {<a name="line.751"></a>
+<span class="sourceLineNo">752</span>    // set up default servlets<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    addPrivilegedServlet("stacks", "/stacks", StackServlet.class);<a name="line.753"></a>
+<span class="sourceLineNo">754</span>    addPrivilegedServlet("logLevel", "/logLevel", LogLevel.Servlet.class);<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    // Hadoop3 has moved completely to metrics2, and  dropped support for Metrics v1's<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    // MetricsServlet (see HADOOP-12504).  We'll using reflection to load if against hadoop2.<a name="line.756"></a>
+<span class="sourceLineNo">757</span>    // Remove when we drop support for hbase on hadoop2.x.<a name="line.757"></a>
+<span class="sourceLineNo">758</span>    try {<a name="line.758"></a>
+<span class="sourceLineNo">759</span>      Class&lt;?&gt; clz = Class.forName("org.apache.hadoop.metrics.MetricsServlet");<a name="line.759"></a>
+<span class="sourceLineNo">760</span>      addPrivilegedServlet("metrics", "/metrics", clz.asSubclass(HttpServlet.class));<a name="line.760"></a>
+<span class="sourceLineNo">761</span>    } catch (Exception e) {<a name="line.761"></a>
+<span class="sourceLineNo">762</span>      // do nothing<a name="line.762"></a>
+<span class="sourceLineNo">763</span>    }<a name="line.763"></a>
+<span class="sourceLineNo">764</span>    addPrivilegedServlet("jmx", "/jmx", JMXJsonServlet.class);<a name="line.764"></a>
+<span class="sourceLineNo">765</span>    // While we don't expect users to have sensitive information in their configuration, they<a name="line.765"></a>
+<span class="sourceLineNo">766</span>    // might. Give them an option to not expose the service configuration to all users.<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    if (conf.getBoolean(HTTP_PRIVILEGED_CONF_KEY, HTTP_PRIVILEGED_CONF_DEFAULT)) {<a name="line.767"></a>
+<span class="sourceLineNo">768</span>      addPrivilegedServlet("conf", "/conf", ConfServlet.class);<a name="line.768"></a>
+<span class="sourceLineNo">769</span>    } else {<a name="line.769"></a>
+<span class="sourceLineNo">770</span>      addUnprivilegedServlet("conf", "/conf", ConfServlet.class);<a name="line.770"></a>
+<span class="sourceLineNo">771</span>    }<a name="line.771"></a>
+<span class="sourceLineNo">772</span>    final String asyncProfilerHome = ProfileServlet.getAsyncProfilerHome();<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    if (asyncProfilerHome != null &amp;&amp; !asyncProfilerHome.trim().isEmpty()) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      addPrivilegedServlet("prof", "/prof", ProfileServlet.class);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      Path tmpDir = Paths.get(ProfileServlet.OUTPUT_DIR);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      if (Files.notExists(tmpDir)) {<a name="line.776"></a>
+<span class="sourceLineNo">777</span>        Files.createDirectories(tmpDir);<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      }<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      ServletContextHandler genCtx = new ServletContextHandler(contexts, "/prof-output");<a name="line.779"></a>
+<span class="sourceLineNo">780</span>      genCtx.addServlet(ProfileOutputServlet.class, "/*");<a name="line.780"></a>
+<span class="sourceLineNo">781</span>      genCtx.setResourceBase(tmpDir.toAbsolutePath().toString());<a name="line.781"></a>
+<span class="sourceLineNo">782</span>      genCtx.setDisplayName("prof-output");<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    } else {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>      addUnprivilegedServlet("prof", "/prof", ProfileServlet.DisabledServlet.class);<a name="line.784"></a>
+<span class="sourceLineNo">785</span>      LOG.info("ASYNC_PROFILER_HOME environment variable and async.profiler.home system property " +<a name="line.785"></a>
+<span class="sourceLineNo">786</span>        "not specified. Disabling /prof endpoint.");<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    }<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  }<a name="line.788"></a>
+<span class="sourceLineNo">789</span><a name="line.789"></a>
+<span class="sourceLineNo">790</span>  /**<a name="line.790"></a>
+<span class="sourceLineNo">791</span>   * Set a value in the webapp context. These values are available to the jsp<a name="line.791"></a>
+<span class="sourceLineNo">792</span>   * pages as "application.getAttribute(name)".<a name="line.792"></a>
+<span class="sourceLineNo">793</span>   * @param name The name of the attribute<a name="line.793"></a>
+<span class="sourceLineNo">794</span>   * @param value The value of the attribute<a name="line.794"></a>
+<span class="sourceLineNo">795</span>   */<a name="line.795"></a>
+<span class="sourceLineNo">796</span>  public void setAttribute(String name, Object value) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>    webAppContext.setAttribute(name, value);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>  }<a name="line.798"></a>
+<span class="sourceLineNo">799</span><a name="line.799"></a>
+<span class="sourceLineNo">800</span>  /**<a name="line.800"></a>
+<span class="sourceLineNo">801</span>   * Add a Jersey resource package.<a name="line.801"></a>
+<span class="sourceLineNo">802</span>   * @param packageName The Java package name containing the Jersey resource.<a name="line.802"></a>
+<span class="sourceLineNo">803</span>   * @param pathSpec The path spec for the servlet<a name="line.803"></a>
 <span class="sourceLineNo">804</span>   */<a name="line.804"></a>
-<span class="sourceLineNo">805</span>  public void addUnprivilegedServlet(String name, String pathSpec,<a name="line.805"></a>
-<span class="sourceLineNo">806</span>      Class&lt;? extends HttpServlet&gt; clazz) {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    addServletWithAuth(name, pathSpec, clazz, false);<a name="line.807"></a>
-<span class="sourceLineNo">808</span>  }<a name="line.808"></a>
+<span class="sourceLineNo">805</span>  public void addJerseyResourcePackage(final String packageName,<a name="line.805"></a>
+<span class="sourceLineNo">806</span>      final String pathSpec) {<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    LOG.info("addJerseyResourcePackage: packageName=" + packageName<a name="line.807"></a>
+<span class="sourceLineNo">808</span>        + ", pathSpec=" + pathSpec);<a name="line.808"></a>
 <span class="sourceLineNo">809</span><a name="line.809"></a>
-<span class="sourceLineNo">810</span>  /**<a name="line.810"></a>
-<span class="sourceLineNo">811</span>   * Adds a servlet in the server that only administrators can access. This method differs from<a name="line.811"></a>
-<span class="sourceLineNo">812</span>   * {@link #addUnprivilegedServlet(String, String, Class)} in that only those authenticated user<a name="line.812"></a>
-<span class="sourceLineNo">813</span>   * who are identified as administrators can interact with the servlet added by this method.<a name="line.813"></a>
-<span class="sourceLineNo">814</span>   */<a name="line.814"></a>
-<span class="sourceLineNo">815</span>  public void addPrivilegedServlet(String name, String pathSpec,<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      Class&lt;? extends HttpServlet&gt; clazz) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    addServletWithAuth(name, pathSpec, clazz, true);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>  }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span>  /**<a name="line.820"></a>
-<span class="sourceLineNo">821</span>   * Internal method to add a servlet to the HTTP server. Developers should not call this method<a name="line.821"></a>
-<span class="sourceLineNo">822</span>   * directly, but invoke it via {@link #addUnprivilegedServlet(String, String, Class)} or<a name="line.822"></a>
-<span class="sourceLineNo">823</span>   * {@link #addPrivilegedServlet(String, String, Class)}.<a name="line.823"></a>
-<span class="sourceLineNo">824</span>   */<a name="line.824"></a>
-<span class="sourceLineNo">825</span>  void addServletWithAuth(String name, String pathSpec,<a name="line.825"></a>
-<span class="sourceLineNo">826</span>      Class&lt;? extends HttpServlet&gt; clazz, boolean requireAuthz) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    addInternalServlet(name, pathSpec, clazz, requireAuthz);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    addFilterPathMapping(pathSpec, webAppContext);<a name="line.828"></a>
-<span class="sourceLineNo">829</span>  }<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>  /**<a name="line.831"></a>
-<span class="sourceLineNo">832</span>   * Add an internal servlet in the server, specifying whether or not to<a name="line.832"></a>
-<span class="sourceLineNo">833</span>   * protect with Kerberos authentication.<a name="line.833"></a>
-<span class="sourceLineNo">834</span>   * Note: This method is to be used for adding servlets that facilitate<a name="line.834"></a>
-<span class="sourceLineNo">835</span>   * internal communication and not for user facing functionality. For<a name="line.835"></a>
-<span class="sourceLineNo">836</span>   * servlets added using this method, filters (except internal Kerberos<a name="line.836"></a>
-<span class="sourceLineNo">837</span>   * filters) are not enabled.<a name="line.837"></a>
-<span class="sourceLineNo">838</span>   *<a name="line.838"></a>
-<span class="sourceLineNo">839</span>   * @param name The name of the servlet (can be passed as null)<a name="line.839"></a>
-<span class="sourceLineNo">840</span>   * @param pathSpec The path spec for the servlet<a name="line.840"></a>
-<span class="sourceLineNo">841</span>   * @param clazz The servlet class<a name="line.841"></a>
-<span class="sourceLineNo">842</span>   * @param requireAuth Require Kerberos authenticate to access servlet<a name="line.842"></a>
-<span class="sourceLineNo">843</span>   */<a name="line.843"></a>
-<span class="sourceLineNo">844</span>  void addInternalServlet(String name, String pathSpec,<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      Class&lt;? extends HttpServlet&gt; clazz, boolean requireAuthz) {<a name="line.845"></a>
-<span class="sourceLineNo">846</span>    ServletHolder holder = new ServletHolder(clazz);<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    if (name != null) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>      holder.setName(name);<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    }<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    if (authenticationEnabled &amp;&amp; requireAuthz) {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      FilterHolder filter = new FilterHolder(AdminAuthorizedFilter.class);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      filter.setName(AdminAuthorizedFilter.class.getSimpleName());<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      FilterMapping fmap = new FilterMapping();<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      fmap.setPathSpec(pathSpec);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>      fmap.setDispatches(FilterMapping.ALL);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>      fmap.setFilterName(AdminAuthorizedFilter.class.getSimpleName());<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      webAppContext.getServletHandler().addFilter(filter, fmap);<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    }<a name="line.858"></a>
-<span class="sourceLineNo">859</span>    webAppContext.getSessionHandler().getSessionCookieConfig().setHttpOnly(true);<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    webAppContext.getSessionHandler().getSessionCookieConfig().setSecure(true);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    webAppContext.addServlet(holder, pathSpec);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  }<a name="line.862"></a>
-<span class="sourceLineNo">863</span><a name="line.863"></a>
-<span class="sourceLineNo">864</span>  @Override<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  public void addFilter(String name, String classname, Map&lt;String, String&gt; parameters) {<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    final String[] USER_FACING_URLS = { "*.html", "*.jsp" };<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    defineFilter(webAppContext, name, classname, parameters, USER_FACING_URLS);<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    LOG.info("Added filter " + name + " (class=" + classname<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        + ") to context " + webAppContext.getDisplayName());<a name="line.869"></a>
-<span class="sourceLineNo">870</span>    final String[] ALL_URLS = { "/*" };<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    for (Map.Entry&lt;ServletContextHandler, Boolean&gt; e : defaultContexts.entrySet()) {<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      if (e.getValue()) {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>        ServletContextHandler handler = e.getKey();<a name="line.873"></a>
-<span class="sourceLineNo">874</span>        defineFilter(handler, name, classname, parameters, ALL_URLS);<a name="line.874"></a>
-<span class="sourceLineNo">875</span>        LOG.info("Added filter " + name + " (class=" + classname<a name="line.875"></a>
-<span class="sourceLineNo">876</span>            + ") to context " + handler.getDisplayName());<a name="line.876"></a>
-<span class="sourceLineNo">877</span>      }<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    }<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    filterNames.add(name);<a name="line.879"></a>
+<span class="sourceLineNo">810</span>    ResourceConfig application = new ResourceConfig().packages(packageName);<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    final ServletHolder sh = new ServletHolder(new ServletContainer(application));<a name="line.811"></a>
+<span class="sourceLineNo">812</span>    webAppContext.addServlet(sh, pathSpec);<a name="line.812"></a>
+<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span>  /**<a name="line.815"></a>
+<span class="sourceLineNo">816</span>   * Adds a servlet in the server that any user can access. This method differs from<a name="line.816"></a>
+<span class="sourceLineNo">817</span>   * {@link #addPrivilegedServlet(String, String, Class)} in that any authenticated user<a name="line.817"></a>
+<span class="sourceLineNo">818</span>   * can interact with the servlet added by this method.<a name="line.818"></a>
+<span class="sourceLineNo">819</span>   * @param name The name of the servlet (can be passed as null)<a name="line.819"></a>
+<span class="sourceLineNo">820</span>   * @param pathSpec The path spec for the servlet<a name="line.820"></a>
+<span class="sourceLineNo">821</span>   * @param clazz The servlet class<a name="line.821"></a>
+<span class="sourceLineNo">822</span>   */<a name="line.822"></a>
+<span class="sourceLineNo">823</span>  public void addUnprivilegedServlet(String name, String pathSpec,<a name="line.823"></a>
+<span class="sourceLineNo">824</span>      Class&lt;? extends HttpServlet&gt; clazz) {<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    addServletWithAuth(name, pathSpec, clazz, false);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>  }<a name="line.826"></a>
+<span class="sourceLineNo">827</span><a name="line.827"></a>
+<span class="sourceLineNo">828</span>  /**<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * Adds a servlet in the server that only administrators can access. This method differs from<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   * {@link #addUnprivilegedServlet(String, String, Class)} in that only those authenticated user<a name="line.830"></a>
+<span class="sourceLineNo">831</span>   * who are identified as administrators can interact with the servlet added by this method.<a name="line.831"></a>
+<span class="sourceLineNo">832</span>   */<a name="line.832"></a>
+<span class="sourceLineNo">833</span>  public void addPrivilegedServlet(String name, String pathSpec,<a name="line.833"></a>
+<span class="sourceLineNo">834</span>      Class&lt;? extends HttpServlet&gt; clazz) {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    addServletWithAuth(name, pathSpec, clazz, true);<a name="line.835"></a>
+<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
+<span class="sourceLineNo">837</span><a name="line.837"></a>
+<span class="sourceLineNo">838</span>  /**<a name="line.838"></a>
+<span class="sourceLineNo">839</span>   * Internal method to add a servlet to the HTTP server. Developers should not call this method<a name="line.839"></a>
+<span class="sourceLineNo">840</span>   * directly, but invoke it via {@link #addUnprivilegedServlet(String, String, Class)} or<a name="line.840"></a>
+<span class="sourceLineNo">841</span>   * {@link #addPrivilegedServlet(String, String, Class)}.<a name="line.841"></a>
+<span class="sourceLineNo">842</span>   */<a name="line.842"></a>
+<span class="sourceLineNo">843</span>  void addServletWithAuth(String name, String pathSpec,<a name="line.843"></a>
+<span class="sourceLineNo">844</span>      Class&lt;? extends HttpServlet&gt; clazz, boolean requireAuthz) {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    addInternalServlet(name, pathSpec, clazz, requireAuthz);<a name="line.845"></a>
+<span class="sourceLineNo">846</span>    addFilterPathMapping(pathSpec, webAppContext);<a name="line.846"></a>
+<span class="sourceLineNo">847</span>  }<a name="line.847"></a>
+<span class="sourceLineNo">848</span><a name="line.848"></a>
+<span class="sourceLineNo">849</span>  /**<a name="line.849"></a>
+<span class="sourceLineNo">850</span>   * Add an internal servlet in the server, specifying whether or not to<a name="line.850"></a>
+<span class="sourceLineNo">851</span>   * protect with Kerberos authentication.<a name="line.851"></a>
+<span class="sourceLineNo">852</span>   * Note: This method is to be used for adding servlets that facilitate<a name="line.852"></a>
+<span class="sourceLineNo">853</span>   * internal communication and not for user facing functionality. For<a name="line.853"></a>
+<span class="sourceLineNo">854</span>   * servlets added using this method, filters (except internal Kerberos<a name="line.854"></a>
+<span class="sourceLineNo">855</span>   * filters) are not enabled.<a name="line.855"></a>
+<span class="sourceLineNo">856</span>   *<a name="line.856"></a>
+<span class="sourceLineNo">857</span>   * @param name The name of the servlet (can be passed as null)<a name="line.857"></a>
+<span class="sourceLineNo">858</span>   * @param pathSpec The path spec for the servlet<a name="line.858"></a>
+<span class="sourceLineNo">859</span>   * @param clazz The servlet class<a name="line.859"></a>
+<span class="sourceLineNo">860</span>   * @param requireAuth Require Kerberos authenticate to access servlet<a name="line.860"></a>
+<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
+<span class="sourceLineNo">862</span>  void addInternalServlet(String name, String pathSpec,<a name="line.862"></a>
+<span class="sourceLineNo">863</span>      Class&lt;? extends HttpServlet&gt; clazz, boolean requireAuthz) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>    ServletHolder holder = new ServletHolder(clazz);<a name="line.864"></a>
+<span class="sourceLineNo">865</span>    if (name != null) {<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      holder.setName(name);<a name="line.866"></a>
+<span class="sourceLineNo">867</span>    }<a name="line.867"></a>
+<span class="sourceLineNo">868</span>    if (authenticationEnabled &amp;&amp; requireAuthz) {<a name="line.868"></a>
+<span class="sourceLineNo">869</span>      FilterHolder filter = new FilterHolder(AdminAuthorizedFilter.class);<a name="line.869"></a>
+<span class="sourceLineNo">870</span>      filter.setName(AdminAuthorizedFilter.class.getSimpleName());<a name="line.870"></a>
+<span class="sourceLineNo">871</span>      FilterMapping fmap = new FilterMapping();<a name="line.871"></a>
+<span class="sourceLineNo">872</span>      fmap.setPathSpec(pathSpec);<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      fmap.setDispatches(FilterMapping.ALL);<a name="line.873"></a>
+<span class="sourceLineNo">874</span>      fmap.setFilterName(AdminAuthorizedFilter.class.getSimpleName());<a name="line.874"></a>
+<span class="sourceLineNo">875</span>      webAppContext.getServletHandler().addFilter(filter, fmap);<a name="line.875"></a>
+<span class="sourceLineNo">876</span>    }<a name="line.876"></a>
+<span class="sourceLineNo">877</span>    webAppContext.getSessionHandler().getSessionCookieConfig().setHttpOnly(true);<a name="line.877"></a>
+<span class="sourceLineNo">878</span>    webAppContext.getSessionHandler().getSessionCookieConfig().setSecure(true);<a name="line.878"></a>
+<span class="sourceLineNo">879</span>    webAppContext.addServlet(holder, pathSpec);<a name="line.879"></a>
 <span class="sourceLineNo">880</span>  }<a name="line.880"></a>
 <span class="sourceLineNo">881</span><a name="line.881"></a>
 <span class="sourceLineNo">882</span>  @Override<a name="line.882"></a>
-<span class="sourceLineNo">883</span>  public void addGlobalFilter(String name, String classname, Map&lt;String, String&gt; parameters) {<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    final String[] ALL_URLS = { "/*" };<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    defineFilter(webAppContext, name, classname, parameters, ALL_URLS);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    for (ServletContextHandler ctx : defaultContexts.keySet()) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      defineFilter(ctx, name, classname, parameters, ALL_URLS);<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    }<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    LOG.info("Added global filter '" + name + "' (class=" + classname + ")");<a name="line.889"></a>
-<span class="sourceLineNo">890</span>  }<a name="line.890"></a>
-<span class="sourceLineNo">891</span><a name="line.891"></a>
-<span class="sourceLineNo">892</span>  /**<a name="line.892"></a>
-<span class="sourceLineNo">893</span>   * Define a filter for a context and set up default url mappings.<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   */<a name="line.894"></a>
-<span class="sourceLineNo">895</span>  public static void defineFilter(ServletContextHandler handler, String name,<a name="line.895"></a>
-<span class="sourceLineNo">896</span>      String classname, Map&lt;String,String&gt; parameters, String[] urls) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    FilterHolder holder = new FilterHolder();<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    holder.setName(name);<a name="line.898"></a>
-<span class="sourceLineNo">899</span>    holder.setClassName(classname);<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    if (parameters != null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      holder.setInitParameters(parameters);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>    }<a name="line.902"></a>
-<span class="sourceLineNo">903</span>    FilterMapping fmap = new FilterMapping();<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    fmap.setPathSpecs(urls);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    fmap.setDispatches(FilterMapping.ALL);<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    fmap.setFilterName(name);<a name="line.906"></a>
-<span class="sourceLineNo">907</span>    handler.getServletHandler().addFilter(holder, fmap);<a name="line.907"></a>
+<span class="sourceLineNo">883</span>  public void addFilter(String name, String classname, Map&lt;String, String&gt; parameters) {<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    final String[] USER_FACING_URLS = { "*.html", "*.jsp" };<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    defineFilter(webAppContext, name, classname, parameters, USER_FACING_URLS);<a name="line.885"></a>
+<span class="sourceLineNo">886</span>    LOG.info("Added filter " + name + " (class=" + classname<a name="line.886"></a>
+<span class="sourceLineNo">887</span>        + ") to context " + webAppContext.getDisplayName());<a name="line.887"></a>
+<span class="sourceLineNo">888</span>    final String[] ALL_URLS = { "/*" };<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    for (Map.Entry&lt;ServletContextHandler, Boolean&gt; e : defaultContexts.entrySet()) {<a name="line.889"></a>
+<span class="sourceLineNo">890</span>      if (e.getValue()) {<a name="line.890"></a>
+<span class="sourceLineNo">891</span>        ServletContextHandler handler = e.getKey();<a name="line.891"></a>
+<span class="sourceLineNo">892</span>        defineFilter(handler, name, classname, parameters, ALL_URLS);<a name="line.892"></a>
+<span class="sourceLineNo">893</span>        LOG.info("Added filter " + name + " (class=" + classname<a name="line.893"></a>
+<span class="sourceLineNo">894</span>            + ") to context " + handler.getDisplayName());<a name="line.894"></a>
+<span class="sourceLineNo">895</span>      }<a name="line.895"></a>
+<span class="sourceLineNo">896</span>    }<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    filterNames.add(name);<a name="line.897"></a>
+<span class="sourceLineNo">898</span>  }<a name="line.898"></a>
+<span class="sourceLineNo">899</span><a name="line.899"></a>
+<span class="sourceLineNo">900</span>  @Override<a name="line.900"></a>
+<span class="sourceLineNo">901</span>  public void addGlobalFilter(String name, String classname, Map&lt;String, String&gt; parameters) {<a name="line.901"></a>
+<span class="sourceLineNo">902</span>    final String[] ALL_URLS = { "/*" };<a name="line.902"></a>
+<span class="sourceLineNo">903</span>    defineFilter(webAppContext, name, classname, parameters, ALL_URLS);<a name="line.903"></a>
+<span class="sourceLineNo">904</span>    for (ServletContextHandler ctx : defaultContexts.keySet()) {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>      defineFilter(ctx, name, classname, parameters, ALL_URLS);<a name="line.905"></a>
+<span class="sourceLineNo">906</span>    }<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    LOG.info("Added global filter '" + name + "' (class=" + classname + ")");<a name="line.907"></a>
 <span class="sourceLineNo">908</span>  }<a name="line.908"></a>
 <span class="sourceLineNo">909</span><a name="line.909"></a>
 <span class="sourceLineNo">910</span>  /**<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   * Add the path spec to the filter path mapping.<a name="line.911"></a>
-<span class="sourceLineNo">912</span>   * @param pathSpec The path spec<a name="line.912"></a>
-<span class="sourceLineNo">913</span>   * @param webAppCtx The WebApplicationContext to add to<a name="line.913"></a>
-<span class="sourceLineNo">914</span>   */<a name="line.914"></a>
-<span class="sourceLineNo">915</span>  protected void addFilterPathMapping(String pathSpec,<a name="line.915"></a>
-<span class="sourceLineNo">916</span>      WebAppContext webAppCtx) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    for(String name : filterNames) {<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      FilterMapping fmap = new FilterMapping();<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      fmap.setPathSpec(pathSpec);<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      fmap.setFilterName(name);<a name="line.920"></a>
-<span class="sourceLineNo">921</span>      fmap.setDispatches(FilterMapping.ALL);<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      webAppCtx.getServletHandler().addFilterMapping(fmap);<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    }<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>  /**<a name="line.926"></a>
-<span class="sourceLineNo">927</span>   * Get the value in the webapp context.<a name="line.927"></a>
-<span class="sourceLineNo">928</span>   * @param name The name of the attribute<a name="line.928"></a>
-<span class="sourceLineNo">929</span>   * @return The value of the attribute<a name="line.929"></a>
-<span class="sourceLineNo">930</span>   */<a name="line.930"></a>
-<span class="sourceLineNo">931</span>  public Object getAttribute(String name) {<a name="line.931"></a>
-<span class="sourceLineNo">932</span>    return webAppContext.getAttribute(name);<a name="line.932"></a>
-<span class="sourceLineNo">933</span>  }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>  public WebAppContext getWebAppContext(){<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    return this.webAppContext;<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  }<a name="line.937"></a>
-<span class="sourceLineNo">938</span><a name="line.938"></a>
-<span class="sourceLineNo">939</span>  public String getWebAppsPath(String appName) throws FileNotFoundException {<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    return getWebAppsPath(this.appDir, appName);<a name="line.940"></a>
-<span class="sourceLineNo">941</span>  }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span>  /**<a name="line.943"></a>
-<span class="sourceLineNo">944</span>   * Get the pathname to the webapps files.<a name="line.944"></a>
-<span class="sourceLineNo">945</span>   * @param appName eg "secondary" or "datanode"<a name="line.945"></a>
-<span class="sourceLineNo">946</span>   * @return the pathname as a URL<a name="line.946"></a>
-<span class="sourceLineNo">947</span>   * @throws FileNotFoundException if 'webapps' directory cannot be found on CLASSPATH.<a name="line.947"></a>
+<span class="sourceLineNo">911</span>   * Define a filter for a context and set up default url mappings.<a name="line.911"></a>
+<span class="sourceLineNo">912</span>   */<a name="line.912"></a>
+<span class="sourceLineNo">913</span>  public static void defineFilter(ServletContextHandler handler, String name,<a name="line.913"></a>
+<span class="sourceLineNo">914</span>      String classname, Map&lt;String,String&gt; parameters, String[] urls) {<a name="line.914"></a>
+<span class="sourceLineNo">915</span>    FilterHolder holder = new FilterHolder();<a name="line.915"></a>
+<span class="sourceLineNo">916</span>    holder.setName(name);<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    holder.setClassName(classname);<a name="line.917"></a>
+<span class="sourceLineNo">918</span>    if (parameters != null) {<a name="line.918"></a>
+<span class="sourceLineNo">919</span>      holder.setInitParameters(parameters);<a name="line.919"></a>
+<span class="sourceLineNo">920</span>    }<a name="line.920"></a>
+<span class="sourceLineNo">921</span>    FilterMapping fmap = new FilterMapping();<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    fmap.setPathSpecs(urls);<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    fmap.setDispatches(FilterMapping.ALL);<a name="line.923"></a>
+<span class="sourceLineNo">924</span>    fmap.setFilterName(name);<a name="line.924"></a>
+<span class="sourceLineNo">925</span>    handler.getServletHandler().addFilter(holder, fmap);<a name="line.925"></a>
+<span class="sourceLineNo">926</span>  }<a name="line.926"></a>
+<span class="sourceLineNo">927</span><a name="line.927"></a>
+<span class="sourceLineNo">928</span>  /**<a name="line.928"></a>
+<span class="sourceLineNo">929</span>   * Add the path spec to the filter path mapping.<a name="line.929"></a>
+<span class="sourceLineNo">930</span>   * @param pathSpec The path spec<a name="line.930"></a>
+<span class="sourceLineNo">931</span>   * @param webAppCtx The WebApplicationContext to add to<a name="line.931"></a>
+<span class="sourceLineNo">932</span>   */<a name="line.932"></a>
+<span class="sourceLineNo">933</span>  protected void addFilterPathMapping(String pathSpec,<a name="line.933"></a>
+<span class="sourceLineNo">934</span>      WebAppContext webAppCtx) {<a name="line.934"></a>
+<span class="sourceLineNo">935</span>    for(String name : filterNames) {<a name="line.935"></a>
+<span class="sourceLineNo">936</span>      FilterMapping fmap = new FilterMapping();<a name="line.936"></a>
+<span class="sourceLineNo">937</span>      fmap.setPathSpec(pathSpec);<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      fmap.setFilterName(name);<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      fmap.setDispatches(FilterMapping.ALL);<a name="line.939"></a>
+<span class="sourceLineNo">940</span>      webAppCtx.getServletHandler().addFilterMapping(fmap);<a name="line.940"></a>
+<span class="sourceLineNo">941</span>    }<a name="line.941"></a>
+<span class="sourceLineNo">942</span>  }<a name="line.942"></a>
+<span class="sourceLineNo">943</span><a name="line.943"></a>
+<span class="sourceLineNo">944</span>  /**<a name="line.944"></a>
+<span class="sourceLineNo">945</span>   * Get the value in the webapp context.<a name="line.945"></a>
+<span class="sourceLineNo">946</span>   * @param name The name of the attribute<a name="line.946"></a>
+<span class="sourceLineNo">947</span>   * @return The value of the attribute<a name="line.947"></a>
 <span class="sourceLineNo">948</span>   */<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  protected String getWebAppsPath(String webapps, String appName) throws FileNotFoundException {<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    URL url = getClass().getClassLoader().getResource(webapps + "/" + appName);<a name="line.950"></a>
-<span class="sourceLineNo">951</span><a name="line.951"></a>
-<span class="sourceLineNo">952</span>    if (url == null) {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      throw new FileNotFoundException(webapps + "/" + appName<a name="line.953"></a>
-<span class="sourceLineNo">954</span>              + " not found in CLASSPATH");<a name="line.954"></a>
-<span class="sourceLineNo">955</span>    }<a name="line.955"></a>
+<span class="sourceLineNo">949</span>  public Object getAttribute(String name) {<a name="line.949"></a>
+<span class="sourceLineNo">950</span>    return webAppContext.getAttribute(name);<a name="line.950"></a>
+<span class="sourceLineNo">951</span>  }<a name="line.951"></a>
+<span class="sourceLineNo">952</span><a name="line.952"></a>
+<span class="sourceLineNo">953</span>  public WebAppContext getWebAppContext(){<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    return this.webAppContext;<a name="line.954"></a>
+<span class="sourceLineNo">955</span>  }<a name="line.955"></a>
 <span class="sourceLineNo">956</span><a name="line.956"></a>
-<span class="sourceLineNo">957</span>    String urlString = url.toString();<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    return urlString.substring(0, urlString.lastIndexOf('/'));<a name="line.958"></a>
+<span class="sourceLineNo">957</span>  public String getWebAppsPath(String appName) throws FileNotFoundException {<a name="line.957"></a>
+<span class="sourceLineNo">958</span>    return getWebAppsPath(this.appDir, appName);<a name="line.958"></a>
 <span class="sourceLineNo">959</span>  }<a name="line.959"></a>
 <span class="sourceLineNo">960</span><a name="line.960"></a>
 <span class="sourceLineNo">961</span>  /**<a name="line.961"></a>
-<span class="sourceLineNo">962</span>   * Get the port that the server is on<a name="line.962"></a>
-<span class="sourceLineNo">963</span>   * @return the port<a name="line.963"></a>
-<span class="sourceLineNo">964</span>   * @deprecated Since 0.99.0<a name="line.964"></a>
-<span class="sourceLineNo">965</span>   */<a name="line.965"></a>
-<span class="sourceLineNo">966</span>  @Deprecated<a name="line.966"></a>
-<span class="sourceLineNo">967</span>  public int getPort() {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>    return ((ServerConnector)webServer.getConnectors()[0]).getLocalPort();<a name="line.968"></a>
-<span class="sourceLineNo">969</span>  }<a name="line.969"></a>
-<span class="sourceLineNo">970</span><a name="line.970"></a>
-<span class="sourceLineNo">971</span>  /**<a name="line.971"></a>
-<span class="sourceLineNo">972</span>   * Get the address that corresponds to a particular connector.<a name="line.972"></a>
-<span class="sourceLineNo">973</span>   *<a name="line.973"></a>
-<span class="sourceLineNo">974</span>   * @return the corresponding address for the connector, or null if there's no<a name="line.974"></a>
-<span class="sourceLineNo">975</span>   *         such connector or the connector is not bounded.<a name="line.975"></a>
-<span class="sourceLineNo">976</span>   */<a name="line.976"></a>
-<span class="sourceLineNo">977</span>  public InetSocketAddress getConnectorAddress(int index) {<a name="line.977"></a>
-<span class="sourceLineNo">978</span>    Preconditions.checkArgument(index &gt;= 0);<a name="line.978"></a>
-<span class="sourceLineNo">979</span><a name="line.979"></a>
-<span class="sourceLineNo">980</span>    if (index &gt; webServer.getConnectors().length) {<a name="line.980"></a>
-<span class="sourceLineNo">981</span>      return null;<a name="line.981"></a>
-<span class="sourceLineNo">982</span>    }<a name="line.982"></a>
-<span class="sourceLineNo">983</span><a name="line.983"></a>
-<span class="sourceLineNo">984</span>    ServerConnector c = (ServerConnector)webServer.getConnectors()[index];<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    if (c.getLocalPort() == -1 || c.getLocalPort() == -2) {<a name="line.985"></a>
-<span class="sourceLineNo">986</span>      // -1 if the connector has not been opened<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      // -2 if it has been closed<a name="line.987"></a>
-<span class="sourceLineNo">988</span>      return null;<a name="line.988"></a>
-<span class="sourceLineNo">989</span>    }<a name="line.989"></a>
-<span class="sourceLineNo">990</span><a name="line.990"></a>
-<span class="sourceLineNo">991</span>    return new InetSocketAddress(c.getHost(), c.getLocalPort());<a name="line.991"></a>
-<span class="sourceLineNo">992</span>  }<a name="line.992"></a>
-<span class="sourceLineNo">993</span><a name="line.993"></a>
-<span class="sourceLineNo">994</span>  /**<a name="line.994"></a>
-<span class="sourceLineNo">995</span>   * Set the min, max number of worker threads (simultaneous connections).<a name="line.995"></a>
-<span class="sourceLineNo">996</span>   */<a name="line.996"></a>
-<span class="sourceLineNo">997</span>  public void setThreads(int min, int max) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    QueuedThreadPool pool = (QueuedThreadPool) webServer.getThreadPool();<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    pool.setMinThreads(min);<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>    pool.setMaxThreads(max);<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>  }<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span><a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>  private void initSpnego(Configuration conf, String hostName,<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      String usernameConfKey, String keytabConfKey, String kerberosNameRuleKey,<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>      String signatureSecretKeyFileKey) throws IOException {<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    Map&lt;String, String&gt; params = new HashMap&lt;&gt;();<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    String principalInConf = getOrEmptyString(conf, usernameConfKey);<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>    if (!principalInConf.isEmpty()) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_PRINCIPAL_SUFFIX, SecurityUtil.getServerPrincipal(<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>          principalInConf, hostName));<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>    }<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>    String httpKeytab = getOrEmptyString(conf, keytabConfKey);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>    if (!httpKeytab.isEmpty()) {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_KEYTAB_SUFFIX, httpKeytab);<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    }<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    String kerberosNameRule = getOrEmptyString(conf, kerberosNameRuleKey);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>    if (!kerberosNameRule.isEmpty()) {<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_KRB_NAME_SUFFIX, kerberosNameRule);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    String signatureSecretKeyFile = getOrEmptyString(conf, signatureSecretKeyFileKey);<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>    if (!signatureSecretKeyFile.isEmpty()) {<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>      params.put(HTTP_AUTHENTICATION_SIGNATURE_SECRET_FILE_SUFFIX,<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>          signatureSecretKeyFile);<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    params.put(AuthenticationFilter.AUTH_TYPE, "kerberos");<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>    // Verify that the required options were provided<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    if (isMissing(params.get(HTTP_SPNEGO_AUTHENTICATION_PRINCIPAL_SUFFIX)) ||<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>            isMissing(params.get(HTTP_SPNEGO_AUTHENTICATION_KEYTAB_SUFFIX))) {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      throw new IllegalArgumentException(usernameConfKey + " and "<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>          + keytabConfKey + " are both required in the configuration "<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>          + "to enable SPNEGO/Kerberos authentication for the Web UI");<a name="line.1032"></a>
+<span class="sourceLineNo">962</span>   * Get the pathname to the webapps files.<a name="line.962"></a>
+<span class="sourceLineNo">963</span>   * @param appName eg "secondary" or "datanode"<a name="line.963"></a>
+<span class="sourceLineNo">964</span>   * @return the pathname as a URL<a name="line.964"></a>
+<span class="sourceLineNo">965</span>   * @throws FileNotFoundException if 'webapps' directory cannot be found on CLASSPATH.<a name="line.965"></a>
+<span class="sourceLineNo">966</span>   */<a name="line.966"></a>
+<span class="sourceLineNo">967</span>  protected String getWebAppsPath(String webapps, String appName) throws FileNotFoundException {<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    URL url = getClass().getClassLoader().getResource(webapps + "/" + appName);<a name="line.968"></a>
+<span class="sourceLineNo">969</span><a name="line.969"></a>
+<span class="sourceLineNo">970</span>    if (url == null) {<a name="line.970"></a>
+<span class="sourceLineNo">971</span>      throw new FileNotFoundException(webapps + "/" + appName<a name="line.971"></a>
+<span class="sourceLineNo">972</span>              + " not found in CLASSPATH");<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    }<a name="line.973"></a>
+<span class="sourceLineNo">974</span><a name="line.974"></a>
+<span class="sourceLineNo">975</span>    String urlString = url.toString();<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    return urlString.substring(0, urlString.lastIndexOf('/'));<a name="line.976"></a>
+<span class="sourceLineNo">977</span>  }<a name="line.977"></a>
+<span class="sourceLineNo">978</span><a name="line.978"></a>
+<span class="sourceLineNo">979</span>  /**<a name="line.979"></a>
+<span class="sourceLineNo">980</span>   * Get the port that the server is on<a name="line.980"></a>
+<span class="sourceLineNo">981</span>   * @return the port<a name="line.981"></a>
+<span class="sourceLineNo">982</span>   * @deprecated Since 0.99.0<a name="line.982"></a>
+<span class="sourceLineNo">983</span>   */<a name="line.983"></a>
+<span class="sourceLineNo">984</span>  @Deprecated<a name="line.984"></a>
+<span class="sourceLineNo">985</span>  public int getPort() {<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    return ((ServerConnector)webServer.getConnectors()[0]).getLocalPort();<a name="line.986"></a>
+<span class="sourceLineNo">987</span>  }<a name="line.987"></a>
+<span class="sourceLineNo">988</span><a name="line.988"></a>
+<span class="sourceLineNo">989</span>  /**<a name="line.989"></a>
+<span class="sourceLineNo">990</span>   * Get the address that corresponds to a particular connector.<a name="line.990"></a>
+<span class="sourceLineNo">991</span>   *<a name="line.991"></a>
+<span class="sourceLineNo">992</span>   * @return the corresponding address for the connector, or null if there's no<a name="line.992"></a>
+<span class="sourceLineNo">993</span>   *         such connector or the connector is not bounded.<a name="line.993"></a>
+<span class="sourceLineNo">994</span>   */<a name="line.994"></a>
+<span class="sourceLineNo">995</span>  public InetSocketAddress getConnectorAddress(int index) {<a name="line.995"></a>
+<span class="sourceLineNo">996</span>    Preconditions.checkArgument(index &gt;= 0);<a name="line.996"></a>
+<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">998</span>    if (index &gt; webServer.getConnectors().length) {<a name="line.998"></a>
+<span class="sourceLineNo">999</span>      return null;<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span><a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    ServerConnector c = (ServerConnector)webServer.getConnectors()[index];<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    if (c.getLocalPort() == -1 || c.getLocalPort() == -2) {<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>      // -1 if the connector has not been opened<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      // -2 if it has been closed<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>      return null;<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    }<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span><a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    return new InetSocketAddress(c.getHost(), c.getLocalPort());<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>  }<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span><a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>  /**<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>   * Set the min, max number of worker threads (simultaneous connections).<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>   */<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>  public void setThreads(int min, int max) {<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>    QueuedThreadPool pool = (QueuedThreadPool) webServer.getThreadPool();<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>    pool.setMinThreads(min);<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    pool.setMaxThreads(max);<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>  }<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span><a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>  private void initSpnego(Configuration conf, String hostName,<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>      String usernameConfKey, String keytabConfKey, String kerberosNameRuleKey,<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>      String signatureSecretKeyFileKey) throws IOException {<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    Map&lt;String, String&gt; params = new HashMap&lt;&gt;();<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    String principalInConf = getOrEmptyString(conf, usernameConfKey);<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    if (!principalInConf.isEmpty()) {<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_PRINCIPAL_SUFFIX, SecurityUtil.getServerPrincipal(<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>          principalInConf, hostName));<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>    }<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>    String httpKeytab = getOrEmptyString(conf, keytabConfKey);<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    if (!httpKeytab.isEmpty()) {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_KEYTAB_SUFFIX, httpKeytab);<a name="line.1032"></a>
 <span class="sourceLineNo">1033</span>    }<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span><a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    if (conf.getBoolean(HTTP_SPNEGO_AUTHENTICATION_PROXYUSER_ENABLE_KEY,<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>        HTTP_SPNEGO_AUTHENTICATION_PROXYUSER_ENABLE_DEFAULT)) {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        //Copy/rename standard hadoop proxyuser settings to filter<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>        for(Map.Entry&lt;String, String&gt; proxyEntry :<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>            conf.getPropsWithPrefix(ProxyUsers.CONF_HADOOP_PROXYUSER).entrySet()) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>            params.put(ProxyUserAuthenticationFilter.PROXYUSER_PREFIX + proxyEntry.getKey(),<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>                proxyEntry.getValue());<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>        }<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>        addGlobalFilter(SPNEGO_PROXYUSER_FILTER, ProxyUserAuthenticationFilter.class.getName(), params);<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    } else {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        addGlobalFilter(SPNEGO_FILTER, AuthenticationFilter.class.getName(), params);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    }<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>  }<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span><a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>  /**<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>   * Returns true if the argument is non-null and not whitespace<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>   */<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>  private boolean isMissing(String value) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    if (null == value) {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      return true;<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    }<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    return value.trim().isEmpty();<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>  }<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span><a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>  /**<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>   * Extracts the value for the given key from the configuration of returns a string of<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>   * zero length.<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>   */<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>  private String getOrEmptyString(Configuration conf, String key) {<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    if (null == key) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>      return EMPTY_STRING;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    final String value = conf.get(key.trim());<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    return null == value ? EMPTY_STRING : value;<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  }<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span><a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>  /**<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>   * Start the server. Does not wait for the server to start.<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>   */<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>  public void start() throws IOException {<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    try {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>      try {<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>        openListeners();<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>        webServer.start();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>      } catch (IOException ex) {<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        LOG.info("HttpServer.start() threw a non Bind IOException", ex);<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>        throw ex;<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>      } catch (MultiException ex) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>        LOG.info("HttpServer.start() threw a MultiException", ex);<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>        throw ex;<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      // Make sure there is no handler failures.<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      Handler[] handlers = webServer.getHandlers();<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>      for (int i = 0; i &lt; handlers.length; i++) {<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>        if (handlers[i].isFailed()) {<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>          throw new IOException(<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>              "Problem in starting http server. Server handlers failed");<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>        }<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>      // Make sure there are no errors initializing the context.<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      Throwable unavailableException = webAppContext.getUnavailableException();<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      if (unavailableException != null) {<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        // Have to stop the webserver, or else its non-daemon threads<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>        // will hang forever.<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        webServer.stop();<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>        throw new IOException("Unable to initialize WebAppContext",<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>            unavailableException);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      }<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    } catch (IOException e) {<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      throw e;<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    } catch (InterruptedException e) {<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>      throw (IOException) new InterruptedIOException(<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>          "Interrupted while starting HTTP server").initCause(e);<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    } catch (Exception e) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      throw new IOException("Problem starting http server", e);<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>  }<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span><a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>  private void loadListeners() {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    for (ListenerInfo li : listeners) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      webServer.addConnector(li.listener);<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>    }<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>  }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span><a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  /**<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>   * Open the main listener for the server<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>   * @throws Exception if the listener cannot be opened or the appropriate port is already in use<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>   */<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>  void openListeners() throws Exception {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    for (ListenerInfo li : listeners) {<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>      ServerConnector listener = li.listener;<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>      if (!li.isManaged || (li.listener.getLocalPort() != -1 &amp;&amp; li.listener.getLocalPort() != -2)) {<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>        // This listener is either started externally, or has not been opened, or has been closed<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>        continue;<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>      }<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      int port = listener.getPort();<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>      while (true) {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>        // jetty has a bug where you can't reopen a listener that previously<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>        // failed to open w/o issuing a close first, even if the port is changed<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        try {<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>          listener.close();<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>          listener.open();<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>          LOG.info("Jetty bound to port " + listener.getLocalPort());<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>          break;<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        } catch (IOException ex) {<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>          if(!(ex instanceof BindException) &amp;&amp; !(ex.getCause() instanceof BindException)) {<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>            throw ex;<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>          }<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>          if (port == 0 || !findPort) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>            BindException be = new BindException("Port in use: "<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>                + listener.getHost() + ":" + listener.getPort());<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>            be.initCause(ex);<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>            throw be;<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>          }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>        }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>        // try the next port number<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>        listener.setPort(++port);<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>        Thread.sleep(100);<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      }<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>    }<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>  }<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span><a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>  /**<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>   * stop the server<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>   */<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>  public void stop() throws Exception {<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    MultiException exception = null;<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    for (ListenerInfo li : listeners) {<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>      if (!li.isManaged) {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>        continue;<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>      }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>      try {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>        li.listener.close();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>      } catch (Exception e) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>        LOG.error(<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>            "Error while stopping listener for webapp"<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>                + webAppContext.getDisplayName(), e);<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>        exception = addMultiException(exception, e);<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>      }<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    }<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    try {<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>      // clear &amp; stop webAppContext attributes to avoid memory leaks.<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>      webAppContext.clearAttributes();<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      webAppContext.stop();<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    } catch (Exception e) {<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      LOG.error("Error while stopping web app context for webapp "<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>          + webAppContext.getDisplayName(), e);<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>      exception = addMultiException(exception, e);<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span><a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>    try {<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>      webServer.stop();<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    } catch (Exception e) {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>      LOG.error("Error while stopping web server for webapp "<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>          + webAppContext.getDisplayName(), e);<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>      exception = addMultiException(exception, e);<a name="line.1192"></a>
+<span class="sourceLineNo">1034</span>    String kerberosNameRule = getOrEmptyString(conf, kerberosNameRuleKey);<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>    if (!kerberosNameRule.isEmpty()) {<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_KRB_NAME_SUFFIX, kerberosNameRule);<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>    }<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>    String signatureSecretKeyFile = getOrEmptyString(conf, signatureSecretKeyFileKey);<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>    if (!signatureSecretKeyFile.isEmpty()) {<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      params.put(HTTP_AUTHENTICATION_SIGNATURE_SECRET_FILE_SUFFIX,<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>          signatureSecretKeyFile);<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>    }<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>    params.put(AuthenticationFilter.AUTH_TYPE, "kerberos");<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span><a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    // Verify that the required options were provided<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    if (isMissing(params.get(HTTP_SPNEGO_AUTHENTICATION_PRINCIPAL_SUFFIX)) ||<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>            isMissing(params.get(HTTP_SPNEGO_AUTHENTICATION_KEYTAB_SUFFIX))) {<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>      throw new IllegalArgumentException(usernameConfKey + " and "<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>          + keytabConfKey + " are both required in the configuration "<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          + "to enable SPNEGO/Kerberos authentication for the Web UI");<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>    }<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span><a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>    if (conf.getBoolean(HTTP_SPNEGO_AUTHENTICATION_PROXYUSER_ENABLE_KEY,<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>        HTTP_SPNEGO_AUTHENTICATION_PROXYUSER_ENABLE_DEFAULT)) {<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>        //Copy/rename standard hadoop proxyuser settings to filter<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>        for(Map.Entry&lt;String, String&gt; proxyEntry :<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>            conf.getPropsWithPrefix(ProxyUsers.CONF_HADOOP_PROXYUSER).entrySet()) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>            params.put(ProxyUserAuthenticationFilter.PROXYUSER_PREFIX + proxyEntry.getKey(),<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>                proxyEntry.getValue());<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>        }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>        addGlobalFilter(SPNEGO_PROXYUSER_FILTER, ProxyUserAuthenticationFilter.class.getName(), params);<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    } else {<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>        addGlobalFilter(SPNEGO_FILTER, AuthenticationFilter.class.getName(), params);<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>  }<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span><a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>  /**<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>   * Returns true if the argument is non-null and not whitespace<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>   */<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>  private boolean isMissing(String value) {<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    if (null == value) {<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      return true;<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    }<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    return value.trim().isEmpty();<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>  }<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span><a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>  /**<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>   * Extracts the value for the given key from the configuration of returns a string of<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>   * zero length.<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>   */<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>  private String getOrEmptyString(Configuration conf, String key) {<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    if (null == key) {<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>      return EMPTY_STRING;<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    }<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    final String value = conf.get(key.trim());<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    return null == value ? EMPTY_STRING : value;<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>  }<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span><a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>  /**<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>   * Start the server. Does not wait for the server to start.<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>   */<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>  public void start() throws IOException {<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    try {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      try {<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>        openListeners();<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>        webServer.start();<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      } catch (IOException ex) {<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>        LOG.info("HttpServer.start() threw a non Bind IOException", ex);<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>        throw ex;<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      } catch (MultiException ex) {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>        LOG.info("HttpServer.start() threw a MultiException", ex);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>        throw ex;<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>      }<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      // Make sure there is no handler failures.<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>      Handler[] handlers = webServer.getHandlers();<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      for (int i = 0; i &lt; handlers.length; i++) {<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>        if (handlers[i].isFailed()) {<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>          throw new IOException(<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>              "Problem in starting http server. Server handlers failed");<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>        }<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      }<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      // Make sure there are no errors initializing the context.<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>      Throwable unavailableException = webAppContext.getUnavailableException();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>      if (unavailableException != null) {<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>        // Have to stop the webserver, or else its non-daemon threads<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>        // will hang forever.<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>        webServer.stop();<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>        throw new IOException("Unable to initialize WebAppContext",<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>            unavailableException);<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      }<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    } catch (IOException e) {<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>      throw e;<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>    } catch (InterruptedException e) {<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>      throw (IOException) new InterruptedIOException(<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>          "Interrupted while starting HTTP server").initCause(e);<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    } catch (Exception e) {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>      throw new IOException("Problem starting http server", e);<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    }<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>  }<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span><a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>  private void loadListeners() {<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    for (ListenerInfo li : listeners) {<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>      webServer.addConnector(li.listener);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    }<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>  }<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span><a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>  /**<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>   * Open the main listener for the server<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>   * @throws Exception if the listener cannot be opened or the appropriate port is already in use<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>   */<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>  void openListeners() throws Exception {<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>    for (ListenerInfo li : listeners) {<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>      ServerConnector listener = li.listener;<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>      if (!li.isManaged || (li.listener.getLocalPort() != -1 &amp;&amp; li.listener.getLocalPort() != -2)) {<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>        // This listener is either started externally, or has not been opened, or has been closed<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>        continue;<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>      }<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>      int port = listener.getPort();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>      while (true) {<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>        // jetty has a bug where you can't reopen a listener that previously<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>        // failed to open w/o issuing a close first, even if the port is changed<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>        try {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>          listener.close();<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>          listener.open();<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>          LOG.info("Jetty bound to port " + listener.getLocalPort());<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>          break;<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>        } catch (IOException ex) {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>          if(!(ex instanceof BindException) &amp;&amp; !(ex.getCause() instanceof BindException)) {<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>            throw ex;<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>          }<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>          if (port == 0 || !findPort) {<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>            BindException be = new BindException("Port in use: "<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>                + listener.getHost() + ":" + listener.getPort());<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>            be.initCause(ex);<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>            throw be;<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>          }<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>        }<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>        // try the next port number<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>        listener.setPort(++port);<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>        Thread.sleep(100);<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>      }<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>  }<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span><a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>  /**<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>   * stop the server<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>   */<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>  public void stop() throws Exception {<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    MultiException exception = null;<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    for (ListenerInfo li : listeners) {<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>      if (!li.isManaged) {<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>        continue;<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>      }<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span><a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>      try {<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>        li.listener.close();<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>      } catch (Exception e) {<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>        LOG.error(<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>            "Error while stopping listener for webapp"<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>                + webAppContext.getDisplayName(), e);<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>        exception = addMultiException(exception, e);<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>      }<a name="line.1192"></a>
 <span class="sourceLineNo">1193</span>    }<a name="line.1193"></a>
 <span class="sourceLineNo">1194</span><a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>    if (exception != null) {<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      exception.ifExceptionThrow();<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>    }<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span><a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>  }<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span><a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>  private MultiException addMultiException(MultiException exception, Exception e) {<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>    if(exception == null){<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>      exception = new MultiException();<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>    }<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>    exception.add(e);<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>    return exception;<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>  }<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span><a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>  public void join() throws InterruptedException {<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    webServer.join();<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>  }<a name="line.1211"></a>
+<span class="sourceLineNo">1195</span>    try {<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>      // clear &amp; stop webAppContext attributes to avoid memory leaks.<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>      webAppContext.clearAttributes();<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>      webAppContext.stop();<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>    } catch (Exception e) {<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>      LOG.error("Error while stopping web app context for webapp "<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>          + webAppContext.getDisplayName(), e);<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>      exception = addMultiException(exception, e);<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    }<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span><a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>    try {<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>      webServer.stop();<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>    } catch (Exception e) {<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>      LOG.error("Error while stopping web server for webapp "<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>          + webAppContext.getDisplayName(), e);<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>      exception = addMultiException(exception, e);<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    }<a name="line.1211"></a>
 <span class="sourceLineNo">1212</span><a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>  /**<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>   * Test for the availability of the web server<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>   * @return true if the web server is started, false otherwise<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>   */<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>  public boolean isAlive() {<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>    return webServer != null &amp;&amp; webServer.isStarted();<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  }<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span><a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>  /**<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>   * Return the host and port of the HttpServer, if live<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>   * @return the classname and any HTTP URL<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>   */<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>  @Override<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>  public String toString() {<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>    if (listeners.isEmpty()) {<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      return "Inactive HttpServer";<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>    } else {<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>      StringBuilder sb = new StringBuilder("HttpServer (")<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>        .append(isAlive() ? STATE_DESCRIPTION_ALIVE :<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>                STATE_DESCRIPTION_NOT_LIVE).append("), listening at:");<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>      for (ListenerInfo li : listeners) {<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        ServerConnector l = li.listener;<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>        sb.append(l.getHost()).append(":").append(l.getPort()).append("/,");<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>      return sb.toString();<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>    }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>  }<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span><a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>  /**<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>   * Checks the user has privileges to access to instrumentation servlets.<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>   * &lt;p&gt;<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>   * If &lt;code&gt;hadoop.security.instrumentation.requires.admin&lt;/code&gt; is set to FALSE<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>   * (default value) it always returns TRUE.<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>   * &lt;/p&gt;&lt;p&gt;<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>   * If &lt;code&gt;hadoop.security.instrumentation.requires.admin&lt;/code&gt; is set to TRUE<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>   * it will check that if the current user is in the admin ACLS. If the user is<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>   * in the admin ACLs it returns TRUE, otherwise it returns FALSE.<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>   * &lt;/p&gt;<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>   *<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>   * @param servletContext the servlet context.<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>   * @param request the servlet request.<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>   * @param response the servlet response.<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>   * @return TRUE/FALSE based on the logic decribed above.<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>   */<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>  public static boolean isInstrumentationAccessAllowed(<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>    ServletContext servletContext, HttpServletRequest request,<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>    HttpServletResponse response) throws IOException {<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    Configuration conf =<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      (Configuration) servletContext.getAttribute(CONF_CONTEXT_ATTRIBUTE);<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span><a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>    boolean access = true;<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    boolean adminAccess = conf.getBoolean(<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      CommonConfigurationKeys.HADOOP_SECURITY_INSTRUMENTATION_REQUIRES_ADMIN,<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>      false);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    if (adminAccess) {<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>      access = hasAdministratorAccess(servletContext, request, response);<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>    }<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    return access;<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>  }<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span><a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>  /**<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>   * Does the user sending the HttpServletRequest has the administrator ACLs? If<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   * it isn't the case, response will be modified to send an error to the user.<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>   *<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>   * @param servletContext the {@link ServletContext} to use<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>   * @param request the {@link HttpServletRequest} to check<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>   * @param response used to send the error response if user does not have admin access.<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>   * @return true if admin-authorized, false otherwise<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>   * @throws IOException if an unauthenticated or unauthorized user tries to access the page<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>   */<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>  public static boolean hasAdministratorAccess(<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      ServletContext servletContext, HttpServletRequest request,<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>      HttpServletResponse response) throws IOException {<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>    Configuration conf =<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        (Configuration) servletContext.getAttribute(CONF_CONTEXT_ATTRIBUTE);<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    AccessControlList acl = (AccessControlList) servletContext.getAttribute(ADMINS_ACL);<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span><a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>    return hasAdministratorAccess(conf, acl, request, response);<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>  }<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span><a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>  public static boolean hasAdministratorAccess(Configuration conf, AccessControlList acl,<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>      HttpServletRequest request, HttpServletResponse response) throws IOException {<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    // If there is no authorization, anybody has administrator access.<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    if (!conf.getBoolean(<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>        CommonConfigurationKeys.HADOOP_SECURITY_AUTHORIZATION, false)) {<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>      return true;<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    }<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span><a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>    String remoteUser = request.getRemoteUser();<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    if (remoteUser == null) {<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>      response.sendError(HttpServletResponse.SC_UNAUTHORIZED,<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>                         "Unauthenticated users are not " +<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>                         "authorized to access this page.");<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>      return false;<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    }<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span><a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    if (acl != null &amp;&amp; !userHasAdministratorAccess(acl, remoteUser)) {<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>      response.sendError(HttpServletResponse.SC_FORBIDDEN, "User "<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>          + remoteUser + " is unauthorized to access this page.");<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>      return false;<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>    }<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span><a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    return true;<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>  /**<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>   * Get the admin ACLs from the given ServletContext and check if the given<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * user is in the ACL.<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   *<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>   * @param servletContext the context containing the admin ACL.<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>   * @param remoteUser the remote user to check for.<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>   * @return true if the user is present in the ACL, false if no ACL is set or<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>   *         the user is not present<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>   */<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  public static boolean userHasAdministratorAccess(ServletContext servletContext,<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>      String remoteUser) {<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>    AccessControlList adminsAcl = (AccessControlList) servletContext<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>        .getAttribute(ADMINS_ACL);<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    return userHasAdministratorAccess(adminsAcl, remoteUser);<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>  }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span><a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  public static boolean userHasAdministratorAccess(AccessControlList acl, String remoteUser) {<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    UserGroupInformation remoteUserUGI =<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>        UserGroupInformation.createRemoteUser(remoteUser);<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    return acl != null &amp;&amp; acl.isUserAllowed(remoteUserUGI);<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>  }<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span><a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  /**<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>   * A very simple servlet to serve up a text representation of the current<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>   * stack traces. It both returns the stacks to the caller and logs them.<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>   * Currently the stack traces are done sequentially rather than exactly the<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>   * same data.<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>   */<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>  public static class StackServlet extends HttpServlet {<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    private static final long serialVersionUID = -6284183679759467039L;<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span><a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    @Override<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>    public void doGet(HttpServletRequest request, HttpServletResponse response)<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>      throws ServletException, IOException {<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>      if (!HttpServer.isInstrumentationAccessAllowed(getServletContext(),<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>                                                     request, response)) {<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>        return;<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>      }<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>      response.setContentType("text/plain; charset=UTF-8");<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>      try (PrintStream out = new PrintStream(<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>        response.getOutputStream(), false, "UTF-8")) {<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>        Threads.printThreadInfo(out, "");<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>        out.flush();<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>      }<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>      ReflectionUtils.logThreadInfo(LOG, "jsp requested", 1);<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>    }<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>   * A Servlet input filter that quotes all HTML active characters in the<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>   * parameter names and values. The goal is to quote the characters to make<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>   * all of the servlets resistant to cross-site scripting attacks.<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>   */<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>  public static class QuotingInputFilter implements Filter {<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>    private FilterConfig config;<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span><a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>    public static class RequestQuoter extends HttpServletRequestWrapper {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      private final HttpServletRequest rawRequest;<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      public RequestQuoter(HttpServletRequest rawRequest) {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>        super(rawRequest);<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>        this.rawRequest = rawRequest;<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      /**<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>       * Return the set of parameter names, quoting each name.<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>       */<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      @Override<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>      public Enumeration&lt;String&gt; getParameterNames() {<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>        return new Enumeration&lt;String&gt;() {<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>          private Enumeration&lt;String&gt; rawIterator =<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>            rawRequest.getParameterNames();<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>          @Override<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>          public boolean hasMoreElements() {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>            return rawIterator.hasMoreElements();<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>          @Override<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>          public String nextElement() {<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>            return HtmlQuoting.quoteHtmlChars(rawIterator.nextElement());<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>          }<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>        };<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span><a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>      /**<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>       * Unquote the name and quote the value.<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>       */<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      @Override<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>      public String getParameter(String name) {<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>        return HtmlQuoting.quoteHtmlChars(rawRequest.getParameter(<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>                HtmlQuoting.unquoteHtmlChars(name)));<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      }<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span><a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      @Override<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>      public String[] getParameterValues(String name) {<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>        String unquoteName = HtmlQuoting.unquoteHtmlChars(name);<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>        String[] unquoteValue = rawRequest.getParameterValues(unquoteName);<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>        if (unquoteValue == null) {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>          return null;<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>        }<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>        String[] result = new String[unquoteValue.length];<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>        for(int i=0; i &lt; result.length; ++i) {<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>          result[i] = HtmlQuoting.quoteHtmlChars(unquoteValue[i]);<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>        }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>        return result;<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>      }<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span><a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>      @Override<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>      public Map&lt;String, String[]&gt; getParameterMap() {<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>        Map&lt;String, String[]&gt; result = new HashMap&lt;&gt;();<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        Map&lt;String, String[]&gt; raw = rawRequest.getParameterMap();<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        for (Map.Entry&lt;String,String[]&gt; item: raw.entrySet()) {<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>          String[] rawValue = item.getValue();<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>          String[] cookedValue = new String[rawValue.length];<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>          for(int i=0; i&lt; rawValue.length; ++i) {<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>            cookedValue[i] = HtmlQuoting.quoteHtmlChars(rawValue[i]);<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>          }<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>          result.put(HtmlQuoting.quoteHtmlChars(item.getKey()), cookedValue);<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>        }<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>        return result;<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      }<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span><a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      /**<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>       * Quote the url so that users specifying the HOST HTTP header<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>       * can't inject attacks.<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>       */<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      @Override<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      public StringBuffer getRequestURL(){<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>        String url = rawRequest.getRequestURL().toString();<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        return new StringBuffer(HtmlQuoting.quoteHtmlChars(url));<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      }<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span><a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>      /**<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>       * Quote the server name so that users specifying the HOST HTTP header<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>       * can't inject attacks.<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>       */<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>      @Override<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>      public String getServerName() {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>        return HtmlQuoting.quoteHtmlChars(rawRequest.getServerName());<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span><a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>    @Override<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    public void init(FilterConfig config) throws ServletException {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      this.config = config;<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span><a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>    @Override<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>    public void destroy() {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span><a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    @Override<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>    public void doFilter(ServletRequest request,<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>                         ServletResponse response,<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>                         FilterChain chain<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>                         ) throws IOException, ServletException {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>      HttpServletRequestWrapper quoted =<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>        new RequestQuoter((HttpServletRequest) request);<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>      HttpServletResponse httpResponse = (HttpServletResponse) response;<a name="line.1476"></a>
+<span class="sourceLineNo">1213</span>    if (exception != null) {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>      exception.ifExceptionThrow();<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    }<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span><a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>  }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span><a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>  private MultiException addMultiException(MultiException exception, Exception e) {<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    if(exception == null){<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      exception = new MultiException();<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>    }<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>    exception.add(e);<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>    return exception;<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>  }<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span><a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>  public void join() throws InterruptedException {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>    webServer.join();<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>  }<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span><a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>  /**<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>   * Test for the availability of the web server<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>   * @return true if the web server is started, false otherwise<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>   */<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>  public boolean isAlive() {<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>    return webServer != null &amp;&amp; webServer.isStarted();<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>  }<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span><a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>  /**<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>   * Return the host and port of the HttpServer, if live<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>   * @return the classname and any HTTP URL<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>   */<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>  @Override<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>  public String toString() {<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    if (listeners.isEmpty()) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>      return "Inactive HttpServer";<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>    } else {<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>      StringBuilder sb = new StringBuilder("HttpServer (")<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>        .append(isAlive() ? STATE_DESCRIPTION_ALIVE :<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>                STATE_DESCRIPTION_NOT_LIVE).append("), listening at:");<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>      for (ListenerInfo li : listeners) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>        ServerConnector l = li.listener;<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>        sb.append(l.getHost()).append(":").append(l.getPort()).append("/,");<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>      }<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>      return sb.toString();<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>    }<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>  }<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span><a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>  /**<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   * Checks the user has privileges to access to instrumentation servlets.<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>   * &lt;p&gt;<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>   * If &lt;code&gt;hadoop.security.instrumentation.requires.admin&lt;/code&gt; is set to FALSE<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>   * (default value) it always returns TRUE.<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>   * &lt;/p&gt;&lt;p&gt;<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>   * If &lt;code&gt;hadoop.security.instrumentation.requires.admin&lt;/code&gt; is set to TRUE<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>   * it will check that if the current user is in the admin ACLS. If the user is<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>   * in the admin ACLs it returns TRUE, otherwise it returns FALSE.<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>   * &lt;/p&gt;<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>   *<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>   * @param servletContext the servlet context.<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>   * @param request the servlet request.<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>   * @param response the servlet response.<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   * @return TRUE/FALSE based on the logic decribed above.<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>   */<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>  public static boolean isInstrumentationAccessAllowed(<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>    ServletContext servletContext, HttpServletRequest request,<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>    HttpServletResponse response) throws IOException {<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>    Configuration conf =<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>      (Configuration) servletContext.getAttribute(CONF_CONTEXT_ATTRIBUTE);<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span><a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>    boolean access = true;<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    boolean adminAccess = conf.getBoolean(<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>      CommonConfigurationKeys.HADOOP_SECURITY_INSTRUMENTATION_REQUIRES_ADMIN,<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>      false);<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>    if (adminAccess) {<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>      access = hasAdministratorAccess(servletContext, request, response);<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>    }<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    return access;<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>  }<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span><a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>  /**<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * Does the user sending the HttpServletRequest has the administrator ACLs? If<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   * it isn't the case, response will be modified to send an error to the user.<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>   *<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>   * @param servletContext the {@link ServletContext} to use<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>   * @param request the {@link HttpServletRequest} to check<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>   * @param response used to send the error response if user does not have admin access.<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>   * @return true if admin-authorized, false otherwise<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>   * @throws IOException if an unauthenticated or unauthorized user tries to access the page<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>   */<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>  public static boolean hasAdministratorAccess(<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      ServletContext servletContext, HttpServletRequest request,<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>      HttpServletResponse response) throws IOException {<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>    Configuration conf =<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>        (Configuration) servletContext.getAttribute(CONF_CONTEXT_ATTRIBUTE);<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>    AccessControlList acl = (AccessControlList) servletContext.getAttribute(ADMINS_ACL);<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span><a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    return hasAdministratorAccess(conf, acl, request, response);<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>  }<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span><a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>  public static boolean hasAdministratorAccess(Configuration conf, AccessControlList acl,<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>      HttpServletRequest request, HttpServletResponse response) throws IOException {<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    // If there is no authorization, anybody has administrator access.<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>    if (!conf.getBoolean(<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>        CommonConfigurationKeys.HADOOP_SECURITY_AUTHORIZATION, false)) {<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>      return true;<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>    }<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span><a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>    String remoteUser = request.getRemoteUser();<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>    if (remoteUser == null) {<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>      response.sendError(HttpServletResponse.SC_UNAUTHORIZED,<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>                         "Unauthenticated users are not " +<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>                         "authorized to access this page.");<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>      return false;<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>    if (acl != null &amp;&amp; !userHasAdministratorAccess(acl, remoteUser)) {<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>      response.sendError(HttpServletResponse.SC_FORBIDDEN, "User "<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>          + remoteUser + " is unauthorized to access this page.");<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>      return false;<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>    return true;<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>  }<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span><a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>  /**<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>   * Get the admin ACLs from the given ServletContext and check if the given<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>   * user is in the ACL.<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>   *<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>   * @param servletContext the context containing the admin ACL.<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>   * @param remoteUser the remote user to check for.<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>   * @return true if the user is present in the ACL, false if no ACL is set or<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>   *         the user is not present<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>   */<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>  public static boolean userHasAdministratorAccess(ServletContext servletContext,<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>      String remoteUser) {<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>    AccessControlList adminsAcl = (AccessControlList) servletContext<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>        .getAttribute(ADMINS_ACL);<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>    return userHasAdministratorAccess(adminsAcl, remoteUser);<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>  }<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span><a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>  public static boolean userHasAdministratorAccess(AccessControlList acl, String remoteUser) {<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>    UserGroupInformation remoteUserUGI =<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>        UserGroupInformation.createRemoteUser(remoteUser);<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    return acl != null &amp;&amp; acl.isUserAllowed(remoteUserUGI);<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>  }<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span><a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>  /**<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>   * A very simple servlet to serve up a text representation of the current<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>   * stack traces. It both returns the stacks to the caller and logs them.<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>   * Currently the stack traces are done sequentially rather than exactly the<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>   * same data.<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>   */<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>  public static class StackServlet extends HttpServlet {<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>    private static final long serialVersionUID = -6284183679759467039L;<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span><a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>    @Override<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>    public void doGet(HttpServletRequest request, HttpServletResponse response)<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      throws ServletException, IOException {<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      if (!HttpServer.isInstrumentationAccessAllowed(getServletContext(),<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>                                                     request, response)) {<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        return;<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>      }<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      response.setContentType("text/plain; charset=UTF-8");<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>      try (PrintStream out = new PrintStream(<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>        response.getOutputStream(), false, "UTF-8")) {<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>        Threads.printThreadInfo(out, "");<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>        out.flush();<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      }<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>      ReflectionUtils.logThreadInfo(LOG, "jsp requested", 1);<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>    }<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>  }<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span><a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>  /**<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>   * A Servlet input filter that quotes all HTML active characters in the<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>   * parameter names and values. The goal is to quote the characters to make<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>   * all of the servlets resistant to cross-site scripting attacks.<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>   */<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>  public static class QuotingInputFilter implements Filter {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>    private FilterConfig config;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span><a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    public static class RequestQuoter extends HttpServletRequestWrapper {<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      private final HttpServletRequest rawRequest;<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>      public RequestQuoter(HttpServletRequest rawRequest) {<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>        super(rawRequest);<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>        this.rawRequest = rawRequest;<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      }<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span><a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>      /**<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>       * Return the set of parameter names, quoting each name.<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 Enumeration&lt;String&gt; getParameterNames() {<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>        return new Enumeration&lt;String&gt;() {<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>          private Enumeration&lt;String&gt; rawIterator =<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>            rawRequest.getParameterNames();<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>          @Override<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>          public boolean hasMoreElements() {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>            return rawIterator.hasMoreElements();<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 String nextElement() {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>            return HtmlQuoting.quoteHtmlChars(rawIterator.nextElement());<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>      }<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span><a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>      /**<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>       * Unquote the name and quote the value.<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>       */<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      @Override<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>      public String getParameter(String name) {<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>        return HtmlQuoting.quoteHtmlChars(rawRequest.getParameter(<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>                HtmlQuoting.unquoteHtmlChars(name)));<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>      }<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span><a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      @Override<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      public String[] getParameterValues(String name) {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>        String unquoteName = HtmlQuoting.unquoteHtmlChars(name);<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>        String[] unquoteValue = rawRequest.getParameterValues(unquoteName);<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>        if (unquoteValue == null) {<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>          return null;<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>        }<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>        String[] result = new String[unquoteValue.length];<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>        for(int i=0; i &lt; result.length; ++i) {<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>          result[i] = HtmlQuoting.quoteHtmlChars(unquoteValue[i]);<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>        }<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>        return result;<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>      }<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span><a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      @Override<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      public Map&lt;String, String[]&gt; getParameterMap() {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>        Map&lt;String, String[]&gt; result = new HashMap&lt;&gt;();<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        Map&lt;String, String[]&gt; raw = rawRequest.getParameterMap();<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        for (Map.Entry&lt;String,String[]&gt; item: raw.entrySet()) {<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>          String[] rawValue = item.getValue();<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>          String[] cookedValue = new String[rawValue.length];<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>          for(int i=0; i&lt; rawValue.length; ++i) {<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>            cookedValue[i] = HtmlQuoting.quoteHtmlChars(rawValue[i]);<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>          }<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>          result.put(HtmlQuoting.quoteHtmlChars(item.getKey()), cookedValue);<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        }<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>        return result;<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>      }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span><a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      /**<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>       * Quote the url so that users specifying the HOST HTTP header<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>       * can't inject attacks.<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>       */<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>      @Override<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>      public StringBuffer getRequestURL(){<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>        String url = rawRequest.getRequestURL().toString();<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>        return new StringBuffer(HtmlQuoting.quoteHtmlChars(url));<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      }<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span><a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      /**<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>       * Quote the server name so that users specifying the HOST HTTP header<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>       * can't inject attacks.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>       */<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>      @Override<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      public String getServerName() {<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        return HtmlQuoting.quoteHtmlChars(rawRequest.getServerName());<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>      }<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    }<a name="line.1476"></a>
 <span class="sourceLineNo">1477</span><a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      String mime = inferMimeType(request);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      if (mime == null) {<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>        httpResponse.setContentType("text/plain; charset=utf-8");<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>      } else if (mime.startsWith("text/html")) {<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>        // HTML with unspecified encoding, we want to<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>        // force HTML with utf-8 encoding<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>        // This is to avoid the following security issue:<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>        // http://openmya.hacker.jp/hasegawa/security/utf7cs.html<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        httpResponse.setContentType("text/html; charset=utf-8");<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>      } else if (mime.startsWith("application/xml")) {<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>        httpResponse.setContentType("text/xml; charset=utf-8");<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>      }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>      chain.doFilter(quoted, httpResponse);<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>    }<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span><a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>    /**<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>     * Infer the mime type for the response based on the extension of the request<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>     * URI. Returns null if unknown.<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>     */<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    private String inferMimeType(ServletRequest request) {<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>      String path = ((HttpServletRequest)request).getRequestURI();<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>      ServletContext context = config.getServletContext();<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>      return context.getMimeType(path);<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>    }<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>  }<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>}<a name="line.1503"></a>
+<span class="sourceLineNo">1478</span>    @Override<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    public void init(FilterConfig config) throws ServletException {<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>      this.config = config;<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>    }<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span><a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>    @Override<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    public void destroy() {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>    }<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span><a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>    @Override<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>    public void doFilter(ServletRequest request,<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>                         ServletResponse response,<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>                         FilterChain chain<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>                         ) throws IOException, ServletException {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>      HttpServletRequestWrapper quoted =<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        new RequestQuoter((HttpServletRequest) request);<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>      HttpServletResponse httpResponse = (HttpServletResponse) response;<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span><a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>      String mime = inferMimeType(request);<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>      if (mime == null) {<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        httpResponse.setContentType("text/plain; charset=utf-8");<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      } else if (mime.startsWith("text/html")) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>        // HTML with unspecified encoding, we want to<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>        // force HTML with utf-8 encoding<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>        // This is to avoid the following security issue:<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>        // http://openmya.hacker.jp/hasegawa/security/utf7cs.html<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>        httpResponse.setContentType("text/html; charset=utf-8");<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>      } else if (mime.startsWith("application/xml")) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>        httpResponse.setContentType("text/xml; charset=utf-8");<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      chain.doFilter(quoted, httpResponse);<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>    /**<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>     * Infer the mime type for the response based on the extension of the request<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>     * URI. Returns null if unknown.<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>     */<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>    private String inferMimeType(ServletRequest request) {<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>      String path = ((HttpServletRequest)request).getRequestURI();<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>      ServletContext context = config.getServletContext();<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>      return context.getMimeType(path);<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    }<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>  }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>}<a name="line.1521"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.RequestQuoter.html b/devapidocs/src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.RequestQuoter.html
index 01bf522..267a894 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.RequestQuoter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/http/HttpServer.QuotingInputFilter.RequestQuoter.html
@@ -74,21 +74,21 @@
 <span class="sourceLineNo">066</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.66"></a>
 <span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
 <span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.http.HttpVersion;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.Handler;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpConfiguration;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpConnectionFactory;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.RequestLog;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.SecureRequestCustomizer;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.Server;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.ServerConnector;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.SslConnectionFactory;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ContextHandlerCollection;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.HandlerCollection;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.RequestLogHandler;<a name="line.83"></a>
+<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.http.HttpVersion;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.Handler;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpConfiguration;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.HttpConnectionFactory;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.RequestLog;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.SecureRequestCustomizer;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.Server;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.ServerConnector;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.SslConnectionFactory;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.ContextHandlerCollection;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.HandlerCollection;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.RequestLogHandler;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.server.handler.gzip.GzipHandler;<a name="line.83"></a>
 <span class="sourceLineNo">084</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.DefaultServlet;<a name="line.84"></a>
 <span class="sourceLineNo">085</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.FilterHolder;<a name="line.85"></a>
 <span class="sourceLineNo">086</span>import org.apache.hbase.thirdparty.org.eclipse.jetty.servlet.FilterMapping;<a name="line.86"></a>
@@ -583,932 +583,950 @@
 <span class="sourceLineNo">575</span>    this.findPort = b.findPort;<a name="line.575"></a>
 <span class="sourceLineNo">576</span>    this.authenticationEnabled = b.securityEnabled;<a name="line.576"></a>
 <span class="sourceLineNo">577</span>    initializeWebServer(b.name, b.hostName, b.conf, b.pathSpecs, b);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  private void initializeWebServer(String name, String hostName,<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      Configuration conf, String[] pathSpecs, HttpServer.Builder b)<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      throws FileNotFoundException, IOException {<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>    Preconditions.checkNotNull(webAppContext);<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span>    HandlerCollection handlerCollection = new HandlerCollection();<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>    ContextHandlerCollection contexts = new ContextHandlerCollection();<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    RequestLog requestLog = HttpRequestLog.getRequestLog(name);<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>    if (requestLog != null) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      RequestLogHandler requestLogHandler = new RequestLogHandler();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      requestLogHandler.setRequestLog(requestLog);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      handlerCollection.addHandler(requestLogHandler);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>    }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>    final String appDir = getWebAppsPath(name);<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>    handlerCollection.addHandler(contexts);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    handlerCollection.addHandler(webAppContext);<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>    webServer.setHandler(handlerCollection);<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    webAppContext.setAttribute(ADMINS_ACL, adminsAcl);<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>    // Default apps need to be set first, so that all filters are applied to them.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    // Because they're added to defaultContexts, we need them there before we start<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    // adding filters<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    addDefaultApps(contexts, appDir, conf);<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span>    addGlobalFilter("safety", QuotingInputFilter.class.getName(), null);<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>    addGlobalFilter("clickjackingprevention",<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        ClickjackingPreventionFilter.class.getName(),<a name="line.614"></a>
-<span class="sourceLineNo">615</span>        ClickjackingPreventionFilter.getDefaultParameters(conf));<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    addGlobalFilter("securityheaders",<a name="line.617"></a>
-<span class="sourceLineNo">618</span>        SecurityHeadersFilter.class.getName(),<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        SecurityHeadersFilter.getDefaultParameters(conf));<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>    // But security needs to be enabled prior to adding the other servlets<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    if (authenticationEnabled) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      initSpnego(conf, hostName, b.usernameConfKey, b.keytabConfKey, b.kerberosNameRulesKey,<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          b.signatureSecretFileKey);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>    final FilterInitializer[] initializers = getFilterInitializers(conf);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    if (initializers != null) {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      conf = new Configuration(conf);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      conf.set(BIND_ADDRESS, hostName);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      for (FilterInitializer c : initializers) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        c.initFilter(this, conf);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    }<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>    addDefaultServlets(contexts, conf);<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>    if (pathSpecs != null) {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      for (String path : pathSpecs) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        LOG.info("adding path spec: " + path);<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        addFilterPathMapping(path, webAppContext);<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      }<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    }<a name="line.643"></a>
-<span class="sourceLineNo">644</span>  }<a name="line.644"></a>
-<span class="sourceLineNo">645</span><a name="line.645"></a>
-<span class="sourceLineNo">646</span>  private void addManagedListener(ServerConnector connector) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    listeners.add(new ListenerInfo(true, connector));<a name="line.647"></a>
-<span class="sourceLineNo">648</span>  }<a name="line.648"></a>
-<span class="sourceLineNo">649</span><a name="line.649"></a>
-<span class="sourceLineNo">650</span>  private static WebAppContext createWebAppContext(String name,<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      Configuration conf, AccessControlList adminsAcl, final String appDir) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    WebAppContext ctx = new WebAppContext();<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    ctx.setDisplayName(name);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    ctx.setContextPath("/");<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    ctx.setWar(appDir + "/" + name);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    ctx.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    // for org.apache.hadoop.metrics.MetricsServlet<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    ctx.getServletContext().setAttribute(<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      org.apache.hadoop.http.HttpServer2.CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    ctx.getServletContext().setAttribute(ADMINS_ACL, adminsAcl);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    addNoCacheFilter(ctx);<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    return ctx;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
-<span class="sourceLineNo">664</span><a name="line.664"></a>
-<span class="sourceLineNo">665</span>  private static void addNoCacheFilter(WebAppContext ctxt) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    defineFilter(ctxt, NO_CACHE_FILTER, NoCacheFilter.class.getName(),<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        Collections.&lt;String, String&gt; emptyMap(), new String[] { "/*" });<a name="line.667"></a>
-<span class="sourceLineNo">668</span>  }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /** Get an array of FilterConfiguration specified in the conf */<a name="line.670"></a>
-<span class="sourceLineNo">671</span>  private static FilterInitializer[] getFilterInitializers(Configuration conf) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    if (conf == null) {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      return null;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    }<a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span>    Class&lt;?&gt;[] classes = conf.getClasses(FILTER_INITIALIZERS_PROPERTY);<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    if (classes == null) {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      return null;<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    }<a name="line.679"></a>
-<span class="sourceLineNo">680</span><a name="line.680"></a>
-<span class="sourceLineNo">681</span>    FilterInitializer[] initializers = new FilterInitializer[classes.length];<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    for(int i = 0; i &lt; classes.length; i++) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      initializers[i] = (FilterInitializer)ReflectionUtils.newInstance(classes[i]);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    return initializers;<a name="line.685"></a>
+<span class="sourceLineNo">578</span>    this.webServer.setHandler(buildGzipHandler(this.webServer.getHandler()));<a name="line.578"></a>
+<span class="sourceLineNo">579</span>  }<a name="line.579"></a>
+<span class="sourceLineNo">580</span><a name="line.580"></a>
+<span class="sourceLineNo">581</span>  private void initializeWebServer(String name, String hostName,<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      Configuration conf, String[] pathSpecs, HttpServer.Builder b)<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      throws FileNotFoundException, IOException {<a name="line.583"></a>
+<span class="sourceLineNo">584</span><a name="line.584"></a>
+<span class="sourceLineNo">585</span>    Preconditions.checkNotNull(webAppContext);<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span>    HandlerCollection handlerCollection = new HandlerCollection();<a name="line.587"></a>
+<span class="sourceLineNo">588</span><a name="line.588"></a>
+<span class="sourceLineNo">589</span>    ContextHandlerCollection contexts = new ContextHandlerCollection();<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    RequestLog requestLog = HttpRequestLog.getRequestLog(name);<a name="line.590"></a>
+<span class="sourceLineNo">591</span><a name="line.591"></a>
+<span class="sourceLineNo">592</span>    if (requestLog != null) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      RequestLogHandler requestLogHandler = new RequestLogHandler();<a name="line.593"></a>
+<span class="sourceLineNo">594</span>      requestLogHandler.setRequestLog(requestLog);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      handlerCollection.addHandler(requestLogHandler);<a name="line.595"></a>
+<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span>    final String appDir = getWebAppsPath(name);<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>    handlerCollection.addHandler(contexts);<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    handlerCollection.addHandler(webAppContext);<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span>    webServer.setHandler(handlerCollection);<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>    webAppContext.setAttribute(ADMINS_ACL, adminsAcl);<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>    // Default apps need to be set first, so that all filters are applied to them.<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    // Because they're added to defaultContexts, we need them there before we start<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    // adding filters<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    addDefaultApps(contexts, appDir, conf);<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>    addGlobalFilter("safety", QuotingInputFilter.class.getName(), null);<a name="line.612"></a>
+<span class="sourceLineNo">613</span><a name="line.613"></a>
+<span class="sourceLineNo">614</span>    addGlobalFilter("clickjackingprevention",<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        ClickjackingPreventionFilter.class.getName(),<a name="line.615"></a>
+<span class="sourceLineNo">616</span>        ClickjackingPreventionFilter.getDefaultParameters(conf));<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span>    addGlobalFilter("securityheaders",<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        SecurityHeadersFilter.class.getName(),<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        SecurityHeadersFilter.getDefaultParameters(conf));<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span>    // But security needs to be enabled prior to adding the other servlets<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    if (authenticationEnabled) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>      initSpnego(conf, hostName, b.usernameConfKey, b.keytabConfKey, b.kerberosNameRulesKey,<a name="line.624"></a>
+<span class="sourceLineNo">625</span>          b.signatureSecretFileKey);<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>    final FilterInitializer[] initializers = getFilterInitializers(conf);<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    if (initializers != null) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      conf = new Configuration(conf);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      conf.set(BIND_ADDRESS, hostName);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      for (FilterInitializer c : initializers) {<a name="line.632"></a>
+<span class="sourceLineNo">633</span>        c.initFilter(this, conf);<a name="line.633"></a>
+<span class="sourceLineNo">634</span>      }<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    }<a name="line.635"></a>
+<span class="sourceLineNo">636</span><a name="line.636"></a>
+<span class="sourceLineNo">637</span>    addDefaultServlets(contexts, conf);<a name="line.637"></a>
+<span class="sourceLineNo">638</span><a name="line.638"></a>
+<span class="sourceLineNo">639</span>    if (pathSpecs != null) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      for (String path : pathSpecs) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>        LOG.info("adding path spec: " + path);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>        addFilterPathMapping(path, webAppContext);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      }<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    }<a name="line.644"></a>
+<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
+<span class="sourceLineNo">646</span><a name="line.646"></a>
+<span class="sourceLineNo">647</span>  private void addManagedListener(ServerConnector connector) {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    listeners.add(new ListenerInfo(true, connector));<a name="line.648"></a>
+<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>  private static WebAppContext createWebAppContext(String name,<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      Configuration conf, AccessControlList adminsAcl, final String appDir) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>    WebAppContext ctx = new WebAppContext();<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    ctx.setDisplayName(name);<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    ctx.setContextPath("/");<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    ctx.setWar(appDir + "/" + name);<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    ctx.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    // for org.apache.hadoop.metrics.MetricsServlet<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    ctx.getServletContext().setAttribute(<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      org.apache.hadoop.http.HttpServer2.CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.660"></a>
+<span class="sourceLineNo">661</span>    ctx.getServletContext().setAttribute(ADMINS_ACL, adminsAcl);<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    addNoCacheFilter(ctx);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    return ctx;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  }<a name="line.664"></a>
+<span class="sourceLineNo">665</span><a name="line.665"></a>
+<span class="sourceLineNo">666</span>  /**<a name="line.666"></a>
+<span class="sourceLineNo">667</span>   * Construct and configure an instance of {@link GzipHandler}. With complex<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   * multi-{@link WebAppContext} configurations, it's easiest to apply this handler directly to the<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * instance of {@link Server} near the end of its configuration, something like<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * &lt;pre&gt;<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   *    Server server = new Server();<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   *    //...<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   *    server.setHandler(buildGzipHandler(server.getHandler()));<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   *    server.start();<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   * &lt;/pre&gt;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   */<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  public static GzipHandler buildGzipHandler(final Handler wrapped) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    final GzipHandler gzipHandler = new GzipHandler();<a name="line.678"></a>
+<span class="sourceLineNo">679</span>    gzipHandler.setHandler(wrapped);<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    return gzipHandler;<a name="line.680"></a>
+<span class="sourceLineNo">681</span>  }<a name="line.681"></a>
+<span class="sourceLineNo">682</span><a name="line.682"></a>
+<span class="sourceLineNo">683</span>  private static void addNoCacheFilter(WebAppContext ctxt) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    defineFilter(ctxt, NO_CACHE_FILTER, NoCacheFilter.class.getName(),<a name="line.684"></a>
+<span class="sourceLineNo">685</span>        Collections.&lt;String, String&gt; emptyMap(), new String[] { "/*" });<a name="line.685"></a>
 <span class="sourceLineNo">686</span>  }<a name="line.686"></a>
 <span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>  /**<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   * Add default apps.<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * @param appDir The application directory<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   */<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  protected void addDefaultApps(ContextHandlerCollection parent,<a name="line.692"></a>
-<span class="sourceLineNo">693</span>      final String appDir, Configuration conf) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // set up the context for "/logs/" if "hadoop.log.dir" property is defined.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    String logDir = this.logDir;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    if (logDir == null) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      logDir = System.getProperty("hadoop.log.dir");<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    if (logDir != null) {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      ServletContextHandler logContext = new ServletContextHandler(parent, "/logs");<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      logContext.addServlet(AdminAuthorizedServlet.class, "/*");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      logContext.setResourceBase(logDir);<a name="line.702"></a>
-<span class="sourceLineNo">703</span><a name="line.703"></a>
-<span class="sourceLineNo">704</span>      if (conf.getBoolean(<a name="line.704"></a>
-<span class="sourceLineNo">705</span>          ServerConfigurationKeys.HBASE_JETTY_LOGS_SERVE_ALIASES,<a name="line.705"></a>
-<span class="sourceLineNo">706</span>          ServerConfigurationKeys.DEFAULT_HBASE_JETTY_LOGS_SERVE_ALIASES)) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>        Map&lt;String, String&gt; params = logContext.getInitParams();<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        params.put(<a name="line.708"></a>
-<span class="sourceLineNo">709</span>            "org.mortbay.jetty.servlet.Default.aliases", "true");<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      }<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      logContext.setDisplayName("logs");<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      setContextAttributes(logContext, conf);<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      defaultContexts.put(logContext, true);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    }<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    // set up the context for "/static/*"<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    ServletContextHandler staticContext = new ServletContextHandler(parent, "/static");<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    staticContext.setResourceBase(appDir + "/static");<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    staticContext.addServlet(DefaultServlet.class, "/*");<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    staticContext.setDisplayName("static");<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    setContextAttributes(staticContext, conf);<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    defaultContexts.put(staticContext, true);<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  private void setContextAttributes(ServletContextHandler context, Configuration conf) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    context.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    context.getServletContext().setAttribute(ADMINS_ACL, adminsAcl);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>  /**<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * Add default servlets.<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   */<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  protected void addDefaultServlets(<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      ContextHandlerCollection contexts, Configuration conf) throws IOException {<a name="line.733"></a>
-<span class="sourceLineNo">734</span>    // set up default servlets<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    addPrivilegedServlet("stacks", "/stacks", StackServlet.class);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    addPrivilegedServlet("logLevel", "/logLevel", LogLevel.Servlet.class);<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    // Hadoop3 has moved completely to metrics2, and  dropped support for Metrics v1's<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    // MetricsServlet (see HADOOP-12504).  We'll using reflection to load if against hadoop2.<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    // Remove when we drop support for hbase on hadoop2.x.<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    try {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      Class&lt;?&gt; clz = Class.forName("org.apache.hadoop.metrics.MetricsServlet");<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      addPrivilegedServlet("metrics", "/metrics", clz.asSubclass(HttpServlet.class));<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    } catch (Exception e) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      // do nothing<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    }<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    addPrivilegedServlet("jmx", "/jmx", JMXJsonServlet.class);<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    // While we don't expect users to have sensitive information in their configuration, they<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    // might. Give them an option to not expose the service configuration to all users.<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    if (conf.getBoolean(HTTP_PRIVILEGED_CONF_KEY, HTTP_PRIVILEGED_CONF_DEFAULT)) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      addPrivilegedServlet("conf", "/conf", ConfServlet.class);<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    } else {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      addUnprivilegedServlet("conf", "/conf", ConfServlet.class);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    }<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    final String asyncProfilerHome = ProfileServlet.getAsyncProfilerHome();<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    if (asyncProfilerHome != null &amp;&amp; !asyncProfilerHome.trim().isEmpty()) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      addPrivilegedServlet("prof", "/prof", ProfileServlet.class);<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      Path tmpDir = Paths.get(ProfileServlet.OUTPUT_DIR);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      if (Files.notExists(tmpDir)) {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>        Files.createDirectories(tmpDir);<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      }<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      ServletContextHandler genCtx = new ServletContextHandler(contexts, "/prof-output");<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      genCtx.addServlet(ProfileOutputServlet.class, "/*");<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      genCtx.setResourceBase(tmpDir.toAbsolutePath().toString());<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      genCtx.setDisplayName("prof-output");<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    } else {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>      addUnprivilegedServlet("prof", "/prof", ProfileServlet.DisabledServlet.class);<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      LOG.info("ASYNC_PROFILER_HOME environment variable and async.profiler.home system property " +<a name="line.767"></a>
-<span class="sourceLineNo">768</span>        "not specified. Disabling /prof endpoint.");<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    }<a name="line.769"></a>
-<span class="sourceLineNo">770</span>  }<a name="line.770"></a>
-<span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>  /**<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   * Set a value in the webapp context. These values are available to the jsp<a name="line.773"></a>
-<span class="sourceLineNo">774</span>   * pages as "application.getAttribute(name)".<a name="line.774"></a>
-<span class="sourceLineNo">775</span>   * @param name The name of the attribute<a name="line.775"></a>
-<span class="sourceLineNo">776</span>   * @param value The value of the attribute<a name="line.776"></a>
-<span class="sourceLineNo">777</span>   */<a name="line.777"></a>
-<span class="sourceLineNo">778</span>  public void setAttribute(String name, Object value) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    webAppContext.setAttribute(name, value);<a name="line.779"></a>
-<span class="sourceLineNo">780</span>  }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>  /**<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   * Add a Jersey resource package.<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * @param packageName The Java package name containing the Jersey resource.<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * @param pathSpec The path spec for the servlet<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   */<a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public void addJerseyResourcePackage(final String packageName,<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      final String pathSpec) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    LOG.info("addJerseyResourcePackage: packageName=" + packageName<a name="line.789"></a>
-<span class="sourceLineNo">790</span>        + ", pathSpec=" + pathSpec);<a name="line.790"></a>
-<span class="sourceLineNo">791</span><a name="line.791"></a>
-<span class="sourceLineNo">792</span>    ResourceConfig application = new ResourceConfig().packages(packageName);<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    final ServletHolder sh = new ServletHolder(new ServletContainer(application));<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    webAppContext.addServlet(sh, pathSpec);<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>  /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * Adds a servlet in the server that any user can access. This method differs from<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * {@link #addPrivilegedServlet(String, String, Class)} in that any authenticated user<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   * can interact with the servlet added by this method.<a name="line.800"></a>
-<span class="sourceLineNo">801</span>   * @param name The name of the servlet (can be passed as null)<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @param pathSpec The path spec for the servlet<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   * @param clazz The servlet class<a name="line.803"></a>
+<span class="sourceLineNo">688</span>  /** Get an array of FilterConfiguration specified in the conf */<a name="line.688"></a>
+<span class="sourceLineNo">689</span>  private static FilterInitializer[] getFilterInitializers(Configuration conf) {<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    if (conf == null) {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>      return null;<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
+<span class="sourceLineNo">693</span><a name="line.693"></a>
+<span class="sourceLineNo">694</span>    Class&lt;?&gt;[] classes = conf.getClasses(FILTER_INITIALIZERS_PROPERTY);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    if (classes == null) {<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      return null;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>    FilterInitializer[] initializers = new FilterInitializer[classes.length];<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    for(int i = 0; i &lt; classes.length; i++) {<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      initializers[i] = (FilterInitializer)ReflectionUtils.newInstance(classes[i]);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    return initializers;<a name="line.703"></a>
+<span class="sourceLineNo">704</span>  }<a name="line.704"></a>
+<span class="sourceLineNo">705</span><a name="line.705"></a>
+<span class="sourceLineNo">706</span>  /**<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   * Add default apps.<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * @param appDir The application directory<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   */<a name="line.709"></a>
+<span class="sourceLineNo">710</span>  protected void addDefaultApps(ContextHandlerCollection parent,<a name="line.710"></a>
+<span class="sourceLineNo">711</span>      final String appDir, Configuration conf) {<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    // set up the context for "/logs/" if "hadoop.log.dir" property is defined.<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    String logDir = this.logDir;<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    if (logDir == null) {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      logDir = System.getProperty("hadoop.log.dir");<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    if (logDir != null) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      ServletContextHandler logContext = new ServletContextHandler(parent, "/logs");<a name="line.718"></a>
+<span class="sourceLineNo">719</span>      logContext.addServlet(AdminAuthorizedServlet.class, "/*");<a name="line.719"></a>
+<span class="sourceLineNo">720</span>      logContext.setResourceBase(logDir);<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>      if (conf.getBoolean(<a name="line.722"></a>
+<span class="sourceLineNo">723</span>          ServerConfigurationKeys.HBASE_JETTY_LOGS_SERVE_ALIASES,<a name="line.723"></a>
+<span class="sourceLineNo">724</span>          ServerConfigurationKeys.DEFAULT_HBASE_JETTY_LOGS_SERVE_ALIASES)) {<a name="line.724"></a>
+<span class="sourceLineNo">725</span>        Map&lt;String, String&gt; params = logContext.getInitParams();<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        params.put(<a name="line.726"></a>
+<span class="sourceLineNo">727</span>            "org.mortbay.jetty.servlet.Default.aliases", "true");<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
+<span class="sourceLineNo">729</span>      logContext.setDisplayName("logs");<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      setContextAttributes(logContext, conf);<a name="line.730"></a>
+<span class="sourceLineNo">731</span>      defaultContexts.put(logContext, true);<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    }<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    // set up the context for "/static/*"<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    ServletContextHandler staticContext = new ServletContextHandler(parent, "/static");<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    staticContext.setResourceBase(appDir + "/static");<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    staticContext.addServlet(DefaultServlet.class, "/*");<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    staticContext.setDisplayName("static");<a name="line.737"></a>
+<span class="sourceLineNo">738</span>    setContextAttributes(staticContext, conf);<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    defaultContexts.put(staticContext, true);<a name="line.739"></a>
+<span class="sourceLineNo">740</span>  }<a name="line.740"></a>
+<span class="sourceLineNo">741</span><a name="line.741"></a>
+<span class="sourceLineNo">742</span>  private void setContextAttributes(ServletContextHandler context, Configuration conf) {<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    context.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);<a name="line.743"></a>
+<span class="sourceLineNo">744</span>    context.getServletContext().setAttribute(ADMINS_ACL, adminsAcl);<a name="line.744"></a>
+<span class="sourceLineNo">745</span>  }<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span>  /**<a name="line.747"></a>
+<span class="sourceLineNo">748</span>   * Add default servlets.<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   */<a name="line.749"></a>
+<span class="sourceLineNo">750</span>  protected void addDefaultServlets(<a name="line.750"></a>
+<span class="sourceLineNo">751</span>      ContextHandlerCollection contexts, Configuration conf) throws IOException {<a name="line.751"></a>
+<span class="sourceLineNo">752</span>    // set up default servlets<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    addPrivilegedServlet("stacks", "/stacks", StackServlet.class);<a name="line.753"></a>
+<span class="sourceLineNo">754</span>    addPrivilegedServlet("logLevel", "/logLevel", LogLevel.Servlet.class);<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    // Hadoop3 has moved completely to metrics2, and  dropped support for Metrics v1's<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    // MetricsServlet (see HADOOP-12504).  We'll using reflection to load if against hadoop2.<a name="line.756"></a>
+<span class="sourceLineNo">757</span>    // Remove when we drop support for hbase on hadoop2.x.<a name="line.757"></a>
+<span class="sourceLineNo">758</span>    try {<a name="line.758"></a>
+<span class="sourceLineNo">759</span>      Class&lt;?&gt; clz = Class.forName("org.apache.hadoop.metrics.MetricsServlet");<a name="line.759"></a>
+<span class="sourceLineNo">760</span>      addPrivilegedServlet("metrics", "/metrics", clz.asSubclass(HttpServlet.class));<a name="line.760"></a>
+<span class="sourceLineNo">761</span>    } catch (Exception e) {<a name="line.761"></a>
+<span class="sourceLineNo">762</span>      // do nothing<a name="line.762"></a>
+<span class="sourceLineNo">763</span>    }<a name="line.763"></a>
+<span class="sourceLineNo">764</span>    addPrivilegedServlet("jmx", "/jmx", JMXJsonServlet.class);<a name="line.764"></a>
+<span class="sourceLineNo">765</span>    // While we don't expect users to have sensitive information in their configuration, they<a name="line.765"></a>
+<span class="sourceLineNo">766</span>    // might. Give them an option to not expose the service configuration to all users.<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    if (conf.getBoolean(HTTP_PRIVILEGED_CONF_KEY, HTTP_PRIVILEGED_CONF_DEFAULT)) {<a name="line.767"></a>
+<span class="sourceLineNo">768</span>      addPrivilegedServlet("conf", "/conf", ConfServlet.class);<a name="line.768"></a>
+<span class="sourceLineNo">769</span>    } else {<a name="line.769"></a>
+<span class="sourceLineNo">770</span>      addUnprivilegedServlet("conf", "/conf", ConfServlet.class);<a name="line.770"></a>
+<span class="sourceLineNo">771</span>    }<a name="line.771"></a>
+<span class="sourceLineNo">772</span>    final String asyncProfilerHome = ProfileServlet.getAsyncProfilerHome();<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    if (asyncProfilerHome != null &amp;&amp; !asyncProfilerHome.trim().isEmpty()) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      addPrivilegedServlet("prof", "/prof", ProfileServlet.class);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      Path tmpDir = Paths.get(ProfileServlet.OUTPUT_DIR);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      if (Files.notExists(tmpDir)) {<a name="line.776"></a>
+<span class="sourceLineNo">777</span>        Files.createDirectories(tmpDir);<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      }<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      ServletContextHandler genCtx = new ServletContextHandler(contexts, "/prof-output");<a name="line.779"></a>
+<span class="sourceLineNo">780</span>      genCtx.addServlet(ProfileOutputServlet.class, "/*");<a name="line.780"></a>
+<span class="sourceLineNo">781</span>      genCtx.setResourceBase(tmpDir.toAbsolutePath().toString());<a name="line.781"></a>
+<span class="sourceLineNo">782</span>      genCtx.setDisplayName("prof-output");<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    } else {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>      addUnprivilegedServlet("prof", "/prof", ProfileServlet.DisabledServlet.class);<a name="line.784"></a>
+<span class="sourceLineNo">785</span>      LOG.info("ASYNC_PROFILER_HOME environment variable and async.profiler.home system property " +<a name="line.785"></a>
+<span class="sourceLineNo">786</span>        "not specified. Disabling /prof endpoint.");<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    }<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  }<a name="line.788"></a>
+<span class="sourceLineNo">789</span><a name="line.789"></a>
+<span class="sourceLineNo">790</span>  /**<a name="line.790"></a>
+<span class="sourceLineNo">791</span>   * Set a value in the webapp context. These values are available to the jsp<a name="line.791"></a>
+<span class="sourceLineNo">792</span>   * pages as "application.getAttribute(name)".<a name="line.792"></a>
+<span class="sourceLineNo">793</span>   * @param name The name of the attribute<a name="line.793"></a>
+<span class="sourceLineNo">794</span>   * @param value The value of the attribute<a name="line.794"></a>
+<span class="sourceLineNo">795</span>   */<a name="line.795"></a>
+<span class="sourceLineNo">796</span>  public void setAttribute(String name, Object value) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>    webAppContext.setAttribute(name, value);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>  }<a name="line.798"></a>
+<span class="sourceLineNo">799</span><a name="line.799"></a>
+<span class="sourceLineNo">800</span>  /**<a name="line.800"></a>
+<span class="sourceLineNo">801</span>   * Add a Jersey resource package.<a name="line.801"></a>
+<span class="sourceLineNo">802</span>   * @param packageName The Java package name containing the Jersey resource.<a name="line.802"></a>
+<span class="sourceLineNo">803</span>   * @param pathSpec The path spec for the servlet<a name="line.803"></a>
 <span class="sourceLineNo">804</span>   */<a name="line.804"></a>
-<span class="sourceLineNo">805</span>  public void addUnprivilegedServlet(String name, String pathSpec,<a name="line.805"></a>
-<span class="sourceLineNo">806</span>      Class&lt;? extends HttpServlet&gt; clazz) {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    addServletWithAuth(name, pathSpec, clazz, false);<a name="line.807"></a>
-<span class="sourceLineNo">808</span>  }<a name="line.808"></a>
+<span class="sourceLineNo">805</span>  public void addJerseyResourcePackage(final String packageName,<a name="line.805"></a>
+<span class="sourceLineNo">806</span>      final String pathSpec) {<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    LOG.info("addJerseyResourcePackage: packageName=" + packageName<a name="line.807"></a>
+<span class="sourceLineNo">808</span>        + ", pathSpec=" + pathSpec);<a name="line.808"></a>
 <span class="sourceLineNo">809</span><a name="line.809"></a>
-<span class="sourceLineNo">810</span>  /**<a name="line.810"></a>
-<span class="sourceLineNo">811</span>   * Adds a servlet in the server that only administrators can access. This method differs from<a name="line.811"></a>
-<span class="sourceLineNo">812</span>   * {@link #addUnprivilegedServlet(String, String, Class)} in that only those authenticated user<a name="line.812"></a>
-<span class="sourceLineNo">813</span>   * who are identified as administrators can interact with the servlet added by this method.<a name="line.813"></a>
-<span class="sourceLineNo">814</span>   */<a name="line.814"></a>
-<span class="sourceLineNo">815</span>  public void addPrivilegedServlet(String name, String pathSpec,<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      Class&lt;? extends HttpServlet&gt; clazz) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>    addServletWithAuth(name, pathSpec, clazz, true);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>  }<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span>  /**<a name="line.820"></a>
-<span class="sourceLineNo">821</span>   * Internal method to add a servlet to the HTTP server. Developers should not call this method<a name="line.821"></a>
-<span class="sourceLineNo">822</span>   * directly, but invoke it via {@link #addUnprivilegedServlet(String, String, Class)} or<a name="line.822"></a>
-<span class="sourceLineNo">823</span>   * {@link #addPrivilegedServlet(String, String, Class)}.<a name="line.823"></a>
-<span class="sourceLineNo">824</span>   */<a name="line.824"></a>
-<span class="sourceLineNo">825</span>  void addServletWithAuth(String name, String pathSpec,<a name="line.825"></a>
-<span class="sourceLineNo">826</span>      Class&lt;? extends HttpServlet&gt; clazz, boolean requireAuthz) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    addInternalServlet(name, pathSpec, clazz, requireAuthz);<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    addFilterPathMapping(pathSpec, webAppContext);<a name="line.828"></a>
-<span class="sourceLineNo">829</span>  }<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>  /**<a name="line.831"></a>
-<span class="sourceLineNo">832</span>   * Add an internal servlet in the server, specifying whether or not to<a name="line.832"></a>
-<span class="sourceLineNo">833</span>   * protect with Kerberos authentication.<a name="line.833"></a>
-<span class="sourceLineNo">834</span>   * Note: This method is to be used for adding servlets that facilitate<a name="line.834"></a>
-<span class="sourceLineNo">835</span>   * internal communication and not for user facing functionality. For<a name="line.835"></a>
-<span class="sourceLineNo">836</span>   * servlets added using this method, filters (except internal Kerberos<a name="line.836"></a>
-<span class="sourceLineNo">837</span>   * filters) are not enabled.<a name="line.837"></a>
-<span class="sourceLineNo">838</span>   *<a name="line.838"></a>
-<span class="sourceLineNo">839</span>   * @param name The name of the servlet (can be passed as null)<a name="line.839"></a>
-<span class="sourceLineNo">840</span>   * @param pathSpec The path spec for the servlet<a name="line.840"></a>
-<span class="sourceLineNo">841</span>   * @param clazz The servlet class<a name="line.841"></a>
-<span class="sourceLineNo">842</span>   * @param requireAuth Require Kerberos authenticate to access servlet<a name="line.842"></a>
-<span class="sourceLineNo">843</span>   */<a name="line.843"></a>
-<span class="sourceLineNo">844</span>  void addInternalServlet(String name, String pathSpec,<a name="line.844"></a>
-<span class="sourceLineNo">845</span>      Class&lt;? extends HttpServlet&gt; clazz, boolean requireAuthz) {<a name="line.845"></a>
-<span class="sourceLineNo">846</span>    ServletHolder holder = new ServletHolder(clazz);<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    if (name != null) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>      holder.setName(name);<a name="line.848"></a>
-<span class="sourceLineNo">849</span>    }<a name="line.849"></a>
-<span class="sourceLineNo">850</span>    if (authenticationEnabled &amp;&amp; requireAuthz) {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      FilterHolder filter = new FilterHolder(AdminAuthorizedFilter.class);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      filter.setName(AdminAuthorizedFilter.class.getSimpleName());<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      FilterMapping fmap = new FilterMapping();<a name="line.853"></a>
-<span class="sourceLineNo">854</span>      fmap.setPathSpec(pathSpec);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>      fmap.setDispatches(FilterMapping.ALL);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>      fmap.setFilterName(AdminAuthorizedFilter.class.getSimpleName());<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      webAppContext.getServletHandler().addFilter(filter, fmap);<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    }<a name="line.858"></a>
-<span class="sourceLineNo">859</span>    webAppContext.getSessionHandler().getSessionCookieConfig().setHttpOnly(true);<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    webAppContext.getSessionHandler().getSessionCookieConfig().setSecure(true);<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    webAppContext.addServlet(holder, pathSpec);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  }<a name="line.862"></a>
-<span class="sourceLineNo">863</span><a name="line.863"></a>
-<span class="sourceLineNo">864</span>  @Override<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  public void addFilter(String name, String classname, Map&lt;String, String&gt; parameters) {<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    final String[] USER_FACING_URLS = { "*.html", "*.jsp" };<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    defineFilter(webAppContext, name, classname, parameters, USER_FACING_URLS);<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    LOG.info("Added filter " + name + " (class=" + classname<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        + ") to context " + webAppContext.getDisplayName());<a name="line.869"></a>
-<span class="sourceLineNo">870</span>    final String[] ALL_URLS = { "/*" };<a name="line.870"></a>
-<span class="sourceLineNo">871</span>    for (Map.Entry&lt;ServletContextHandler, Boolean&gt; e : defaultContexts.entrySet()) {<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      if (e.getValue()) {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>        ServletContextHandler handler = e.getKey();<a name="line.873"></a>
-<span class="sourceLineNo">874</span>        defineFilter(handler, name, classname, parameters, ALL_URLS);<a name="line.874"></a>
-<span class="sourceLineNo">875</span>        LOG.info("Added filter " + name + " (class=" + classname<a name="line.875"></a>
-<span class="sourceLineNo">876</span>            + ") to context " + handler.getDisplayName());<a name="line.876"></a>
-<span class="sourceLineNo">877</span>      }<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    }<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    filterNames.add(name);<a name="line.879"></a>
+<span class="sourceLineNo">810</span>    ResourceConfig application = new ResourceConfig().packages(packageName);<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    final ServletHolder sh = new ServletHolder(new ServletContainer(application));<a name="line.811"></a>
+<span class="sourceLineNo">812</span>    webAppContext.addServlet(sh, pathSpec);<a name="line.812"></a>
+<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span>  /**<a name="line.815"></a>
+<span class="sourceLineNo">816</span>   * Adds a servlet in the server that any user can access. This method differs from<a name="line.816"></a>
+<span class="sourceLineNo">817</span>   * {@link #addPrivilegedServlet(String, String, Class)} in that any authenticated user<a name="line.817"></a>
+<span class="sourceLineNo">818</span>   * can interact with the servlet added by this method.<a name="line.818"></a>
+<span class="sourceLineNo">819</span>   * @param name The name of the servlet (can be passed as null)<a name="line.819"></a>
+<span class="sourceLineNo">820</span>   * @param pathSpec The path spec for the servlet<a name="line.820"></a>
+<span class="sourceLineNo">821</span>   * @param clazz The servlet class<a name="line.821"></a>
+<span class="sourceLineNo">822</span>   */<a name="line.822"></a>
+<span class="sourceLineNo">823</span>  public void addUnprivilegedServlet(String name, String pathSpec,<a name="line.823"></a>
+<span class="sourceLineNo">824</span>      Class&lt;? extends HttpServlet&gt; clazz) {<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    addServletWithAuth(name, pathSpec, clazz, false);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>  }<a name="line.826"></a>
+<span class="sourceLineNo">827</span><a name="line.827"></a>
+<span class="sourceLineNo">828</span>  /**<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * Adds a servlet in the server that only administrators can access. This method differs from<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   * {@link #addUnprivilegedServlet(String, String, Class)} in that only those authenticated user<a name="line.830"></a>
+<span class="sourceLineNo">831</span>   * who are identified as administrators can interact with the servlet added by this method.<a name="line.831"></a>
+<span class="sourceLineNo">832</span>   */<a name="line.832"></a>
+<span class="sourceLineNo">833</span>  public void addPrivilegedServlet(String name, String pathSpec,<a name="line.833"></a>
+<span class="sourceLineNo">834</span>      Class&lt;? extends HttpServlet&gt; clazz) {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    addServletWithAuth(name, pathSpec, clazz, true);<a name="line.835"></a>
+<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
+<span class="sourceLineNo">837</span><a name="line.837"></a>
+<span class="sourceLineNo">838</span>  /**<a name="line.838"></a>
+<span class="sourceLineNo">839</span>   * Internal method to add a servlet to the HTTP server. Developers should not call this method<a name="line.839"></a>
+<span class="sourceLineNo">840</span>   * directly, but invoke it via {@link #addUnprivilegedServlet(String, String, Class)} or<a name="line.840"></a>
+<span class="sourceLineNo">841</span>   * {@link #addPrivilegedServlet(String, String, Class)}.<a name="line.841"></a>
+<span class="sourceLineNo">842</span>   */<a name="line.842"></a>
+<span class="sourceLineNo">843</span>  void addServletWithAuth(String name, String pathSpec,<a name="line.843"></a>
+<span class="sourceLineNo">844</span>      Class&lt;? extends HttpServlet&gt; clazz, boolean requireAuthz) {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    addInternalServlet(name, pathSpec, clazz, requireAuthz);<a name="line.845"></a>
+<span class="sourceLineNo">846</span>    addFilterPathMapping(pathSpec, webAppContext);<a name="line.846"></a>
+<span class="sourceLineNo">847</span>  }<a name="line.847"></a>
+<span class="sourceLineNo">848</span><a name="line.848"></a>
+<span class="sourceLineNo">849</span>  /**<a name="line.849"></a>
+<span class="sourceLineNo">850</span>   * Add an internal servlet in the server, specifying whether or not to<a name="line.850"></a>
+<span class="sourceLineNo">851</span>   * protect with Kerberos authentication.<a name="line.851"></a>
+<span class="sourceLineNo">852</span>   * Note: This method is to be used for adding servlets that facilitate<a name="line.852"></a>
+<span class="sourceLineNo">853</span>   * internal communication and not for user facing functionality. For<a name="line.853"></a>
+<span class="sourceLineNo">854</span>   * servlets added using this method, filters (except internal Kerberos<a name="line.854"></a>
+<span class="sourceLineNo">855</span>   * filters) are not enabled.<a name="line.855"></a>
+<span class="sourceLineNo">856</span>   *<a name="line.856"></a>
+<span class="sourceLineNo">857</span>   * @param name The name of the servlet (can be passed as null)<a name="line.857"></a>
+<span class="sourceLineNo">858</span>   * @param pathSpec The path spec for the servlet<a name="line.858"></a>
+<span class="sourceLineNo">859</span>   * @param clazz The servlet class<a name="line.859"></a>
+<span class="sourceLineNo">860</span>   * @param requireAuth Require Kerberos authenticate to access servlet<a name="line.860"></a>
+<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
+<span class="sourceLineNo">862</span>  void addInternalServlet(String name, String pathSpec,<a name="line.862"></a>
+<span class="sourceLineNo">863</span>      Class&lt;? extends HttpServlet&gt; clazz, boolean requireAuthz) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>    ServletHolder holder = new ServletHolder(clazz);<a name="line.864"></a>
+<span class="sourceLineNo">865</span>    if (name != null) {<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      holder.setName(name);<a name="line.866"></a>
+<span class="sourceLineNo">867</span>    }<a name="line.867"></a>
+<span class="sourceLineNo">868</span>    if (authenticationEnabled &amp;&amp; requireAuthz) {<a name="line.868"></a>
+<span class="sourceLineNo">869</span>      FilterHolder filter = new FilterHolder(AdminAuthorizedFilter.class);<a name="line.869"></a>
+<span class="sourceLineNo">870</span>      filter.setName(AdminAuthorizedFilter.class.getSimpleName());<a name="line.870"></a>
+<span class="sourceLineNo">871</span>      FilterMapping fmap = new FilterMapping();<a name="line.871"></a>
+<span class="sourceLineNo">872</span>      fmap.setPathSpec(pathSpec);<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      fmap.setDispatches(FilterMapping.ALL);<a name="line.873"></a>
+<span class="sourceLineNo">874</span>      fmap.setFilterName(AdminAuthorizedFilter.class.getSimpleName());<a name="line.874"></a>
+<span class="sourceLineNo">875</span>      webAppContext.getServletHandler().addFilter(filter, fmap);<a name="line.875"></a>
+<span class="sourceLineNo">876</span>    }<a name="line.876"></a>
+<span class="sourceLineNo">877</span>    webAppContext.getSessionHandler().getSessionCookieConfig().setHttpOnly(true);<a name="line.877"></a>
+<span class="sourceLineNo">878</span>    webAppContext.getSessionHandler().getSessionCookieConfig().setSecure(true);<a name="line.878"></a>
+<span class="sourceLineNo">879</span>    webAppContext.addServlet(holder, pathSpec);<a name="line.879"></a>
 <span class="sourceLineNo">880</span>  }<a name="line.880"></a>
 <span class="sourceLineNo">881</span><a name="line.881"></a>
 <span class="sourceLineNo">882</span>  @Override<a name="line.882"></a>
-<span class="sourceLineNo">883</span>  public void addGlobalFilter(String name, String classname, Map&lt;String, String&gt; parameters) {<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    final String[] ALL_URLS = { "/*" };<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    defineFilter(webAppContext, name, classname, parameters, ALL_URLS);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    for (ServletContextHandler ctx : defaultContexts.keySet()) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      defineFilter(ctx, name, classname, parameters, ALL_URLS);<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    }<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    LOG.info("Added global filter '" + name + "' (class=" + classname + ")");<a name="line.889"></a>
-<span class="sourceLineNo">890</span>  }<a name="line.890"></a>
-<span class="sourceLineNo">891</span><a name="line.891"></a>
-<span class="sourceLineNo">892</span>  /**<a name="line.892"></a>
-<span class="sourceLineNo">893</span>   * Define a filter for a context and set up default url mappings.<a name="line.893"></a>
-<span class="sourceLineNo">894</span>   */<a name="line.894"></a>
-<span class="sourceLineNo">895</span>  public static void defineFilter(ServletContextHandler handler, String name,<a name="line.895"></a>
-<span class="sourceLineNo">896</span>      String classname, Map&lt;String,String&gt; parameters, String[] urls) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    FilterHolder holder = new FilterHolder();<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    holder.setName(name);<a name="line.898"></a>
-<span class="sourceLineNo">899</span>    holder.setClassName(classname);<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    if (parameters != null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      holder.setInitParameters(parameters);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>    }<a name="line.902"></a>
-<span class="sourceLineNo">903</span>    FilterMapping fmap = new FilterMapping();<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    fmap.setPathSpecs(urls);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    fmap.setDispatches(FilterMapping.ALL);<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    fmap.setFilterName(name);<a name="line.906"></a>
-<span class="sourceLineNo">907</span>    handler.getServletHandler().addFilter(holder, fmap);<a name="line.907"></a>
+<span class="sourceLineNo">883</span>  public void addFilter(String name, String classname, Map&lt;String, String&gt; parameters) {<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    final String[] USER_FACING_URLS = { "*.html", "*.jsp" };<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    defineFilter(webAppContext, name, classname, parameters, USER_FACING_URLS);<a name="line.885"></a>
+<span class="sourceLineNo">886</span>    LOG.info("Added filter " + name + " (class=" + classname<a name="line.886"></a>
+<span class="sourceLineNo">887</span>        + ") to context " + webAppContext.getDisplayName());<a name="line.887"></a>
+<span class="sourceLineNo">888</span>    final String[] ALL_URLS = { "/*" };<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    for (Map.Entry&lt;ServletContextHandler, Boolean&gt; e : defaultContexts.entrySet()) {<a name="line.889"></a>
+<span class="sourceLineNo">890</span>      if (e.getValue()) {<a name="line.890"></a>
+<span class="sourceLineNo">891</span>        ServletContextHandler handler = e.getKey();<a name="line.891"></a>
+<span class="sourceLineNo">892</span>        defineFilter(handler, name, classname, parameters, ALL_URLS);<a name="line.892"></a>
+<span class="sourceLineNo">893</span>        LOG.info("Added filter " + name + " (class=" + classname<a name="line.893"></a>
+<span class="sourceLineNo">894</span>            + ") to context " + handler.getDisplayName());<a name="line.894"></a>
+<span class="sourceLineNo">895</span>      }<a name="line.895"></a>
+<span class="sourceLineNo">896</span>    }<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    filterNames.add(name);<a name="line.897"></a>
+<span class="sourceLineNo">898</span>  }<a name="line.898"></a>
+<span class="sourceLineNo">899</span><a name="line.899"></a>
+<span class="sourceLineNo">900</span>  @Override<a name="line.900"></a>
+<span class="sourceLineNo">901</span>  public void addGlobalFilter(String name, String classname, Map&lt;String, String&gt; parameters) {<a name="line.901"></a>
+<span class="sourceLineNo">902</span>    final String[] ALL_URLS = { "/*" };<a name="line.902"></a>
+<span class="sourceLineNo">903</span>    defineFilter(webAppContext, name, classname, parameters, ALL_URLS);<a name="line.903"></a>
+<span class="sourceLineNo">904</span>    for (ServletContextHandler ctx : defaultContexts.keySet()) {<a name="line.904"></a>
+<span class="sourceLineNo">905</span>      defineFilter(ctx, name, classname, parameters, ALL_URLS);<a name="line.905"></a>
+<span class="sourceLineNo">906</span>    }<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    LOG.info("Added global filter '" + name + "' (class=" + classname + ")");<a name="line.907"></a>
 <span class="sourceLineNo">908</span>  }<a name="line.908"></a>
 <span class="sourceLineNo">909</span><a name="line.909"></a>
 <span class="sourceLineNo">910</span>  /**<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   * Add the path spec to the filter path mapping.<a name="line.911"></a>
-<span class="sourceLineNo">912</span>   * @param pathSpec The path spec<a name="line.912"></a>
-<span class="sourceLineNo">913</span>   * @param webAppCtx The WebApplicationContext to add to<a name="line.913"></a>
-<span class="sourceLineNo">914</span>   */<a name="line.914"></a>
-<span class="sourceLineNo">915</span>  protected void addFilterPathMapping(String pathSpec,<a name="line.915"></a>
-<span class="sourceLineNo">916</span>      WebAppContext webAppCtx) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    for(String name : filterNames) {<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      FilterMapping fmap = new FilterMapping();<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      fmap.setPathSpec(pathSpec);<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      fmap.setFilterName(name);<a name="line.920"></a>
-<span class="sourceLineNo">921</span>      fmap.setDispatches(FilterMapping.ALL);<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      webAppCtx.getServletHandler().addFilterMapping(fmap);<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    }<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>  /**<a name="line.926"></a>
-<span class="sourceLineNo">927</span>   * Get the value in the webapp context.<a name="line.927"></a>
-<span class="sourceLineNo">928</span>   * @param name The name of the attribute<a name="line.928"></a>
-<span class="sourceLineNo">929</span>   * @return The value of the attribute<a name="line.929"></a>
-<span class="sourceLineNo">930</span>   */<a name="line.930"></a>
-<span class="sourceLineNo">931</span>  public Object getAttribute(String name) {<a name="line.931"></a>
-<span class="sourceLineNo">932</span>    return webAppContext.getAttribute(name);<a name="line.932"></a>
-<span class="sourceLineNo">933</span>  }<a name="line.933"></a>
-<span class="sourceLineNo">934</span><a name="line.934"></a>
-<span class="sourceLineNo">935</span>  public WebAppContext getWebAppContext(){<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    return this.webAppContext;<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  }<a name="line.937"></a>
-<span class="sourceLineNo">938</span><a name="line.938"></a>
-<span class="sourceLineNo">939</span>  public String getWebAppsPath(String appName) throws FileNotFoundException {<a name="line.939"></a>
-<span class="sourceLineNo">940</span>    return getWebAppsPath(this.appDir, appName);<a name="line.940"></a>
-<span class="sourceLineNo">941</span>  }<a name="line.941"></a>
-<span class="sourceLineNo">942</span><a name="line.942"></a>
-<span class="sourceLineNo">943</span>  /**<a name="line.943"></a>
-<span class="sourceLineNo">944</span>   * Get the pathname to the webapps files.<a name="line.944"></a>
-<span class="sourceLineNo">945</span>   * @param appName eg "secondary" or "datanode"<a name="line.945"></a>
-<span class="sourceLineNo">946</span>   * @return the pathname as a URL<a name="line.946"></a>
-<span class="sourceLineNo">947</span>   * @throws FileNotFoundException if 'webapps' directory cannot be found on CLASSPATH.<a name="line.947"></a>
+<span class="sourceLineNo">911</span>   * Define a filter for a context and set up default url mappings.<a name="line.911"></a>
+<span class="sourceLineNo">912</span>   */<a name="line.912"></a>
+<span class="sourceLineNo">913</span>  public static void defineFilter(ServletContextHandler handler, String name,<a name="line.913"></a>
+<span class="sourceLineNo">914</span>      String classname, Map&lt;String,String&gt; parameters, String[] urls) {<a name="line.914"></a>
+<span class="sourceLineNo">915</span>    FilterHolder holder = new FilterHolder();<a name="line.915"></a>
+<span class="sourceLineNo">916</span>    holder.setName(name);<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    holder.setClassName(classname);<a name="line.917"></a>
+<span class="sourceLineNo">918</span>    if (parameters != null) {<a name="line.918"></a>
+<span class="sourceLineNo">919</span>      holder.setInitParameters(parameters);<a name="line.919"></a>
+<span class="sourceLineNo">920</span>    }<a name="line.920"></a>
+<span class="sourceLineNo">921</span>    FilterMapping fmap = new FilterMapping();<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    fmap.setPathSpecs(urls);<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    fmap.setDispatches(FilterMapping.ALL);<a name="line.923"></a>
+<span class="sourceLineNo">924</span>    fmap.setFilterName(name);<a name="line.924"></a>
+<span class="sourceLineNo">925</span>    handler.getServletHandler().addFilter(holder, fmap);<a name="line.925"></a>
+<span class="sourceLineNo">926</span>  }<a name="line.926"></a>
+<span class="sourceLineNo">927</span><a name="line.927"></a>
+<span class="sourceLineNo">928</span>  /**<a name="line.928"></a>
+<span class="sourceLineNo">929</span>   * Add the path spec to the filter path mapping.<a name="line.929"></a>
+<span class="sourceLineNo">930</span>   * @param pathSpec The path spec<a name="line.930"></a>
+<span class="sourceLineNo">931</span>   * @param webAppCtx The WebApplicationContext to add to<a name="line.931"></a>
+<span class="sourceLineNo">932</span>   */<a name="line.932"></a>
+<span class="sourceLineNo">933</span>  protected void addFilterPathMapping(String pathSpec,<a name="line.933"></a>
+<span class="sourceLineNo">934</span>      WebAppContext webAppCtx) {<a name="line.934"></a>
+<span class="sourceLineNo">935</span>    for(String name : filterNames) {<a name="line.935"></a>
+<span class="sourceLineNo">936</span>      FilterMapping fmap = new FilterMapping();<a name="line.936"></a>
+<span class="sourceLineNo">937</span>      fmap.setPathSpec(pathSpec);<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      fmap.setFilterName(name);<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      fmap.setDispatches(FilterMapping.ALL);<a name="line.939"></a>
+<span class="sourceLineNo">940</span>      webAppCtx.getServletHandler().addFilterMapping(fmap);<a name="line.940"></a>
+<span class="sourceLineNo">941</span>    }<a name="line.941"></a>
+<span class="sourceLineNo">942</span>  }<a name="line.942"></a>
+<span class="sourceLineNo">943</span><a name="line.943"></a>
+<span class="sourceLineNo">944</span>  /**<a name="line.944"></a>
+<span class="sourceLineNo">945</span>   * Get the value in the webapp context.<a name="line.945"></a>
+<span class="sourceLineNo">946</span>   * @param name The name of the attribute<a name="line.946"></a>
+<span class="sourceLineNo">947</span>   * @return The value of the attribute<a name="line.947"></a>
 <span class="sourceLineNo">948</span>   */<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  protected String getWebAppsPath(String webapps, String appName) throws FileNotFoundException {<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    URL url = getClass().getClassLoader().getResource(webapps + "/" + appName);<a name="line.950"></a>
-<span class="sourceLineNo">951</span><a name="line.951"></a>
-<span class="sourceLineNo">952</span>    if (url == null) {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      throw new FileNotFoundException(webapps + "/" + appName<a name="line.953"></a>
-<span class="sourceLineNo">954</span>              + " not found in CLASSPATH");<a name="line.954"></a>
-<span class="sourceLineNo">955</span>    }<a name="line.955"></a>
+<span class="sourceLineNo">949</span>  public Object getAttribute(String name) {<a name="line.949"></a>
+<span class="sourceLineNo">950</span>    return webAppContext.getAttribute(name);<a name="line.950"></a>
+<span class="sourceLineNo">951</span>  }<a name="line.951"></a>
+<span class="sourceLineNo">952</span><a name="line.952"></a>
+<span class="sourceLineNo">953</span>  public WebAppContext getWebAppContext(){<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    return this.webAppContext;<a name="line.954"></a>
+<span class="sourceLineNo">955</span>  }<a name="line.955"></a>
 <span class="sourceLineNo">956</span><a name="line.956"></a>
-<span class="sourceLineNo">957</span>    String urlString = url.toString();<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    return urlString.substring(0, urlString.lastIndexOf('/'));<a name="line.958"></a>
+<span class="sourceLineNo">957</span>  public String getWebAppsPath(String appName) throws FileNotFoundException {<a name="line.957"></a>
+<span class="sourceLineNo">958</span>    return getWebAppsPath(this.appDir, appName);<a name="line.958"></a>
 <span class="sourceLineNo">959</span>  }<a name="line.959"></a>
 <span class="sourceLineNo">960</span><a name="line.960"></a>
 <span class="sourceLineNo">961</span>  /**<a name="line.961"></a>
-<span class="sourceLineNo">962</span>   * Get the port that the server is on<a name="line.962"></a>
-<span class="sourceLineNo">963</span>   * @return the port<a name="line.963"></a>
-<span class="sourceLineNo">964</span>   * @deprecated Since 0.99.0<a name="line.964"></a>
-<span class="sourceLineNo">965</span>   */<a name="line.965"></a>
-<span class="sourceLineNo">966</span>  @Deprecated<a name="line.966"></a>
-<span class="sourceLineNo">967</span>  public int getPort() {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>    return ((ServerConnector)webServer.getConnectors()[0]).getLocalPort();<a name="line.968"></a>
-<span class="sourceLineNo">969</span>  }<a name="line.969"></a>
-<span class="sourceLineNo">970</span><a name="line.970"></a>
-<span class="sourceLineNo">971</span>  /**<a name="line.971"></a>
-<span class="sourceLineNo">972</span>   * Get the address that corresponds to a particular connector.<a name="line.972"></a>
-<span class="sourceLineNo">973</span>   *<a name="line.973"></a>
-<span class="sourceLineNo">974</span>   * @return the corresponding address for the connector, or null if there's no<a name="line.974"></a>
-<span class="sourceLineNo">975</span>   *         such connector or the connector is not bounded.<a name="line.975"></a>
-<span class="sourceLineNo">976</span>   */<a name="line.976"></a>
-<span class="sourceLineNo">977</span>  public InetSocketAddress getConnectorAddress(int index) {<a name="line.977"></a>
-<span class="sourceLineNo">978</span>    Preconditions.checkArgument(index &gt;= 0);<a name="line.978"></a>
-<span class="sourceLineNo">979</span><a name="line.979"></a>
-<span class="sourceLineNo">980</span>    if (index &gt; webServer.getConnectors().length) {<a name="line.980"></a>
-<span class="sourceLineNo">981</span>      return null;<a name="line.981"></a>
-<span class="sourceLineNo">982</span>    }<a name="line.982"></a>
-<span class="sourceLineNo">983</span><a name="line.983"></a>
-<span class="sourceLineNo">984</span>    ServerConnector c = (ServerConnector)webServer.getConnectors()[index];<a name="line.984"></a>
-<span class="sourceLineNo">985</span>    if (c.getLocalPort() == -1 || c.getLocalPort() == -2) {<a name="line.985"></a>
-<span class="sourceLineNo">986</span>      // -1 if the connector has not been opened<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      // -2 if it has been closed<a name="line.987"></a>
-<span class="sourceLineNo">988</span>      return null;<a name="line.988"></a>
-<span class="sourceLineNo">989</span>    }<a name="line.989"></a>
-<span class="sourceLineNo">990</span><a name="line.990"></a>
-<span class="sourceLineNo">991</span>    return new InetSocketAddress(c.getHost(), c.getLocalPort());<a name="line.991"></a>
-<span class="sourceLineNo">992</span>  }<a name="line.992"></a>
-<span class="sourceLineNo">993</span><a name="line.993"></a>
-<span class="sourceLineNo">994</span>  /**<a name="line.994"></a>
-<span class="sourceLineNo">995</span>   * Set the min, max number of worker threads (simultaneous connections).<a name="line.995"></a>
-<span class="sourceLineNo">996</span>   */<a name="line.996"></a>
-<span class="sourceLineNo">997</span>  public void setThreads(int min, int max) {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>    QueuedThreadPool pool = (QueuedThreadPool) webServer.getThreadPool();<a name="line.998"></a>
-<span class="sourceLineNo">999</span>    pool.setMinThreads(min);<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>    pool.setMaxThreads(max);<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>  }<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span><a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>  private void initSpnego(Configuration conf, String hostName,<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      String usernameConfKey, String keytabConfKey, String kerberosNameRuleKey,<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>      String signatureSecretKeyFileKey) throws IOException {<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>    Map&lt;String, String&gt; params = new HashMap&lt;&gt;();<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    String principalInConf = getOrEmptyString(conf, usernameConfKey);<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>    if (!principalInConf.isEmpty()) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_PRINCIPAL_SUFFIX, SecurityUtil.getServerPrincipal(<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>          principalInConf, hostName));<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>    }<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>    String httpKeytab = getOrEmptyString(conf, keytabConfKey);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>    if (!httpKeytab.isEmpty()) {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_KEYTAB_SUFFIX, httpKeytab);<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    }<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    String kerberosNameRule = getOrEmptyString(conf, kerberosNameRuleKey);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>    if (!kerberosNameRule.isEmpty()) {<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_KRB_NAME_SUFFIX, kerberosNameRule);<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    String signatureSecretKeyFile = getOrEmptyString(conf, signatureSecretKeyFileKey);<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>    if (!signatureSecretKeyFile.isEmpty()) {<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>      params.put(HTTP_AUTHENTICATION_SIGNATURE_SECRET_FILE_SUFFIX,<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>          signatureSecretKeyFile);<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    params.put(AuthenticationFilter.AUTH_TYPE, "kerberos");<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>    // Verify that the required options were provided<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    if (isMissing(params.get(HTTP_SPNEGO_AUTHENTICATION_PRINCIPAL_SUFFIX)) ||<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>            isMissing(params.get(HTTP_SPNEGO_AUTHENTICATION_KEYTAB_SUFFIX))) {<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>      throw new IllegalArgumentException(usernameConfKey + " and "<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>          + keytabConfKey + " are both required in the configuration "<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>          + "to enable SPNEGO/Kerberos authentication for the Web UI");<a name="line.1032"></a>
+<span class="sourceLineNo">962</span>   * Get the pathname to the webapps files.<a name="line.962"></a>
+<span class="sourceLineNo">963</span>   * @param appName eg "secondary" or "datanode"<a name="line.963"></a>
+<span class="sourceLineNo">964</span>   * @return the pathname as a URL<a name="line.964"></a>
+<span class="sourceLineNo">965</span>   * @throws FileNotFoundException if 'webapps' directory cannot be found on CLASSPATH.<a name="line.965"></a>
+<span class="sourceLineNo">966</span>   */<a name="line.966"></a>
+<span class="sourceLineNo">967</span>  protected String getWebAppsPath(String webapps, String appName) throws FileNotFoundException {<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    URL url = getClass().getClassLoader().getResource(webapps + "/" + appName);<a name="line.968"></a>
+<span class="sourceLineNo">969</span><a name="line.969"></a>
+<span class="sourceLineNo">970</span>    if (url == null) {<a name="line.970"></a>
+<span class="sourceLineNo">971</span>      throw new FileNotFoundException(webapps + "/" + appName<a name="line.971"></a>
+<span class="sourceLineNo">972</span>              + " not found in CLASSPATH");<a name="line.972"></a>
+<span class="sourceLineNo">973</span>    }<a name="line.973"></a>
+<span class="sourceLineNo">974</span><a name="line.974"></a>
+<span class="sourceLineNo">975</span>    String urlString = url.toString();<a name="line.975"></a>
+<span class="sourceLineNo">976</span>    return urlString.substring(0, urlString.lastIndexOf('/'));<a name="line.976"></a>
+<span class="sourceLineNo">977</span>  }<a name="line.977"></a>
+<span class="sourceLineNo">978</span><a name="line.978"></a>
+<span class="sourceLineNo">979</span>  /**<a name="line.979"></a>
+<span class="sourceLineNo">980</span>   * Get the port that the server is on<a name="line.980"></a>
+<span class="sourceLineNo">981</span>   * @return the port<a name="line.981"></a>
+<span class="sourceLineNo">982</span>   * @deprecated Since 0.99.0<a name="line.982"></a>
+<span class="sourceLineNo">983</span>   */<a name="line.983"></a>
+<span class="sourceLineNo">984</span>  @Deprecated<a name="line.984"></a>
+<span class="sourceLineNo">985</span>  public int getPort() {<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    return ((ServerConnector)webServer.getConnectors()[0]).getLocalPort();<a name="line.986"></a>
+<span class="sourceLineNo">987</span>  }<a name="line.987"></a>
+<span class="sourceLineNo">988</span><a name="line.988"></a>
+<span class="sourceLineNo">989</span>  /**<a name="line.989"></a>
+<span class="sourceLineNo">990</span>   * Get the address that corresponds to a particular connector.<a name="line.990"></a>
+<span class="sourceLineNo">991</span>   *<a name="line.991"></a>
+<span class="sourceLineNo">992</span>   * @return the corresponding address for the connector, or null if there's no<a name="line.992"></a>
+<span class="sourceLineNo">993</span>   *         such connector or the connector is not bounded.<a name="line.993"></a>
+<span class="sourceLineNo">994</span>   */<a name="line.994"></a>
+<span class="sourceLineNo">995</span>  public InetSocketAddress getConnectorAddress(int index) {<a name="line.995"></a>
+<span class="sourceLineNo">996</span>    Preconditions.checkArgument(index &gt;= 0);<a name="line.996"></a>
+<span class="sourceLineNo">997</span><a name="line.997"></a>
+<span class="sourceLineNo">998</span>    if (index &gt; webServer.getConnectors().length) {<a name="line.998"></a>
+<span class="sourceLineNo">999</span>      return null;<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span><a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>    ServerConnector c = (ServerConnector)webServer.getConnectors()[index];<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>    if (c.getLocalPort() == -1 || c.getLocalPort() == -2) {<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>      // -1 if the connector has not been opened<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      // -2 if it has been closed<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>      return null;<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    }<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span><a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>    return new InetSocketAddress(c.getHost(), c.getLocalPort());<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>  }<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span><a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>  /**<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>   * Set the min, max number of worker threads (simultaneous connections).<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>   */<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>  public void setThreads(int min, int max) {<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>    QueuedThreadPool pool = (QueuedThreadPool) webServer.getThreadPool();<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>    pool.setMinThreads(min);<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    pool.setMaxThreads(max);<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>  }<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span><a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>  private void initSpnego(Configuration conf, String hostName,<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>      String usernameConfKey, String keytabConfKey, String kerberosNameRuleKey,<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>      String signatureSecretKeyFileKey) throws IOException {<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    Map&lt;String, String&gt; params = new HashMap&lt;&gt;();<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    String principalInConf = getOrEmptyString(conf, usernameConfKey);<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    if (!principalInConf.isEmpty()) {<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_PRINCIPAL_SUFFIX, SecurityUtil.getServerPrincipal(<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>          principalInConf, hostName));<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>    }<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>    String httpKeytab = getOrEmptyString(conf, keytabConfKey);<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    if (!httpKeytab.isEmpty()) {<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_KEYTAB_SUFFIX, httpKeytab);<a name="line.1032"></a>
 <span class="sourceLineNo">1033</span>    }<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span><a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    if (conf.getBoolean(HTTP_SPNEGO_AUTHENTICATION_PROXYUSER_ENABLE_KEY,<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>        HTTP_SPNEGO_AUTHENTICATION_PROXYUSER_ENABLE_DEFAULT)) {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>        //Copy/rename standard hadoop proxyuser settings to filter<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>        for(Map.Entry&lt;String, String&gt; proxyEntry :<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>            conf.getPropsWithPrefix(ProxyUsers.CONF_HADOOP_PROXYUSER).entrySet()) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>            params.put(ProxyUserAuthenticationFilter.PROXYUSER_PREFIX + proxyEntry.getKey(),<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>                proxyEntry.getValue());<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>        }<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>        addGlobalFilter(SPNEGO_PROXYUSER_FILTER, ProxyUserAuthenticationFilter.class.getName(), params);<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    } else {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        addGlobalFilter(SPNEGO_FILTER, AuthenticationFilter.class.getName(), params);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    }<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>  }<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span><a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>  /**<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>   * Returns true if the argument is non-null and not whitespace<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>   */<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>  private boolean isMissing(String value) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    if (null == value) {<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      return true;<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    }<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    return value.trim().isEmpty();<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>  }<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span><a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>  /**<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>   * Extracts the value for the given key from the configuration of returns a string of<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>   * zero length.<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>   */<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>  private String getOrEmptyString(Configuration conf, String key) {<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    if (null == key) {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>      return EMPTY_STRING;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    final String value = conf.get(key.trim());<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    return null == value ? EMPTY_STRING : value;<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  }<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span><a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>  /**<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>   * Start the server. Does not wait for the server to start.<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>   */<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>  public void start() throws IOException {<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    try {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>      try {<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>        openListeners();<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>        webServer.start();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>      } catch (IOException ex) {<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        LOG.info("HttpServer.start() threw a non Bind IOException", ex);<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>        throw ex;<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>      } catch (MultiException ex) {<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>        LOG.info("HttpServer.start() threw a MultiException", ex);<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>        throw ex;<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>      }<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      // Make sure there is no handler failures.<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>      Handler[] handlers = webServer.getHandlers();<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>      for (int i = 0; i &lt; handlers.length; i++) {<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>        if (handlers[i].isFailed()) {<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>          throw new IOException(<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>              "Problem in starting http server. Server handlers failed");<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>        }<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>      // Make sure there are no errors initializing the context.<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      Throwable unavailableException = webAppContext.getUnavailableException();<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      if (unavailableException != null) {<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        // Have to stop the webserver, or else its non-daemon threads<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>        // will hang forever.<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        webServer.stop();<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>        throw new IOException("Unable to initialize WebAppContext",<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>            unavailableException);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      }<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>    } catch (IOException e) {<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      throw e;<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    } catch (InterruptedException e) {<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>      throw (IOException) new InterruptedIOException(<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>          "Interrupted while starting HTTP server").initCause(e);<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    } catch (Exception e) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>      throw new IOException("Problem starting http server", e);<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>  }<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span><a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>  private void loadListeners() {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    for (ListenerInfo li : listeners) {<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      webServer.addConnector(li.listener);<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>    }<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>  }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span><a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  /**<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>   * Open the main listener for the server<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>   * @throws Exception if the listener cannot be opened or the appropriate port is already in use<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>   */<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>  void openListeners() throws Exception {<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>    for (ListenerInfo li : listeners) {<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>      ServerConnector listener = li.listener;<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>      if (!li.isManaged || (li.listener.getLocalPort() != -1 &amp;&amp; li.listener.getLocalPort() != -2)) {<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>        // This listener is either started externally, or has not been opened, or has been closed<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>        continue;<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>      }<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      int port = listener.getPort();<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>      while (true) {<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>        // jetty has a bug where you can't reopen a listener that previously<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>        // failed to open w/o issuing a close first, even if the port is changed<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        try {<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>          listener.close();<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>          listener.open();<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>          LOG.info("Jetty bound to port " + listener.getLocalPort());<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>          break;<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>        } catch (IOException ex) {<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>          if(!(ex instanceof BindException) &amp;&amp; !(ex.getCause() instanceof BindException)) {<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>            throw ex;<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>          }<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>          if (port == 0 || !findPort) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>            BindException be = new BindException("Port in use: "<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>                + listener.getHost() + ":" + listener.getPort());<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>            be.initCause(ex);<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>            throw be;<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>          }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>        }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>        // try the next port number<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>        listener.setPort(++port);<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>        Thread.sleep(100);<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>      }<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>    }<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>  }<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span><a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>  /**<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>   * stop the server<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>   */<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>  public void stop() throws Exception {<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    MultiException exception = null;<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    for (ListenerInfo li : listeners) {<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>      if (!li.isManaged) {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>        continue;<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>      }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>      try {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>        li.listener.close();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>      } catch (Exception e) {<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>        LOG.error(<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>            "Error while stopping listener for webapp"<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>                + webAppContext.getDisplayName(), e);<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>        exception = addMultiException(exception, e);<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>      }<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    }<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    try {<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>      // clear &amp; stop webAppContext attributes to avoid memory leaks.<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>      webAppContext.clearAttributes();<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      webAppContext.stop();<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    } catch (Exception e) {<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>      LOG.error("Error while stopping web app context for webapp "<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>          + webAppContext.getDisplayName(), e);<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>      exception = addMultiException(exception, e);<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span><a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>    try {<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>      webServer.stop();<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    } catch (Exception e) {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>      LOG.error("Error while stopping web server for webapp "<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>          + webAppContext.getDisplayName(), e);<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>      exception = addMultiException(exception, e);<a name="line.1192"></a>
+<span class="sourceLineNo">1034</span>    String kerberosNameRule = getOrEmptyString(conf, kerberosNameRuleKey);<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>    if (!kerberosNameRule.isEmpty()) {<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>      params.put(HTTP_SPNEGO_AUTHENTICATION_KRB_NAME_SUFFIX, kerberosNameRule);<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>    }<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>    String signatureSecretKeyFile = getOrEmptyString(conf, signatureSecretKeyFileKey);<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>    if (!signatureSecretKeyFile.isEmpty()) {<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>      params.put(HTTP_AUTHENTICATION_SIGNATURE_SECRET_FILE_SUFFIX,<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>          signatureSecretKeyFile);<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>    }<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>    params.put(AuthenticationFilter.AUTH_TYPE, "kerberos");<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span><a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>    // Verify that the required options were provided<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    if (isMissing(params.get(HTTP_SPNEGO_AUTHENTICATION_PRINCIPAL_SUFFIX)) ||<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>            isMissing(params.get(HTTP_SPNEGO_AUTHENTICATION_KEYTAB_SUFFIX))) {<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>      throw new IllegalArgumentException(usernameConfKey + " and "<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>          + keytabConfKey + " are both required in the configuration "<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          + "to enable SPNEGO/Kerberos authentication for the Web UI");<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>    }<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span><a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>    if (conf.getBoolean(HTTP_SPNEGO_AUTHENTICATION_PROXYUSER_ENABLE_KEY,<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>        HTTP_SPNEGO_AUTHENTICATION_PROXYUSER_ENABLE_DEFAULT)) {<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>        //Copy/rename standard hadoop proxyuser settings to filter<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>        for(Map.Entry&lt;String, String&gt; proxyEntry :<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>            conf.getPropsWithPrefix(ProxyUsers.CONF_HADOOP_PROXYUSER).entrySet()) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>            params.put(ProxyUserAuthenticationFilter.PROXYUSER_PREFIX + proxyEntry.getKey(),<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>                proxyEntry.getValue());<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>        }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>        addGlobalFilter(SPNEGO_PROXYUSER_FILTER, ProxyUserAuthenticationFilter.class.getName(), params);<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    } else {<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>        addGlobalFilter(SPNEGO_FILTER, AuthenticationFilter.class.getName(), params);<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>  }<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span><a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>  /**<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>   * Returns true if the argument is non-null and not whitespace<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>   */<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>  private boolean isMissing(String value) {<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    if (null == value) {<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      return true;<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    }<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    return value.trim().isEmpty();<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>  }<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span><a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>  /**<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>   * Extracts the value for the given key from the configuration of returns a string of<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>   * zero length.<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>   */<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>  private String getOrEmptyString(Configuration conf, String key) {<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>    if (null == key) {<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>      return EMPTY_STRING;<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>    }<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    final String value = conf.get(key.trim());<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    return null == value ? EMPTY_STRING : value;<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>  }<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span><a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>  /**<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>   * Start the server. Does not wait for the server to start.<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>   */<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>  public void start() throws IOException {<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    try {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      try {<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>        openListeners();<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>        webServer.start();<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      } catch (IOException ex) {<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>        LOG.info("HttpServer.start() threw a non Bind IOException", ex);<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>        throw ex;<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      } catch (MultiException ex) {<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>        LOG.info("HttpServer.start() threw a MultiException", ex);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>        throw ex;<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>      }<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      // Make sure there is no handler failures.<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>      Handler[] handlers = webServer.getHandlers();<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>      for (int i = 0; i &lt; handlers.length; i++) {<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>        if (handlers[i].isFailed()) {<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>          throw new IOException(<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>              "Problem in starting http server. Server handlers failed");<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>        }<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      }<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      // Make sure there are no errors initializing the context.<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>      Throwable unavailableException = webAppContext.getUnavailableException();<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>      if (unavailableException != null) {<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>        // Have to stop the webserver, or else its non-daemon threads<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>        // will hang forever.<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>        webServer.stop();<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>        throw new IOException("Unable to initialize WebAppContext",<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>            unavailableException);<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>      }<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    } catch (IOException e) {<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>      throw e;<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>    } catch (InterruptedException e) {<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>      throw (IOException) new InterruptedIOException(<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>          "Interrupted while starting HTTP server").initCause(e);<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    } catch (Exception e) {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>      throw new IOException("Problem starting http server", e);<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    }<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>  }<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span><a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>  private void loadListeners() {<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    for (ListenerInfo li : listeners) {<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>      webServer.addConnector(li.listener);<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    }<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>  }<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span><a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>  /**<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>   * Open the main listener for the server<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>   * @throws Exception if the listener cannot be opened or the appropriate port is already in use<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>   */<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>  void openListeners() throws Exception {<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>    for (ListenerInfo li : listeners) {<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>      ServerConnector listener = li.listener;<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>      if (!li.isManaged || (li.listener.getLocalPort() != -1 &amp;&amp; li.listener.getLocalPort() != -2)) {<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>        // This listener is either started externally, or has not been opened, or has been closed<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>        continue;<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>      }<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>      int port = listener.getPort();<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>      while (true) {<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>        // jetty has a bug where you can't reopen a listener that previously<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>        // failed to open w/o issuing a close first, even if the port is changed<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>        try {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>          listener.close();<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>          listener.open();<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>          LOG.info("Jetty bound to port " + listener.getLocalPort());<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>          break;<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>        } catch (IOException ex) {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>          if(!(ex instanceof BindException) &amp;&amp; !(ex.getCause() instanceof BindException)) {<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>            throw ex;<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>          }<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>          if (port == 0 || !findPort) {<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>            BindException be = new BindException("Port in use: "<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>                + listener.getHost() + ":" + listener.getPort());<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>            be.initCause(ex);<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>            throw be;<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>          }<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>        }<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>        // try the next port number<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>        listener.setPort(++port);<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>        Thread.sleep(100);<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>      }<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>  }<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span><a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>  /**<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>   * stop the server<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>   */<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>  public void stop() throws Exception {<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    MultiException exception = null;<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    for (ListenerInfo li : listeners) {<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>      if (!li.isManaged) {<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>        continue;<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>      }<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span><a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>      try {<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>        li.listener.close();<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>      } catch (Exception e) {<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>        LOG.error(<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>            "Error while stopping listener for webapp"<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>                + webAppContext.getDisplayName(), e);<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>        exception = addMultiException(exception, e);<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>      }<a name="line.1192"></a>
 <span class="sourceLineNo">1193</span>    }<a name="line.1193"></a>
 <span class="sourceLineNo">1194</span><a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>    if (exception != null) {<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>      exception.ifExceptionThrow();<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>    }<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span><a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>  }<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span><a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>  private MultiException addMultiException(MultiException exception, Exception e) {<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>    if(exception == null){<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>      exception = new MultiException();<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>    }<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>    exception.add(e);<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>    return exception;<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>  }<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span><a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>  public void join() throws InterruptedException {<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    webServer.join();<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>  }<a name="line.1211"></a>
+<span class="sourceLineNo">1195</span>    try {<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>      // clear &amp; stop webAppContext attributes to avoid memory leaks.<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>      webAppContext.clearAttributes();<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>      webAppContext.stop();<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>    } catch (Exception e) {<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>      LOG.error("Error while stopping web app context for webapp "<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>          + webAppContext.getDisplayName(), e);<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>      exception = addMultiException(exception, e);<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    }<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span><a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>    try {<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>      webServer.stop();<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>    } catch (Exception e) {<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>      LOG.error("Error while stopping web server for webapp "<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>          + webAppContext.getDisplayName(), e);<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>      exception = addMultiException(exception, e);<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    }<a name="line.1211"></a>
 <span class="sourceLineNo">1212</span><a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>  /**<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>   * Test for the availability of the web server<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>   * @return true if the web server is started, false otherwise<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>   */<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>  public boolean isAlive() {<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>    return webServer != null &amp;&amp; webServer.isStarted();<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  }<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span><a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>  /**<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>   * Return the host and port of the HttpServer, if live<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>   * @return the classname and any HTTP URL<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>   */<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>  @Override<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>  public String toString() {<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>    if (listeners.isEmpty()) {<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      return "Inactive HttpServer";<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>    } else {<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>      StringBuilder sb = new StringBuilder("HttpServer (")<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>        .append(isAlive() ? STATE_DESCRIPTION_ALIVE :<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>                STATE_DESCRIPTION_NOT_LIVE).append("), listening at:");<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>      for (ListenerInfo li : listeners) {<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        ServerConnector l = li.listener;<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>        sb.append(l.getHost()).append(":").append(l.getPort()).append("/,");<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>      return sb.toString();<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>    }<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>  }<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span><a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>  /**<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>   * Checks the user has privileges to access to instrumentation servlets.<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>   * &lt;p&gt;<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>   * If &lt;code&gt;hadoop.security.instrumentation.requires.admin&lt;/code&gt; is set to FALSE<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>   * (default value) it always returns TRUE.<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>   * &lt;/p&gt;&lt;p&gt;<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>   * If &lt;code&gt;hadoop.security.instrumentation.requires.admin&lt;/code&gt; is set to TRUE<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>   * it will check that if the current user is in the admin ACLS. If the user is<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>   * in the admin ACLs it returns TRUE, otherwise it returns FALSE.<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>   * &lt;/p&gt;<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>   *<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>   * @param servletContext the servlet context.<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>   * @param request the servlet request.<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>   * @param response the servlet response.<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>   * @return TRUE/FALSE based on the logic decribed above.<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>   */<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>  public static boolean isInstrumentationAccessAllowed(<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>    ServletContext servletContext, HttpServletRequest request,<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>    HttpServletResponse response) throws IOException {<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    Configuration conf =<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      (Configuration) servletContext.getAttribute(CONF_CONTEXT_ATTRIBUTE);<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span><a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>    boolean access = true;<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    boolean adminAccess = conf.getBoolean(<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>      CommonConfigurationKeys.HADOOP_SECURITY_INSTRUMENTATION_REQUIRES_ADMIN,<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>      false);<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>    if (adminAccess) {<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>      access = hasAdministratorAccess(servletContext, request, response);<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>    }<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    return access;<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>  }<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span><a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>  /**<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>   * Does the user sending the HttpServletRequest has the administrator ACLs? If<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   * it isn't the case, response will be modified to send an error to the user.<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>   *<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>   * @param servletContext the {@link ServletContext} to use<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>   * @param request the {@link HttpServletRequest} to check<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>   * @param response used to send the error response if user does not have admin access.<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>   * @return true if admin-authorized, false otherwise<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>   * @throws IOException if an unauthenticated or unauthorized user tries to access the page<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>   */<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>  public static boolean hasAdministratorAccess(<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      ServletContext servletContext, HttpServletRequest request,<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>      HttpServletResponse response) throws IOException {<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>    Configuration conf =<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        (Configuration) servletContext.getAttribute(CONF_CONTEXT_ATTRIBUTE);<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>    AccessControlList acl = (AccessControlList) servletContext.getAttribute(ADMINS_ACL);<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span><a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>    return hasAdministratorAccess(conf, acl, request, response);<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>  }<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span><a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>  public static boolean hasAdministratorAccess(Configuration conf, AccessControlList acl,<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>      HttpServletRequest request, HttpServletResponse response) throws IOException {<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>    // If there is no authorization, anybody has administrator access.<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    if (!conf.getBoolean(<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>        CommonConfigurationKeys.HADOOP_SECURITY_AUTHORIZATION, false)) {<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>      return true;<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    }<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span><a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>    String remoteUser = request.getRemoteUser();<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    if (remoteUser == null) {<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>      response.sendError(HttpServletResponse.SC_UNAUTHORIZED,<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>                         "Unauthenticated users are not " +<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>                         "authorized to access this page.");<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>      return false;<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    }<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span><a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    if (acl != null &amp;&amp; !userHasAdministratorAccess(acl, remoteUser)) {<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>      response.sendError(HttpServletResponse.SC_FORBIDDEN, "User "<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>          + remoteUser + " is unauthorized to access this page.");<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>      return false;<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>    }<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span><a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    return true;<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>  /**<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>   * Get the admin ACLs from the given ServletContext and check if the given<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * user is in the ACL.<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   *<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>   * @param servletContext the context containing the admin ACL.<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>   * @param remoteUser the remote user to check for.<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>   * @return true if the user is present in the ACL, false if no ACL is set or<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>   *         the user is not present<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>   */<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  public static boolean userHasAdministratorAccess(ServletContext servletContext,<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>      String remoteUser) {<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>    AccessControlList adminsAcl = (AccessControlList) servletContext<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>        .getAttribute(ADMINS_ACL);<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>    return userHasAdministratorAccess(adminsAcl, remoteUser);<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>  }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span><a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  public static boolean userHasAdministratorAccess(AccessControlList acl, String remoteUser) {<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    UserGroupInformation remoteUserUGI =<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>        UserGroupInformation.createRemoteUser(remoteUser);<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    return acl != null &amp;&amp; acl.isUserAllowed(remoteUserUGI);<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>  }<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span><a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  /**<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>   * A very simple servlet to serve up a text representation of the current<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>   * stack traces. It both returns the stacks to the caller and logs them.<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>   * Currently the stack traces are done sequentially rather than exactly the<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>   * same data.<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>   */<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>  public static class StackServlet extends HttpServlet {<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    private static final long serialVersionUID = -6284183679759467039L;<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span><a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    @Override<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>    public void doGet(HttpServletRequest request, HttpServletResponse response)<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>      throws ServletException, IOException {<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>      if (!HttpServer.isInstrumentationAccessAllowed(getServletContext(),<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>                                                     request, response)) {<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>        return;<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>      }<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>      response.setContentType("text/plain; charset=UTF-8");<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>      try (PrintStream out = new PrintStream(<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>        response.getOutputStream(), false, "UTF-8")) {<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>        Threads.printThreadInfo(out, "");<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>        out.flush();<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>      }<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>      ReflectionUtils.logThreadInfo(LOG, "jsp requested", 1);<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>    }<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>   * A Servlet input filter that quotes all HTML active characters in the<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>   * parameter names and values. The goal is to quote the characters to make<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>   * all of the servlets resistant to cross-site scripting attacks.<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>   */<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>  public static class QuotingInputFilter implements Filter {<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>    private FilterConfig config;<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span><a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>    public static class RequestQuoter extends HttpServletRequestWrapper {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      private final HttpServletRequest rawRequest;<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      public RequestQuoter(HttpServletRequest rawRequest) {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>        super(rawRequest);<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>        this.rawRequest = rawRequest;<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      /**<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>       * Return the set of parameter names, quoting each name.<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>       */<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      @Override<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>      public Enumeration&lt;String&gt; getParameterNames() {<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>        return new Enumeration&lt;String&gt;() {<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>          private Enumeration&lt;String&gt; rawIterator =<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>            rawRequest.getParameterNames();<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>          @Override<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>          public boolean hasMoreElements() {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>            return rawIterator.hasMoreElements();<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>          @Override<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>          public String nextElement() {<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>            return HtmlQuoting.quoteHtmlChars(rawIterator.nextElement());<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>          }<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>        };<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span><a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>      /**<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>       * Unquote the name and quote the value.<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>       */<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      @Override<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>      public String getParameter(String name) {<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>        return HtmlQuoting.quoteHtmlChars(rawRequest.getParameter(<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>                HtmlQuoting.unquoteHtmlChars(name)));<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      }<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span><a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>      @Override<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>      public String[] getParameterValues(String name) {<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>        String unquoteName = HtmlQuoting.unquoteHtmlChars(name);<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>        String[] unquoteValue = rawRequest.getParameterValues(unquoteName);<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>        if (unquoteValue == null) {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>          return null;<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>        }<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>        String[] result = new String[unquoteValue.length];<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>        for(int i=0; i &lt; result.length; ++i) {<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>          result[i] = HtmlQuoting.quoteHtmlChars(unquoteValue[i]);<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>        }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>        return result;<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>      }<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span><a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>      @Override<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>      public Map&lt;String, String[]&gt; getParameterMap() {<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>        Map&lt;String, String[]&gt; result = new HashMap&lt;&gt;();<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        Map&lt;String, String[]&gt; raw = rawRequest.getParameterMap();<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        for (Map.Entry&lt;String,String[]&gt; item: raw.entrySet()) {<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>          String[] rawValue = item.getValue();<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>          String[] cookedValue = new String[rawValue.length];<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>          for(int i=0; i&lt; rawValue.length; ++i) {<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>            cookedValue[i] = HtmlQuoting.quoteHtmlChars(rawValue[i]);<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>          }<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>          result.put(HtmlQuoting.quoteHtmlChars(item.getKey()), cookedValue);<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>        }<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>        return result;<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      }<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span><a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      /**<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>       * Quote the url so that users specifying the HOST HTTP header<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>       * can't inject attacks.<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>       */<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      @Override<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      public StringBuffer getRequestURL(){<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>        String url = rawRequest.getRequestURL().toString();<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        return new StringBuffer(HtmlQuoting.quoteHtmlChars(url));<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      }<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span><a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>      /**<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>       * Quote the server name so that users specifying the HOST HTTP header<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>       * can't inject attacks.<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>       */<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>      @Override<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>      public String getServerName() {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>        return HtmlQuoting.quoteHtmlChars(rawRequest.getServerName());<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span><a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>    @Override<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    public void init(FilterConfig config) throws ServletException {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      this.config = config;<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>    }<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span><a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>    @Override<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>    public void destroy() {<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span><a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    @Override<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>    public void doFilter(ServletRequest request,<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>                         ServletResponse response,<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>                         FilterChain chain<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>                         ) throws IOException, ServletException {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>      HttpServletRequestWrapper quoted =<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>        new RequestQuoter((HttpServletRequest) request);<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>      HttpServletResponse httpResponse = (HttpServletResponse) response;<a name="line.1476"></a>
+<span class="sourceLineNo">1213</span>    if (exception != null) {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>      exception.ifExceptionThrow();<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    }<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span><a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>  }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span><a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>  private MultiException addMultiException(MultiException exception, Exception e) {<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    if(exception == null){<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      exception = new MultiException();<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>    }<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>    exception.add(e);<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>    return exception;<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>  }<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span><a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>  public void join() throws InterruptedException {<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>    webServer.join();<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>  }<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span><a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>  /**<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>   * Test for the availability of the web server<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>   * @return true if the web server is started, false otherwise<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>   */<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>  public boolean isAlive() {<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>    return webServer != null &amp;&amp; webServer.isStarted();<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>  }<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span><a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>  /**<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>   * Return the host and port of the HttpServer, if live<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>   * @return the classname and any HTTP URL<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>   */<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>  @Override<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>  public String toString() {<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    if (listeners.isEmpty()) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>      return "Inactive HttpServer";<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>    } else {<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>      StringBuilder sb = new StringBuilder("HttpServer (")<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>        .append(isAlive() ? STATE_DESCRIPTION_ALIVE :<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>                STATE_DESCRIPTION_NOT_LIVE).append("), listening at:");<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>      for (ListenerInfo li : listeners) {<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>        ServerConnector l = li.listener;<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>        sb.append(l.getHost()).append(":").append(l.getPort()).append("/,");<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>      }<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>      return sb.toString();<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>    }<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>  }<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span><a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>  /**<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   * Checks the user has privileges to access to instrumentation servlets.<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>   * &lt;p&gt;<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>   * If &lt;code&gt;hadoop.security.instrumentation.requires.admin&lt;/code&gt; is set to FALSE<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>   * (default value) it always returns TRUE.<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>   * &lt;/p&gt;&lt;p&gt;<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>   * If &lt;code&gt;hadoop.security.instrumentation.requires.admin&lt;/code&gt; is set to TRUE<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>   * it will check that if the current user is in the admin ACLS. If the user is<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>   * in the admin ACLs it returns TRUE, otherwise it returns FALSE.<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>   * &lt;/p&gt;<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>   *<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>   * @param servletContext the servlet context.<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>   * @param request the servlet request.<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>   * @param response the servlet response.<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   * @return TRUE/FALSE based on the logic decribed above.<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>   */<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>  public static boolean isInstrumentationAccessAllowed(<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>    ServletContext servletContext, HttpServletRequest request,<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>    HttpServletResponse response) throws IOException {<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>    Configuration conf =<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>      (Configuration) servletContext.getAttribute(CONF_CONTEXT_ATTRIBUTE);<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span><a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>    boolean access = true;<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    boolean adminAccess = conf.getBoolean(<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>      CommonConfigurationKeys.HADOOP_SECURITY_INSTRUMENTATION_REQUIRES_ADMIN,<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>      false);<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>    if (adminAccess) {<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>      access = hasAdministratorAccess(servletContext, request, response);<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>    }<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>    return access;<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>  }<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span><a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>  /**<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * Does the user sending the HttpServletRequest has the administrator ACLs? If<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   * it isn't the case, response will be modified to send an error to the user.<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>   *<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>   * @param servletContext the {@link ServletContext} to use<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>   * @param request the {@link HttpServletRequest} to check<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>   * @param response used to send the error response if user does not have admin access.<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>   * @return true if admin-authorized, false otherwise<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>   * @throws IOException if an unauthenticated or unauthorized user tries to access the page<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>   */<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>  public static boolean hasAdministratorAccess(<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      ServletContext servletContext, HttpServletRequest request,<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>      HttpServletResponse response) throws IOException {<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>    Configuration conf =<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>        (Configuration) servletContext.getAttribute(CONF_CONTEXT_ATTRIBUTE);<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>    AccessControlList acl = (AccessControlList) servletContext.getAttribute(ADMINS_ACL);<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span><a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>    return hasAdministratorAccess(conf, acl, request, response);<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>  }<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span><a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>  public static boolean hasAdministratorAccess(Configuration conf, AccessControlList acl,<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>      HttpServletRequest request, HttpServletResponse response) throws IOException {<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    // If there is no authorization, anybody has administrator access.<a name="line.1313"></a>
... 32546 lines suppressed ...