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 2018/03/28 14:49:10 UTC

[01/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 53df288a2 -> b2e107448


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html
new file mode 100644
index 0000000..127be96
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html
@@ -0,0 +1,434 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span><a name="line.1"></a>
+<span class="sourceLineNo">002</span>/**<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
+<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
+<span class="sourceLineNo">012</span> *<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
+<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
+<span class="sourceLineNo">018</span> */<a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.security.access;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.AuthUtil.toGroupEntry;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.assertArrayEquals;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.junit.Assert.assertFalse;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.junit.Assert.assertTrue;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.junit.Assert.fail;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.mockito.Mockito.mock;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import com.google.protobuf.Service;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import com.google.protobuf.ServiceException;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.io.IOException;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.security.PrivilegedExceptionAction;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Collections;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.HashMap;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.conf.Configuration;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.Cell;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ServerName;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.TableName;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Get;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Put;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Result;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.Table;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessor;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.ipc.protobuf.generated.TestRpcServiceProtos;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.security.User;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.testclassification.SecurityTests;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.BeforeClass;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.ClassRule;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Rule;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Test;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.experimental.categories.Category;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>/**<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * This class tests operations in MasterRpcServices which require ADMIN access.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * It doesn't test all operations which require ADMIN access, only those which get vetted within<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * MasterRpcServices at the point of entry itself (unlike old approach of using<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * hooks in AccessController).<a name="line.72"></a>
+<span class="sourceLineNo">073</span> *<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * Sidenote:<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * There is one big difference between how security tests for AccessController hooks work, and how<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * the tests in this class for security in MasterRpcServices work.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * The difference arises because of the way AC &amp; MasterRpcServices get the user.<a name="line.77"></a>
+<span class="sourceLineNo">078</span> *<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * In AccessController, it first checks if there is an active rpc user in ObserverContext. If not,<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * it uses UserProvider for current user. This *might* make sense in the context of coprocessors,<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * because they can be called outside the context of RPCs.<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * But in the context of MasterRpcServices, only one way makes sense - RPCServer.getRequestUser().<a name="line.82"></a>
+<span class="sourceLineNo">083</span> *<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * In AC tests, when we do FooUser.runAs on AccessController instance directly, it bypasses<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * the rpc framework completely, but works because UserProvider provides the correct user, i.e.<a name="line.85"></a>
+<span class="sourceLineNo">086</span> * FooUser in this case.<a name="line.86"></a>
+<span class="sourceLineNo">087</span> *<a name="line.87"></a>
+<span class="sourceLineNo">088</span> * But this doesn't work for the tests here, so we go around by doing complete RPCs.<a name="line.88"></a>
+<span class="sourceLineNo">089</span> */<a name="line.89"></a>
+<span class="sourceLineNo">090</span>@Category({SecurityTests.class, MediumTests.class})<a name="line.90"></a>
+<span class="sourceLineNo">091</span>public class TestRpcAccessChecks {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @ClassRule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      HBaseClassTestRule.forClass(TestRpcAccessChecks.class);<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  @Rule<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public final TestName TEST_NAME = new TestName();<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private static Configuration conf;<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  // user granted with all global permission<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private static User USER_ADMIN;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  // user without admin permissions<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  private static User USER_NON_ADMIN;<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>  private static final String GROUP_ADMIN = "admin_group";<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  private static User USER_GROUP_ADMIN;<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  // Dummy service to test execService calls. Needs to be public so can be loaded as Coprocessor.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public static class DummyCpService implements MasterCoprocessor, RegionServerCoprocessor {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public DummyCpService() {}<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    public Iterable&lt;Service&gt; getServices() {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      return Collections.singleton(mock(TestRpcServiceProtos.TestProtobufRpcProto.class));<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private static void enableSecurity(Configuration conf) throws IOException {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    conf.set("hadoop.security.authorization", "false");<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    conf.set("hadoop.security.authentication", "simple");<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, AccessController.class.getName() +<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      "," + DummyCpService.class.getName());<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, AccessController.class.getName());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.set(CoprocessorHost.REGIONSERVER_COPROCESSOR_CONF_KEY, AccessController.class.getName() +<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      "," + DummyCpService.class.getName());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    conf.set(User.HBASE_SECURITY_AUTHORIZATION_CONF_KEY, "true");<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    SecureTestUtil.configureSuperuser(conf);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  @BeforeClass<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  public static void setup() throws Exception {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    conf = TEST_UTIL.getConfiguration();<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>    // Enable security<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    enableSecurity(conf);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    TEST_UTIL.startMiniCluster();<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // Wait for the ACL table to become available<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    TEST_UTIL.waitUntilAllRegionsAssigned(AccessControlLists.ACL_TABLE_NAME);<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>    // Create users<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    USER_ADMIN = User.createUserForTesting(conf, "admin", new String[0]);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    USER_NON_ADMIN = User.createUserForTesting(conf, "non_admin", new String[0]);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    USER_GROUP_ADMIN =<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        User.createUserForTesting(conf, "user_group_admin", new String[] { GROUP_ADMIN });<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>    // Assign permissions to users and groups<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    SecureTestUtil.grantGlobal(TEST_UTIL, USER_ADMIN.getShortName(), Permission.Action.ADMIN);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    SecureTestUtil.grantGlobal(TEST_UTIL, toGroupEntry(GROUP_ADMIN), Permission.Action.ADMIN);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    // No permissions to USER_NON_ADMIN<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  interface Action {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    void run(Admin admin) throws Exception;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  private void verifyAllowed(User user, Action action) throws Exception {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          Admin admin = conn.getAdmin()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        action.run(admin);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      } catch (IOException e) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        fail(e.toString());<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      return null;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    });<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>  private void verifyDenied(User user, Action action) throws Exception {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      boolean accessDenied = false;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          Admin admin = conn.getAdmin()) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        action.run(admin);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      } catch (AccessDeniedException e) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        accessDenied = true;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      assertTrue("Expected access to be denied", accessDenied);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      return null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    });<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  private void verifiedDeniedServiceException(User user, Action action) throws Exception {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      boolean accessDenied = false;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>          Admin admin = conn.getAdmin()) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        action.run(admin);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      } catch (ServiceException e) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        // For MasterRpcServices.execService.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        if (e.getCause() instanceof AccessDeniedException) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          accessDenied = true;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      assertTrue("Expected access to be denied", accessDenied);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      return null;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    });<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  }<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  private void verifyAdminCheckForAction(Action action) throws Exception {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    verifyAllowed(USER_ADMIN, action);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    verifyDenied(USER_NON_ADMIN, action);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  }<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>  @Test<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  public void testEnableCatalogJanitor() throws Exception {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    verifyAdminCheckForAction((admin) -&gt; admin.enableCatalogJanitor(true));<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>  @Test<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  public void testRunCatalogJanitor() throws Exception {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    verifyAdminCheckForAction((admin) -&gt; admin.runCatalogJanitor());<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  @Test<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  public void testCleanerChoreRunning() throws Exception {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    verifyAdminCheckForAction((admin) -&gt; admin.cleanerChoreSwitch(true));<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  @Test<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  public void testRunCleanerChore() throws Exception {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    verifyAdminCheckForAction((admin) -&gt; admin.runCleanerChore());<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>  @Test<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  public void testExecProcedure() throws Exception {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    verifyAdminCheckForAction((admin) -&gt; {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // Using existing table instead of creating a new one.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      admin.execProcedure("flush-table-proc", TableName.META_TABLE_NAME.getNameAsString(),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          new HashMap&lt;&gt;());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    });<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>  @Test<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  public void testExecService() throws Exception {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    Action action = (admin) -&gt; {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface service =<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          TestRpcServiceProtos.TestProtobufRpcProto.newBlockingStub(admin.coprocessorService());<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      service.ping(null, TestProtos.EmptyRequestProto.getDefaultInstance());<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    };<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>    verifyAllowed(USER_ADMIN, action);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    // This is same as above verifyAccessDenied<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    verifiedDeniedServiceException(USER_NON_ADMIN, action);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  }<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>  @Test<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  public void testExecProcedureWithRet() throws Exception {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    verifyAdminCheckForAction((admin) -&gt; {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      // Using existing table instead of creating a new one.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      admin.execProcedureWithReturn("flush-table-proc", TableName.META_TABLE_NAME.getNameAsString(),<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          new HashMap&lt;&gt;());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    });<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>  @Test<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  public void testNormalize() throws Exception {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    verifyAdminCheckForAction((admin) -&gt; admin.normalize());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>  @Test<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  public void testSetNormalizerRunning() throws Exception {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    verifyAdminCheckForAction((admin) -&gt; admin.normalizerSwitch(true));<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>  @Test<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  public void testExecRegionServerService() throws Exception {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    Action action = (admin) -&gt; {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      ServerName serverName = TEST_UTIL.getHBaseCluster().getRegionServer(0).getServerName();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface service =<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          TestRpcServiceProtos.TestProtobufRpcProto.newBlockingStub(<a name="line.276"></a>
+<span class="sourceLineNo">277</span>              admin.coprocessorService(serverName));<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      service.ping(null, TestProtos.EmptyRequestProto.getDefaultInstance());<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    };<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>    verifyAllowed(USER_ADMIN, action);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    verifiedDeniedServiceException(USER_NON_ADMIN, action);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  @Test<a name="line.286"></a>
+<span class="sourceLineNo">287</span>  public void testTableFlush() throws Exception {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    TableName tn = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn)<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of("f1")).build();<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    Action adminAction = (admin) -&gt; {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      admin.createTable(desc);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // Avoid giving a global permission which may screw up other tests<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      SecureTestUtil.grantOnTable(<a name="line.294"></a>
+<span class="sourceLineNo">295</span>          TEST_UTIL, USER_NON_ADMIN.getShortName(), tn, null, null, Permission.Action.READ,<a name="line.295"></a>
+<span class="sourceLineNo">296</span>          Permission.Action.WRITE, Permission.Action.CREATE);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    };<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    verifyAllowed(USER_ADMIN, adminAction);<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>    Action userAction = (admin) -&gt; {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      Connection conn = admin.getConnection();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      final byte[] rowKey = Bytes.toBytes("row1");<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      final byte[] col = Bytes.toBytes("q1");<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      final byte[] val = Bytes.toBytes("v1");<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      try (Table table = conn.getTable(tn)) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        // Write a value<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        Put p = new Put(rowKey);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        p.addColumn(Bytes.toBytes("f1"), col, val);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        table.put(p);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        // Flush should not require ADMIN permission<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        admin.flush(tn);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        // Nb: ideally, we would verify snapshot permission too (as that was fixed in the<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        //   regression HBASE-20185) but taking a snapshot requires ADMIN permission which<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        //   masks the root issue.<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        // Make sure we read the value<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        Result result = table.get(new Get(rowKey));<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        assertFalse(result.isEmpty());<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        Cell c = result.getColumnLatestCell(Bytes.toBytes("f1"), col);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        assertArrayEquals(val, CellUtil.cloneValue(c));<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    };<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    verifyAllowed(USER_NON_ADMIN, userAction);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>  @Test<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  public void testTableFlushAndSnapshot() throws Exception {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    TableName tn = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn)<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of("f1")).build();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    Action adminAction = (admin) -&gt; {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      admin.createTable(desc);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      // Giving ADMIN here, but only on this table, *not* globally<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      SecureTestUtil.grantOnTable(<a name="line.333"></a>
+<span class="sourceLineNo">334</span>          TEST_UTIL, USER_NON_ADMIN.getShortName(), tn, null, null, Permission.Action.READ,<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          Permission.Action.WRITE, Permission.Action.CREATE, Permission.Action.ADMIN);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    };<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    verifyAllowed(USER_ADMIN, adminAction);<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    Action userAction = (admin) -&gt; {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      Connection conn = admin.getConnection();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      final byte[] rowKey = Bytes.toBytes("row1");<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      final byte[] col = Bytes.toBytes("q1");<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      final byte[] val = Bytes.toBytes("v1");<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      try (Table table = conn.getTable(tn)) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        // Write a value<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        Put p = new Put(rowKey);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        p.addColumn(Bytes.toBytes("f1"), col, val);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        table.put(p);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        // Flush should not require ADMIN permission<a name="line.349"></a>
+<span class="sourceLineNo">350</span>        admin.flush(tn);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        // Table admin should be sufficient to snapshot this table<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        admin.snapshot(tn.getNameAsString() + "_snapshot1", tn);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        // Read the value just because<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        Result result = table.get(new Get(rowKey));<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        assertFalse(result.isEmpty());<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        Cell c = result.getColumnLatestCell(Bytes.toBytes("f1"), col);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        assertArrayEquals(val, CellUtil.cloneValue(c));<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    };<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    verifyAllowed(USER_NON_ADMIN, userAction);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>}<a name="line.362"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[15/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
index eccc4a3..ebbde54 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
@@ -1744,1869 +1744,1872 @@
 <span class="sourceLineNo">1736</span>      HRegion region = getRegion(request.getRegion());<a name="line.1736"></a>
 <span class="sourceLineNo">1737</span>      RegionInfo info = region.getRegionInfo();<a name="line.1737"></a>
 <span class="sourceLineNo">1738</span>      byte[] bestSplitRow = null;<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>        HRegion r = region;<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        r.forceSplit(null);<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>        bestSplitRow = r.checkSplit();<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        // try to flush region first<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        if(bestSplitRow == null) {<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>          r.flush(true);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>          bestSplitRow = r.checkSplit();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        r.clearSplit();<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      }<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      }<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      builder.setSplittable(region.isSplittable());<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      builder.setMergeable(region.isMergeable());<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      return builder.build();<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>    } catch (IOException ie) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      throw new ServiceException(ie);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span><a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  @Override<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span><a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    List&lt;HRegion&gt; regions;<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    if (request.hasTableName()) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      regions = regionServer.getRegions(tableName);<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>    } else {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>      regions = regionServer.getRegions();<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    }<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span><a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    try {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      for (HRegion region : regions) {<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      }<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    } catch (IOException e) {<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      throw new ServiceException(e);<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    }<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>    builder.addAllRegionLoads(rLoads);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    return builder.build();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>  }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>  @Override<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>    requestCount.increment();<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      try {<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>        checkOpen();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>          switch (queueName) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            case "long":<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>              break;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            case "short":<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1815"></a>
+<span class="sourceLineNo">1739</span>      boolean shouldSplit = true;<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        HRegion r = region;<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        r.forceSplit(null);<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // Even after setting force split if split policy says no to split then we should not split.<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        shouldSplit = region.getSplitPolicy().shouldSplit() &amp;&amp; !info.isMetaRegion();<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>        bestSplitRow = r.checkSplit();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        // try to flush region first<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>        if(bestSplitRow == null) {<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>          r.flush(true);<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>          bestSplitRow = r.checkSplit();<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        }<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        r.clearSplit();<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      }<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      builder.setSplittable(region.isSplittable() &amp;&amp; shouldSplit);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      builder.setMergeable(region.isMergeable());<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>      }<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      return builder.build();<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>    } catch (IOException ie) {<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      throw new ServiceException(ie);<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    }<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>  }<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span><a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>  @Override<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span><a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>    List&lt;HRegion&gt; regions;<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    if (request.hasTableName()) {<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>      regions = regionServer.getRegions(tableName);<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>    } else {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>      regions = regionServer.getRegions();<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>    }<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    try {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      for (HRegion region : regions) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    } catch (IOException e) {<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>      throw new ServiceException(e);<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>    builder.addAllRegionLoads(rLoads);<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    return builder.build();<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  }<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span><a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>  @Override<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>    requestCount.increment();<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>      try {<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        checkOpen();<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>          switch (queueName) {<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            case "long":<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1815"></a>
 <span class="sourceLineNo">1816</span>              break;<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            default:<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>              throw new IOException("Unknown queue name " + queueName);<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>          }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>      } catch (IOException ie) {<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>        throw new ServiceException(ie);<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      } finally {<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        clearCompactionQueues.set(false);<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      }<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    } else {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>    }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    return respBuilder.build();<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>  }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>  /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>   * Get some information of the region server.<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>   *<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>   * @param controller the RPC controller<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>   * @param request the request<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>   * @throws ServiceException<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>   */<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>  @Override<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    try {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>      checkOpen();<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    } catch (IOException ie) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>      throw new ServiceException(ie);<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>    }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>    requestCount.increment();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>  }<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span><a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>  @Override<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    try {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>      checkOpen();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      HRegion region = getRegion(request.getRegion());<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      requestCount.increment();<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (request.getFamilyCount() == 0) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>      } else {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>          columnFamilies.add(cf.toByteArray());<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        }<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      int nCF = columnFamilies.size();<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      builder.addAllStoreFile(fileList);<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>      return builder.build();<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>    } catch (IOException ie) {<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>      throw new ServiceException(ie);<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>  }<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span><a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>  /**<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>   *<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>   * &lt;p&gt;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>   * Different manages states for the region are:<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>   *  &lt;/ul&gt;<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>   * &lt;p&gt;<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>   * &lt;/p&gt;<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>   * @param controller the RPC controller<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>   * @param request the request<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>   * @throws ServiceException<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>   */<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>  @Override<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>    requestCount.increment();<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>    if (request.hasServerStartCode()) {<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      // check that we are the same server that this RPC is intended for.<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long serverStartCode = request.getServerStartCode();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      if (regionServer.serverName.getStartcode() !=  serverStartCode) {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        throw new ServiceException(new DoNotRetryIOException("This RPC was intended for a " +<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>            "different server with startCode: " + serverStartCode + ", this server is: "<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>            + regionServer.serverName));<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>    }<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span><a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    try {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      checkOpen();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    } catch (IOException ie) {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      TableName tableName = null;<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      if (regionCount == 1) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>        if (ri != null) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>        throw new ServiceException(ie);<a name="line.1936"></a>
+<span class="sourceLineNo">1817</span>            case "short":<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>              break;<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            default:<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              throw new IOException("Unknown queue name " + queueName);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>          }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>        }<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>      } catch (IOException ie) {<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>        throw new ServiceException(ie);<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      } finally {<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        clearCompactionQueues.set(false);<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>      }<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    } else {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>    }<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    return respBuilder.build();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>  }<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span><a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>  /**<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>   * Get some information of the region server.<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>   *<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>   * @param controller the RPC controller<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>   * @param request the request<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>   * @throws ServiceException<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>   */<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>  @Override<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    try {<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>      checkOpen();<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>    } catch (IOException ie) {<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>      throw new ServiceException(ie);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>    }<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    requestCount.increment();<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>  }<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span><a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>  @Override<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>    try {<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      checkOpen();<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      HRegion region = getRegion(request.getRegion());<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      requestCount.increment();<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>      if (request.getFamilyCount() == 0) {<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      } else {<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>          columnFamilies.add(cf.toByteArray());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        }<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      int nCF = columnFamilies.size();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      builder.addAllStoreFile(fileList);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      return builder.build();<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    } catch (IOException ie) {<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>      throw new ServiceException(ie);<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>    }<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  }<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span><a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>  /**<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>   *<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>   * &lt;p&gt;<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>   * Different manages states for the region are:<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>   *  &lt;/ul&gt;<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>   * &lt;p&gt;<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>   * &lt;/p&gt;<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>   * @param controller the RPC controller<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>   * @param request the request<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>   * @throws ServiceException<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>   */<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>  @Override<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    requestCount.increment();<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>    if (request.hasServerStartCode()) {<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      // check that we are the same server that this RPC is intended for.<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      long serverStartCode = request.getServerStartCode();<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (regionServer.serverName.getStartcode() !=  serverStartCode) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        throw new ServiceException(new DoNotRetryIOException("This RPC was intended for a " +<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>            "different server with startCode: " + serverStartCode + ", this server is: "<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>            + regionServer.serverName));<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>    }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>    try {<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>      checkOpen();<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    } catch (IOException ie) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>      TableName tableName = null;<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      if (regionCount == 1) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        if (ri != null) {<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>        }<a name="line.1936"></a>
 <span class="sourceLineNo">1937</span>      }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>      synchronized (regionServer.online) {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>        try {<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>          }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>          checkOpen();<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>        } catch (InterruptedException t) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          Thread.currentThread().interrupt();<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          throw new ServiceException(t);<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>        } catch (IOException e) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          throw new ServiceException(e);<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>        }<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>      }<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    }<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span><a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      TableDescriptor htd;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      try {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        String encodedName = region.getEncodedName();<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>        if (onlineRegion != null) {<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>          // The region is already online. This should not happen any more.<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>          String error = "Received OPEN for the region:"<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          LOG.warn(error);<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>          //regionServer.abort(error);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>          //throw new IOException(error);<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          continue;<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        }<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span><a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>          encodedNameBytes, Boolean.TRUE);<a name="line.1980"></a>
+<span class="sourceLineNo">1938</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>        throw new ServiceException(ie);<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      }<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      synchronized (regionServer.online) {<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>        try {<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          }<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>          checkOpen();<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>        } catch (InterruptedException t) {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>          Thread.currentThread().interrupt();<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>          throw new ServiceException(t);<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>        } catch (IOException e) {<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>          throw new ServiceException(e);<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>        }<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      }<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      TableDescriptor htd;<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        String encodedName = region.getEncodedName();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        if (onlineRegion != null) {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>          // The region is already online. This should not happen any more.<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>          String error = "Received OPEN for the region:"<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          LOG.warn(error);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>          //regionServer.abort(error);<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>          //throw new IOException(error);<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>          continue;<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>        }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.1980"></a>
 <span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>            // There is a close in progress. This should not happen any more.<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>            String error = "Received OPEN for the region:"<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>            regionServer.abort(error);<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>            throw new IOException(error);<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>          }<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>        }<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span><a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>          // An open is in progress. This is supported, but let's log this.<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>              + " - ignoring this new request for this region.");<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>        }<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span><a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span><a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>          htd = htds.get(region.getTable());<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>          if (htd == null) {<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>            htds.put(region.getTable(), htd);<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>          }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>          if (htd == null) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2011"></a>
+<span class="sourceLineNo">1982</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>          encodedNameBytes, Boolean.TRUE);<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span><a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>            // There is a close in progress. This should not happen any more.<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>            String error = "Received OPEN for the region:"<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>            regionServer.abort(error);<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>            throw new IOException(error);<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>          }<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>        }<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>          // An open is in progress. This is supported, but let's log this.<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>              + " - ignoring this new request for this region.");<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>        }<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span><a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span><a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>          htd = htds.get(region.getTable());<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>          if (htd == null) {<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>            htds.put(region.getTable(), htd);<a name="line.2011"></a>
 <span class="sourceLineNo">2012</span>          }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>          // Need to pass the expected version in the constructor.<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>          if (regionServer.executorService == null) {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>          } else {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>            if (region.isMetaRegion()) {<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>            } else {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>              }<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>              } else {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2030"></a>
+<span class="sourceLineNo">2013</span>          if (htd == null) {<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>          }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>          // Need to pass the expected version in the constructor.<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>          if (regionServer.executorService == null) {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>          } else {<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>            if (region.isMetaRegion()) {<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>            } else {<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>              }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2030"></a>
 <span class="sourceLineNo">2031</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>              }<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>            }<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          }<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        }<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span><a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      } catch (IOException ie) {<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>        if (isBulkAssign) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>          throw new ServiceException(ie);<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>    return builder.build();<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>  }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span><a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>  /**<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   *  Wamrmup a region on this server.<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   *<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>   * closes the region bringing the most important pages in cache.<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>   * &lt;p&gt;<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>   *<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>   * @param controller the RPC controller<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>   * @param request the request<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>   * @throws ServiceException<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>   */<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>  @Override<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span><a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    TableDescriptor htd;<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span><a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    try {<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      checkOpen();<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>      String encodedName = region.getEncodedName();<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span><a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      if (onlineRegion != null) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>        return response;<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>      if (LOG.isDebugEnabled()) {<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        LOG.debug("Warming up Region " + region.getRegionNameAsString());<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span><a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span><a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>        return response;<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      }<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span><a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2092"></a>
+<span class="sourceLineNo">2032</span>              } else {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>              }<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>            }<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          }<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        }<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span><a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>      } catch (IOException ie) {<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>        if (isBulkAssign) {<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>        } else {<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>          throw new ServiceException(ie);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>        }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      }<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>    }<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    return builder.build();<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>  }<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span><a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>  /**<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>   *  Wamrmup a region on this server.<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>   *<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>   * closes the region bringing the most important pages in cache.<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>   * &lt;p&gt;<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>   *<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>   * @param controller the RPC controller<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>   * @param request the request<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>   * @throws ServiceException<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>   */<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>  @Override<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span><a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    TableDescriptor htd;<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span><a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    try {<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      checkOpen();<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>      String encodedName = region.getEncodedName();<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span><a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      if (onlineRegion != null) {<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>        return response;<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>      }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span><a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>      if (LOG.isDebugEnabled()) {<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        LOG.debug("Warming up Region " + region.getRegionNameAsString());<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>      }<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span><a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span><a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>        return response;<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>      }<a name="line.2092"></a>
 <span class="sourceLineNo">2093</span><a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>    } catch (IOException ie) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      throw new ServiceException(ie);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span><a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>    return response;<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  }<a name="line.2100"></a>
+<span class="sourceLineNo">2094</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span><a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    } catch (IOException ie) {<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>      throw new ServiceException(ie);<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    }<a name="line.2100"></a>
 <span class="sourceLineNo">2101</span><a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>  /**<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>   * Replay the given changes when distributedLogReplay WAL edits from a failed RS. The guarantee is<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>   * that the given mutations will be durable on the receiving RS if this method returns without any<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>   * exception.<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>   * @param controller the RPC controller<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>   * @param request the request<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>   * @throws ServiceException<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>   */<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>  @Override<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  @QosPriority(priority = HConstants.REPLAY_QOS)<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>  public ReplicateWALEntryResponse replay(final RpcController controller,<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    CellScanner cells = ((HBaseRpcController) controller).cellScanner();<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    try {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>      checkOpen();<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>      if (entries == null || entries.isEmpty()) {<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>        // empty input<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>      ByteString regionName = entries.get(0).getKey().getEncodedRegionName();<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      HRegion region = regionServer.getRegionByEncodedName(regionName.toStringUtf8());<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>      RegionCoprocessorHost coprocessorHost =<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>          ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>            ? region.getCoprocessorHost()<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>            : null; // do not invoke coprocessors if this is a secondary region replica<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>      List&lt;Pair&lt;WALKey, WALEdit&gt;&gt; walEntries = new ArrayList&lt;&gt;();<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      // Skip adding the edits to WAL if this is a secondary region replica<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>      boolean isPrimary = RegionReplicaUtil.isDefaultReplica(region.getRegionInfo());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>      Durability durability = isPrimary ? Durability.USE_DEFAULT : Durability.SKIP_WAL;<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span><a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      for (WALEntry entry : entries) {<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>        if (!regionName.equals(entry.getKey().getEncodedRegionName())) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>          throw new NotServingRegionException("Replay request contains entries from multiple " +<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>              "regions. First region:" + regionName.toStringUtf8() + " , other region:"<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>              + entry.getKey().getEncodedRegionName());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        }<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        if (regionServer.nonceManager != null &amp;&amp; isPrimary) {<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          long nonceGroup = entry.getKey().hasNonceGroup()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>            ? entry.getKey().getNonceGroup() : HConstants.NO_NONCE;<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>          long nonce = entry.getKey().hasNonce() ? entry.getKey().getNonce() : HConstants.NO_NONCE;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>          regionServer.nonceManager.reportOperationFromWal(<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>              nonceGroup,<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>              nonce,<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>              entry.getKey().getWriteTime());<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>        }<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        Pair&lt;WALKey, WALEdit&gt; walEntry = (coprocessorHost == null) ? null : new Pair&lt;&gt;();<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>        List&lt;WALSplitter.MutationReplay&gt; edits = WALSplitter.getMutationsFromWALEntry(entry,<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>          cells, walEntry, durability);<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>        if (coprocessorHost != null) {<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>          // Start coprocessor replay here. The coprocessor is for each WALEdit instead of a<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>          // KeyValue.<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>          if (coprocessorHost.preWALRestore(region.getRegionInfo(), walEntry.getFirst(),<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>            walEntry.getSecond())) {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>            // if bypass this log entry, ignore it ...<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>            continue;<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>          }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>          walEntries.add(walEntry);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>        }<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>        if(edits!=null &amp;&amp; !edits.isEmpty()) {<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>          // HBASE-17924<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>          // sort to improve lock efficiency<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>          Collections.sort(edits, (v1, v2) -&gt; Row.COMPARATOR.compare(v1.mutation, v2.mutation));<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          long replaySeqId = (entry.getKey().hasOrigSequenceNumber()) ?<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>            entry.getKey().getOrigSequenceNumber() : entry.getKey().getLogSequenceNumber();<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>          OperationStatus[] result = doReplayBatchOp(region, edits, replaySeqId);<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>          // check if it's a partial success<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>          for (int i = 0; result != null &amp;&amp; i &lt; result.length; i++) {<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>            if (result[i] != OperationStatus.SUCCESS) {<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>              throw new IOException(result[i].getExceptionMsg());<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>            }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>          }<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        }<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>      }<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span><a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      //sync wal at the end because ASYNC_WAL is used above<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>      WAL wal = region.getWAL();<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>      if (wal != null) {<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        wal.sync();<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>      }<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span><a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>      if (coprocessorHost != null) {<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>        for (Pair&lt;WALKey, WALEdit&gt; entry : walEntries) {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>          coprocessorHost.postWALRestore(region.getRegionInfo(), entry.getFirst(),<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>            entry.getSecond());<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        }<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>      }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>    } catch (IOException ie) {<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>      throw new ServiceException(ie);<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    } finally {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>      if (regionServer.metricsRegionServer != null) {<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>        regionServer.metricsRegionServer.updateReplay(<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>          EnvironmentEdgeManager.currentTime() - before);<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      }<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>    }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span><a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>  /**<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>   * Replicate WAL entries on the region server.<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>   *<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>   * @param controller the RPC controller<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>   * @param request the request<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>   * @throws ServiceException<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>   */<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>  @Override<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>  @QosPriority(priority=HConstants.REPLICATION_QOS)<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>  public ReplicateWALEntryResponse replicateWALEntry(final RpcController controller,<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>      checkOpen();<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      if (regionServer.replicationSinkHandler != null) {<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        requestCount.increment();<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        CellScanner cellScanner = ((HBaseRpcController)controller).cellScanner();<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>        regionServer.getRegionServerCoprocessorHost(

<TRUNCATED>

[13/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
index eccc4a3..ebbde54 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
@@ -1744,1869 +1744,1872 @@
 <span class="sourceLineNo">1736</span>      HRegion region = getRegion(request.getRegion());<a name="line.1736"></a>
 <span class="sourceLineNo">1737</span>      RegionInfo info = region.getRegionInfo();<a name="line.1737"></a>
 <span class="sourceLineNo">1738</span>      byte[] bestSplitRow = null;<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>        HRegion r = region;<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        r.forceSplit(null);<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>        bestSplitRow = r.checkSplit();<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        // try to flush region first<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        if(bestSplitRow == null) {<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>          r.flush(true);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>          bestSplitRow = r.checkSplit();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        r.clearSplit();<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      }<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      }<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      builder.setSplittable(region.isSplittable());<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      builder.setMergeable(region.isMergeable());<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      return builder.build();<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>    } catch (IOException ie) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      throw new ServiceException(ie);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span><a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  @Override<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span><a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    List&lt;HRegion&gt; regions;<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    if (request.hasTableName()) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      regions = regionServer.getRegions(tableName);<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>    } else {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>      regions = regionServer.getRegions();<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    }<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span><a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    try {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      for (HRegion region : regions) {<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      }<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    } catch (IOException e) {<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      throw new ServiceException(e);<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    }<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>    builder.addAllRegionLoads(rLoads);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    return builder.build();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>  }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>  @Override<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>    requestCount.increment();<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      try {<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>        checkOpen();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>          switch (queueName) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            case "long":<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>              break;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            case "short":<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1815"></a>
+<span class="sourceLineNo">1739</span>      boolean shouldSplit = true;<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        HRegion r = region;<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        r.forceSplit(null);<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // Even after setting force split if split policy says no to split then we should not split.<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        shouldSplit = region.getSplitPolicy().shouldSplit() &amp;&amp; !info.isMetaRegion();<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>        bestSplitRow = r.checkSplit();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        // try to flush region first<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>        if(bestSplitRow == null) {<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>          r.flush(true);<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>          bestSplitRow = r.checkSplit();<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        }<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        r.clearSplit();<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      }<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      builder.setSplittable(region.isSplittable() &amp;&amp; shouldSplit);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      builder.setMergeable(region.isMergeable());<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>      }<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      return builder.build();<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>    } catch (IOException ie) {<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      throw new ServiceException(ie);<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    }<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>  }<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span><a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>  @Override<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span><a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>    List&lt;HRegion&gt; regions;<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    if (request.hasTableName()) {<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>      regions = regionServer.getRegions(tableName);<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>    } else {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>      regions = regionServer.getRegions();<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>    }<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    try {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      for (HRegion region : regions) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    } catch (IOException e) {<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>      throw new ServiceException(e);<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>    builder.addAllRegionLoads(rLoads);<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    return builder.build();<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  }<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span><a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>  @Override<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>    requestCount.increment();<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>      try {<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        checkOpen();<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>          switch (queueName) {<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            case "long":<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1815"></a>
 <span class="sourceLineNo">1816</span>              break;<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            default:<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>              throw new IOException("Unknown queue name " + queueName);<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>          }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>      } catch (IOException ie) {<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>        throw new ServiceException(ie);<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      } finally {<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        clearCompactionQueues.set(false);<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      }<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    } else {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>    }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    return respBuilder.build();<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>  }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>  /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>   * Get some information of the region server.<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>   *<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>   * @param controller the RPC controller<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>   * @param request the request<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>   * @throws ServiceException<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>   */<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>  @Override<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    try {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>      checkOpen();<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    } catch (IOException ie) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>      throw new ServiceException(ie);<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>    }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>    requestCount.increment();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>  }<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span><a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>  @Override<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    try {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>      checkOpen();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      HRegion region = getRegion(request.getRegion());<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      requestCount.increment();<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (request.getFamilyCount() == 0) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>      } else {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>          columnFamilies.add(cf.toByteArray());<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        }<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      int nCF = columnFamilies.size();<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      builder.addAllStoreFile(fileList);<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>      return builder.build();<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>    } catch (IOException ie) {<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>      throw new ServiceException(ie);<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>  }<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span><a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>  /**<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>   *<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>   * &lt;p&gt;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>   * Different manages states for the region are:<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>   *  &lt;/ul&gt;<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>   * &lt;p&gt;<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>   * &lt;/p&gt;<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>   * @param controller the RPC controller<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>   * @param request the request<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>   * @throws ServiceException<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>   */<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>  @Override<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>    requestCount.increment();<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>    if (request.hasServerStartCode()) {<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      // check that we are the same server that this RPC is intended for.<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long serverStartCode = request.getServerStartCode();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      if (regionServer.serverName.getStartcode() !=  serverStartCode) {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        throw new ServiceException(new DoNotRetryIOException("This RPC was intended for a " +<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>            "different server with startCode: " + serverStartCode + ", this server is: "<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>            + regionServer.serverName));<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>    }<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span><a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    try {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      checkOpen();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    } catch (IOException ie) {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      TableName tableName = null;<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      if (regionCount == 1) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>        if (ri != null) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>        throw new ServiceException(ie);<a name="line.1936"></a>
+<span class="sourceLineNo">1817</span>            case "short":<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>              break;<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            default:<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              throw new IOException("Unknown queue name " + queueName);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>          }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>        }<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>      } catch (IOException ie) {<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>        throw new ServiceException(ie);<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      } finally {<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        clearCompactionQueues.set(false);<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>      }<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    } else {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>    }<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    return respBuilder.build();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>  }<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span><a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>  /**<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>   * Get some information of the region server.<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>   *<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>   * @param controller the RPC controller<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>   * @param request the request<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>   * @throws ServiceException<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>   */<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>  @Override<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    try {<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>      checkOpen();<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>    } catch (IOException ie) {<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>      throw new ServiceException(ie);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>    }<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    requestCount.increment();<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>  }<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span><a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>  @Override<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>    try {<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      checkOpen();<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      HRegion region = getRegion(request.getRegion());<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      requestCount.increment();<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>      if (request.getFamilyCount() == 0) {<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      } else {<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>          columnFamilies.add(cf.toByteArray());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        }<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      int nCF = columnFamilies.size();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      builder.addAllStoreFile(fileList);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      return builder.build();<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    } catch (IOException ie) {<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>      throw new ServiceException(ie);<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>    }<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  }<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span><a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>  /**<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>   *<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>   * &lt;p&gt;<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>   * Different manages states for the region are:<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>   *  &lt;/ul&gt;<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>   * &lt;p&gt;<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>   * &lt;/p&gt;<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>   * @param controller the RPC controller<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>   * @param request the request<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>   * @throws ServiceException<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>   */<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>  @Override<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    requestCount.increment();<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>    if (request.hasServerStartCode()) {<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      // check that we are the same server that this RPC is intended for.<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      long serverStartCode = request.getServerStartCode();<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (regionServer.serverName.getStartcode() !=  serverStartCode) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        throw new ServiceException(new DoNotRetryIOException("This RPC was intended for a " +<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>            "different server with startCode: " + serverStartCode + ", this server is: "<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>            + regionServer.serverName));<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>    }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>    try {<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>      checkOpen();<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    } catch (IOException ie) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>      TableName tableName = null;<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      if (regionCount == 1) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        if (ri != null) {<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>        }<a name="line.1936"></a>
 <span class="sourceLineNo">1937</span>      }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>      synchronized (regionServer.online) {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>        try {<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>          }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>          checkOpen();<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>        } catch (InterruptedException t) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          Thread.currentThread().interrupt();<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          throw new ServiceException(t);<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>        } catch (IOException e) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          throw new ServiceException(e);<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>        }<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>      }<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    }<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span><a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      TableDescriptor htd;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      try {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        String encodedName = region.getEncodedName();<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>        if (onlineRegion != null) {<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>          // The region is already online. This should not happen any more.<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>          String error = "Received OPEN for the region:"<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          LOG.warn(error);<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>          //regionServer.abort(error);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>          //throw new IOException(error);<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          continue;<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        }<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span><a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>          encodedNameBytes, Boolean.TRUE);<a name="line.1980"></a>
+<span class="sourceLineNo">1938</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>        throw new ServiceException(ie);<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      }<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      synchronized (regionServer.online) {<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>        try {<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          }<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>          checkOpen();<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>        } catch (InterruptedException t) {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>          Thread.currentThread().interrupt();<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>          throw new ServiceException(t);<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>        } catch (IOException e) {<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>          throw new ServiceException(e);<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>        }<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      }<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      TableDescriptor htd;<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        String encodedName = region.getEncodedName();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        if (onlineRegion != null) {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>          // The region is already online. This should not happen any more.<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>          String error = "Received OPEN for the region:"<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          LOG.warn(error);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>          //regionServer.abort(error);<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>          //throw new IOException(error);<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>          continue;<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>        }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.1980"></a>
 <span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>            // There is a close in progress. This should not happen any more.<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>            String error = "Received OPEN for the region:"<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>            regionServer.abort(error);<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>            throw new IOException(error);<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>          }<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>        }<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span><a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>          // An open is in progress. This is supported, but let's log this.<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>              + " - ignoring this new request for this region.");<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>        }<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span><a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span><a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>          htd = htds.get(region.getTable());<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>          if (htd == null) {<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>            htds.put(region.getTable(), htd);<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>          }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>          if (htd == null) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2011"></a>
+<span class="sourceLineNo">1982</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>          encodedNameBytes, Boolean.TRUE);<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span><a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>            // There is a close in progress. This should not happen any more.<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>            String error = "Received OPEN for the region:"<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>            regionServer.abort(error);<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>            throw new IOException(error);<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>          }<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>        }<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>          // An open is in progress. This is supported, but let's log this.<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>              + " - ignoring this new request for this region.");<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>        }<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span><a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span><a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>          htd = htds.get(region.getTable());<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>          if (htd == null) {<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>            htds.put(region.getTable(), htd);<a name="line.2011"></a>
 <span class="sourceLineNo">2012</span>          }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>          // Need to pass the expected version in the constructor.<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>          if (regionServer.executorService == null) {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>          } else {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>            if (region.isMetaRegion()) {<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>            } else {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>              }<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>              } else {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2030"></a>
+<span class="sourceLineNo">2013</span>          if (htd == null) {<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>          }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>          // Need to pass the expected version in the constructor.<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>          if (regionServer.executorService == null) {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>          } else {<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>            if (region.isMetaRegion()) {<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>            } else {<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>              }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2030"></a>
 <span class="sourceLineNo">2031</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>              }<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>            }<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          }<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        }<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span><a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      } catch (IOException ie) {<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>        if (isBulkAssign) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>          throw new ServiceException(ie);<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>    return builder.build();<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>  }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span><a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>  /**<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   *  Wamrmup a region on this server.<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   *<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>   * closes the region bringing the most important pages in cache.<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>   * &lt;p&gt;<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>   *<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>   * @param controller the RPC controller<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>   * @param request the request<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>   * @throws ServiceException<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>   */<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>  @Override<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span><a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    TableDescriptor htd;<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span><a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    try {<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      checkOpen();<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>      String encodedName = region.getEncodedName();<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span><a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      if (onlineRegion != null) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>        return response;<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>      if (LOG.isDebugEnabled()) {<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        LOG.debug("Warming up Region " + region.getRegionNameAsString());<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span><a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span><a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>        return response;<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      }<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span><a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2092"></a>
+<span class="sourceLineNo">2032</span>              } else {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>              }<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>            }<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          }<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        }<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span><a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>      } catch (IOException ie) {<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>        if (isBulkAssign) {<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>        } else {<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>          throw new ServiceException(ie);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>        }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      }<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>    }<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    return builder.build();<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>  }<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span><a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>  /**<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>   *  Wamrmup a region on this server.<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>   *<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>   * closes the region bringing the most important pages in cache.<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>   * &lt;p&gt;<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>   *<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>   * @param controller the RPC controller<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>   * @param request the request<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>   * @throws ServiceException<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>   */<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>  @Override<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span><a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    TableDescriptor htd;<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span><a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    try {<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      checkOpen();<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>      String encodedName = region.getEncodedName();<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span><a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      if (onlineRegion != null) {<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>        return response;<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>      }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span><a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>      if (LOG.isDebugEnabled()) {<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        LOG.debug("Warming up Region " + region.getRegionNameAsString());<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>      }<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span><a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span><a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>        return response;<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>      }<a name="line.2092"></a>
 <span class="sourceLineNo">2093</span><a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>    } catch (IOException ie) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      throw new ServiceException(ie);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span><a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>    return response;<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  }<a name="line.2100"></a>
+<span class="sourceLineNo">2094</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span><a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    } catch (IOException ie) {<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>      throw new ServiceException(ie);<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    }<a name="line.2100"></a>
 <span class="sourceLineNo">2101</span><a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>  /**<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>   * Replay the given changes when distributedLogReplay WAL edits from a failed RS. The guarantee is<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>   * that the given mutations will be durable on the receiving RS if this method returns without any<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>   * exception.<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>   * @param controller the RPC controller<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>   * @param request the request<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>   * @throws ServiceException<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>   */<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>  @Override<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  @QosPriority(priority = HConstants.REPLAY_QOS)<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>  public ReplicateWALEntryResponse replay(final RpcController controller,<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    CellScanner cells = ((HBaseRpcController) controller).cellScanner();<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    try {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>      checkOpen();<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>      if (entries == null || entries.isEmpty()) {<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>        // empty input<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>      ByteString regionName = entries.get(0).getKey().getEncodedRegionName();<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      HRegion region = regionServer.getRegionByEncodedName(regionName.toStringUtf8());<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>      RegionCoprocessorHost coprocessorHost =<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>          ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>            ? region.getCoprocessorHost()<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>            : null; // do not invoke coprocessors if this is a secondary region replica<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>      List&lt;Pair&lt;WALKey, WALEdit&gt;&gt; walEntries = new ArrayList&lt;&gt;();<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      // Skip adding the edits to WAL if this is a secondary region replica<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>      boolean isPrimary = RegionReplicaUtil.isDefaultReplica(region.getRegionInfo());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>      Durability durability = isPrimary ? Durability.USE_DEFAULT : Durability.SKIP_WAL;<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span><a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      for (WALEntry entry : entries) {<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>        if (!regionName.equals(entry.getKey().getEncodedRegionName())) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>          throw new NotServingRegionException("Replay request contains entries from multiple " +<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>              "regions. First region:" + regionName.toStringUtf8() + " , other region:"<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>              + entry.getKey().getEncodedRegionName());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        }<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        if (regionServer.nonceManager != null &amp;&amp; isPrimary) {<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          long nonceGroup = entry.getKey().hasNonceGroup()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>            ? entry.getKey().getNonceGroup() : HConstants.NO_NONCE;<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>          long nonce = entry.getKey().hasNonce() ? entry.getKey().getNonce() : HConstants.NO_NONCE;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>          regionServer.nonceManager.reportOperationFromWal(<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>              nonceGroup,<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>              nonce,<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>              entry.getKey().getWriteTime());<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>        }<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        Pair&lt;WALKey, WALEdit&gt; walEntry = (coprocessorHost == null) ? null : new Pair&lt;&gt;();<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>        List&lt;WALSplitter.MutationReplay&gt; edits = WALSplitter.getMutationsFromWALEntry(entry,<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>          cells, walEntry, durability);<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>        if (coprocessorHost != null) {<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>          // Start coprocessor replay here. The coprocessor is for each WALEdit instead of a<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>          // KeyValue.<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>          if (coprocessorHost.preWALRestore(region.getRegionInfo(), walEntry.getFirst(),<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>            walEntry.getSecond())) {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>            // if bypass this log entry, ignore it ...<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>            continue;<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>          }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>          walEntries.add(walEntry);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>        }<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>        if(edits!=null &amp;&amp; !edits.isEmpty()) {<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>          // HBASE-17924<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>          // sort to improve lock efficiency<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>          Collections.sort(edits, (v1, v2) -&gt; Row.COMPARATOR.compare(v1.mutation, v2.mutation));<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          long replaySeqId = (entry.getKey().hasOrigSequenceNumber()) ?<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>            entry.getKey().getOrigSequenceNumber() : entry.getKey().getLogSequenceNumber();<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>          OperationStatus[] result = doReplayBatchOp(region, edits, replaySeqId);<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>          // check if it's a partial success<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>          for (int i = 0; result != null &amp;&amp; i &lt; result.length; i++) {<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>            if (result[i] != OperationStatus.SUCCESS) {<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>              throw new IOException(result[i].getExceptionMsg());<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>            }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>          }<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        }<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>      }<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span><a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      //sync wal at the end because ASYNC_WAL is used above<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>      WAL wal = region.getWAL();<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>      if (wal != null) {<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        wal.sync();<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>      }<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span><a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>      if (coprocessorHost != null) {<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>        for (Pair&lt;WALKey, WALEdit&gt; entry : walEntries) {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>          coprocessorHost.postWALRestore(region.getRegionInfo(), entry.getFirst(),<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>            entry.getSecond());<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        }<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>      }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>    } catch (IOException ie) {<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>      throw new ServiceException(ie);<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    } finally {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>      if (regionServer.metricsRegionServer != null) {<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>        regionServer.metricsRegionServer.updateReplay(<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>          EnvironmentEdgeManager.currentTime() - before);<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      }<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>    }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span><a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>  /**<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>   * Replicate WAL entries on the region server.<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>   *<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>   * @param controller the RPC controller<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>   * @param request the request<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>   * @throws ServiceException<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>   */<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>  @Override<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>  @QosPriority(priority=HConstants.REPLICATION_QOS)<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>  public ReplicateWALEntryResponse replicateWALEntry(final RpcController controller,<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>      checkOpen();<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      if (regionServer.replicationSinkHandler != null) {<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        requestCount.increment();<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        CellScanner cellScanner = ((HBaseRpcController)controller).cellScanner();<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>        regi

<TRUNCATED>

[02/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html
new file mode 100644
index 0000000..127be96
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html
@@ -0,0 +1,434 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span><a name="line.1"></a>
+<span class="sourceLineNo">002</span>/**<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
+<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
+<span class="sourceLineNo">012</span> *<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
+<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
+<span class="sourceLineNo">018</span> */<a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.security.access;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.AuthUtil.toGroupEntry;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.assertArrayEquals;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.junit.Assert.assertFalse;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.junit.Assert.assertTrue;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.junit.Assert.fail;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.mockito.Mockito.mock;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import com.google.protobuf.Service;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import com.google.protobuf.ServiceException;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.io.IOException;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.security.PrivilegedExceptionAction;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Collections;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.HashMap;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.conf.Configuration;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.Cell;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ServerName;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.TableName;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Get;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Put;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Result;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.Table;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessor;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.ipc.protobuf.generated.TestRpcServiceProtos;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.security.User;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.testclassification.SecurityTests;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.BeforeClass;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.ClassRule;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Rule;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Test;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.experimental.categories.Category;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>/**<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * This class tests operations in MasterRpcServices which require ADMIN access.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * It doesn't test all operations which require ADMIN access, only those which get vetted within<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * MasterRpcServices at the point of entry itself (unlike old approach of using<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * hooks in AccessController).<a name="line.72"></a>
+<span class="sourceLineNo">073</span> *<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * Sidenote:<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * There is one big difference between how security tests for AccessController hooks work, and how<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * the tests in this class for security in MasterRpcServices work.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * The difference arises because of the way AC &amp; MasterRpcServices get the user.<a name="line.77"></a>
+<span class="sourceLineNo">078</span> *<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * In AccessController, it first checks if there is an active rpc user in ObserverContext. If not,<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * it uses UserProvider for current user. This *might* make sense in the context of coprocessors,<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * because they can be called outside the context of RPCs.<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * But in the context of MasterRpcServices, only one way makes sense - RPCServer.getRequestUser().<a name="line.82"></a>
+<span class="sourceLineNo">083</span> *<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * In AC tests, when we do FooUser.runAs on AccessController instance directly, it bypasses<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * the rpc framework completely, but works because UserProvider provides the correct user, i.e.<a name="line.85"></a>
+<span class="sourceLineNo">086</span> * FooUser in this case.<a name="line.86"></a>
+<span class="sourceLineNo">087</span> *<a name="line.87"></a>
+<span class="sourceLineNo">088</span> * But this doesn't work for the tests here, so we go around by doing complete RPCs.<a name="line.88"></a>
+<span class="sourceLineNo">089</span> */<a name="line.89"></a>
+<span class="sourceLineNo">090</span>@Category({SecurityTests.class, MediumTests.class})<a name="line.90"></a>
+<span class="sourceLineNo">091</span>public class TestRpcAccessChecks {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @ClassRule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      HBaseClassTestRule.forClass(TestRpcAccessChecks.class);<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  @Rule<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public final TestName TEST_NAME = new TestName();<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private static Configuration conf;<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  // user granted with all global permission<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private static User USER_ADMIN;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  // user without admin permissions<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  private static User USER_NON_ADMIN;<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>  private static final String GROUP_ADMIN = "admin_group";<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  private static User USER_GROUP_ADMIN;<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  // Dummy service to test execService calls. Needs to be public so can be loaded as Coprocessor.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public static class DummyCpService implements MasterCoprocessor, RegionServerCoprocessor {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public DummyCpService() {}<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    public Iterable&lt;Service&gt; getServices() {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      return Collections.singleton(mock(TestRpcServiceProtos.TestProtobufRpcProto.class));<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private static void enableSecurity(Configuration conf) throws IOException {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    conf.set("hadoop.security.authorization", "false");<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    conf.set("hadoop.security.authentication", "simple");<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, AccessController.class.getName() +<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      "," + DummyCpService.class.getName());<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, AccessController.class.getName());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.set(CoprocessorHost.REGIONSERVER_COPROCESSOR_CONF_KEY, AccessController.class.getName() +<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      "," + DummyCpService.class.getName());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    conf.set(User.HBASE_SECURITY_AUTHORIZATION_CONF_KEY, "true");<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    SecureTestUtil.configureSuperuser(conf);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  @BeforeClass<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  public static void setup() throws Exception {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    conf = TEST_UTIL.getConfiguration();<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>    // Enable security<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    enableSecurity(conf);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    TEST_UTIL.startMiniCluster();<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // Wait for the ACL table to become available<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    TEST_UTIL.waitUntilAllRegionsAssigned(AccessControlLists.ACL_TABLE_NAME);<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>    // Create users<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    USER_ADMIN = User.createUserForTesting(conf, "admin", new String[0]);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    USER_NON_ADMIN = User.createUserForTesting(conf, "non_admin", new String[0]);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    USER_GROUP_ADMIN =<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        User.createUserForTesting(conf, "user_group_admin", new String[] { GROUP_ADMIN });<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>    // Assign permissions to users and groups<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    SecureTestUtil.grantGlobal(TEST_UTIL, USER_ADMIN.getShortName(), Permission.Action.ADMIN);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    SecureTestUtil.grantGlobal(TEST_UTIL, toGroupEntry(GROUP_ADMIN), Permission.Action.ADMIN);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    // No permissions to USER_NON_ADMIN<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  interface Action {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    void run(Admin admin) throws Exception;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  private void verifyAllowed(User user, Action action) throws Exception {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          Admin admin = conn.getAdmin()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        action.run(admin);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      } catch (IOException e) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        fail(e.toString());<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      return null;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    });<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>  private void verifyDenied(User user, Action action) throws Exception {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      boolean accessDenied = false;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          Admin admin = conn.getAdmin()) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        action.run(admin);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      } catch (AccessDeniedException e) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        accessDenied = true;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      assertTrue("Expected access to be denied", accessDenied);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      return null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    });<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  private void verifiedDeniedServiceException(User user, Action action) throws Exception {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      boolean accessDenied = false;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>          Admin admin = conn.getAdmin()) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        action.run(admin);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      } catch (ServiceException e) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        // For MasterRpcServices.execService.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        if (e.getCause() instanceof AccessDeniedException) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          accessDenied = true;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      assertTrue("Expected access to be denied", accessDenied);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      return null;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    });<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  }<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  private void verifyAdminCheckForAction(Action action) throws Exception {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    verifyAllowed(USER_ADMIN, action);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    verifyDenied(USER_NON_ADMIN, action);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  }<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>  @Test<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  public void testEnableCatalogJanitor() throws Exception {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    verifyAdminCheckForAction((admin) -&gt; admin.enableCatalogJanitor(true));<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>  @Test<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  public void testRunCatalogJanitor() throws Exception {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    verifyAdminCheckForAction((admin) -&gt; admin.runCatalogJanitor());<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  @Test<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  public void testCleanerChoreRunning() throws Exception {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    verifyAdminCheckForAction((admin) -&gt; admin.cleanerChoreSwitch(true));<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  @Test<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  public void testRunCleanerChore() throws Exception {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    verifyAdminCheckForAction((admin) -&gt; admin.runCleanerChore());<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>  @Test<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  public void testExecProcedure() throws Exception {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    verifyAdminCheckForAction((admin) -&gt; {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // Using existing table instead of creating a new one.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      admin.execProcedure("flush-table-proc", TableName.META_TABLE_NAME.getNameAsString(),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          new HashMap&lt;&gt;());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    });<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>  @Test<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  public void testExecService() throws Exception {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    Action action = (admin) -&gt; {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface service =<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          TestRpcServiceProtos.TestProtobufRpcProto.newBlockingStub(admin.coprocessorService());<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      service.ping(null, TestProtos.EmptyRequestProto.getDefaultInstance());<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    };<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>    verifyAllowed(USER_ADMIN, action);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    // This is same as above verifyAccessDenied<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    verifiedDeniedServiceException(USER_NON_ADMIN, action);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  }<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>  @Test<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  public void testExecProcedureWithRet() throws Exception {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    verifyAdminCheckForAction((admin) -&gt; {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      // Using existing table instead of creating a new one.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      admin.execProcedureWithReturn("flush-table-proc", TableName.META_TABLE_NAME.getNameAsString(),<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          new HashMap&lt;&gt;());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    });<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>  @Test<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  public void testNormalize() throws Exception {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    verifyAdminCheckForAction((admin) -&gt; admin.normalize());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>  @Test<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  public void testSetNormalizerRunning() throws Exception {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    verifyAdminCheckForAction((admin) -&gt; admin.normalizerSwitch(true));<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>  @Test<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  public void testExecRegionServerService() throws Exception {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    Action action = (admin) -&gt; {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      ServerName serverName = TEST_UTIL.getHBaseCluster().getRegionServer(0).getServerName();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface service =<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          TestRpcServiceProtos.TestProtobufRpcProto.newBlockingStub(<a name="line.276"></a>
+<span class="sourceLineNo">277</span>              admin.coprocessorService(serverName));<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      service.ping(null, TestProtos.EmptyRequestProto.getDefaultInstance());<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    };<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>    verifyAllowed(USER_ADMIN, action);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    verifiedDeniedServiceException(USER_NON_ADMIN, action);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  @Test<a name="line.286"></a>
+<span class="sourceLineNo">287</span>  public void testTableFlush() throws Exception {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    TableName tn = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn)<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of("f1")).build();<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    Action adminAction = (admin) -&gt; {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      admin.createTable(desc);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // Avoid giving a global permission which may screw up other tests<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      SecureTestUtil.grantOnTable(<a name="line.294"></a>
+<span class="sourceLineNo">295</span>          TEST_UTIL, USER_NON_ADMIN.getShortName(), tn, null, null, Permission.Action.READ,<a name="line.295"></a>
+<span class="sourceLineNo">296</span>          Permission.Action.WRITE, Permission.Action.CREATE);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    };<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    verifyAllowed(USER_ADMIN, adminAction);<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>    Action userAction = (admin) -&gt; {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      Connection conn = admin.getConnection();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      final byte[] rowKey = Bytes.toBytes("row1");<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      final byte[] col = Bytes.toBytes("q1");<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      final byte[] val = Bytes.toBytes("v1");<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      try (Table table = conn.getTable(tn)) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        // Write a value<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        Put p = new Put(rowKey);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        p.addColumn(Bytes.toBytes("f1"), col, val);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        table.put(p);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        // Flush should not require ADMIN permission<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        admin.flush(tn);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        // Nb: ideally, we would verify snapshot permission too (as that was fixed in the<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        //   regression HBASE-20185) but taking a snapshot requires ADMIN permission which<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        //   masks the root issue.<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        // Make sure we read the value<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        Result result = table.get(new Get(rowKey));<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        assertFalse(result.isEmpty());<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        Cell c = result.getColumnLatestCell(Bytes.toBytes("f1"), col);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        assertArrayEquals(val, CellUtil.cloneValue(c));<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    };<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    verifyAllowed(USER_NON_ADMIN, userAction);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>  @Test<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  public void testTableFlushAndSnapshot() throws Exception {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    TableName tn = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn)<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of("f1")).build();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    Action adminAction = (admin) -&gt; {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      admin.createTable(desc);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      // Giving ADMIN here, but only on this table, *not* globally<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      SecureTestUtil.grantOnTable(<a name="line.333"></a>
+<span class="sourceLineNo">334</span>          TEST_UTIL, USER_NON_ADMIN.getShortName(), tn, null, null, Permission.Action.READ,<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          Permission.Action.WRITE, Permission.Action.CREATE, Permission.Action.ADMIN);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    };<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    verifyAllowed(USER_ADMIN, adminAction);<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    Action userAction = (admin) -&gt; {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      Connection conn = admin.getConnection();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      final byte[] rowKey = Bytes.toBytes("row1");<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      final byte[] col = Bytes.toBytes("q1");<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      final byte[] val = Bytes.toBytes("v1");<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      try (Table table = conn.getTable(tn)) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        // Write a value<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        Put p = new Put(rowKey);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        p.addColumn(Bytes.toBytes("f1"), col, val);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        table.put(p);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        // Flush should not require ADMIN permission<a name="line.349"></a>
+<span class="sourceLineNo">350</span>        admin.flush(tn);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        // Table admin should be sufficient to snapshot this table<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        admin.snapshot(tn.getNameAsString() + "_snapshot1", tn);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        // Read the value just because<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        Result result = table.get(new Get(rowKey));<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        assertFalse(result.isEmpty());<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        Cell c = result.getColumnLatestCell(Bytes.toBytes("f1"), col);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        assertArrayEquals(val, CellUtil.cloneValue(c));<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    };<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    verifyAllowed(USER_NON_ADMIN, userAction);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>}<a name="line.362"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html
new file mode 100644
index 0000000..127be96
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html
@@ -0,0 +1,434 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span><a name="line.1"></a>
+<span class="sourceLineNo">002</span>/**<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
+<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
+<span class="sourceLineNo">012</span> *<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
+<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
+<span class="sourceLineNo">018</span> */<a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.security.access;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.AuthUtil.toGroupEntry;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.assertArrayEquals;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import static org.junit.Assert.assertFalse;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import static org.junit.Assert.assertTrue;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import static org.junit.Assert.fail;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.mockito.Mockito.mock;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import com.google.protobuf.Service;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import com.google.protobuf.ServiceException;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.io.IOException;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.security.PrivilegedExceptionAction;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Collections;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.HashMap;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.conf.Configuration;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.Cell;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.ServerName;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.TableName;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Get;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Put;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Result;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.Table;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessor;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.ipc.protobuf.generated.TestRpcServiceProtos;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.security.User;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.testclassification.SecurityTests;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.BeforeClass;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.ClassRule;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.Rule;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Test;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.experimental.categories.Category;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.rules.TestName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>/**<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * This class tests operations in MasterRpcServices which require ADMIN access.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * It doesn't test all operations which require ADMIN access, only those which get vetted within<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * MasterRpcServices at the point of entry itself (unlike old approach of using<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * hooks in AccessController).<a name="line.72"></a>
+<span class="sourceLineNo">073</span> *<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * Sidenote:<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * There is one big difference between how security tests for AccessController hooks work, and how<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * the tests in this class for security in MasterRpcServices work.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * The difference arises because of the way AC &amp; MasterRpcServices get the user.<a name="line.77"></a>
+<span class="sourceLineNo">078</span> *<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * In AccessController, it first checks if there is an active rpc user in ObserverContext. If not,<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * it uses UserProvider for current user. This *might* make sense in the context of coprocessors,<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * because they can be called outside the context of RPCs.<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * But in the context of MasterRpcServices, only one way makes sense - RPCServer.getRequestUser().<a name="line.82"></a>
+<span class="sourceLineNo">083</span> *<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * In AC tests, when we do FooUser.runAs on AccessController instance directly, it bypasses<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * the rpc framework completely, but works because UserProvider provides the correct user, i.e.<a name="line.85"></a>
+<span class="sourceLineNo">086</span> * FooUser in this case.<a name="line.86"></a>
+<span class="sourceLineNo">087</span> *<a name="line.87"></a>
+<span class="sourceLineNo">088</span> * But this doesn't work for the tests here, so we go around by doing complete RPCs.<a name="line.88"></a>
+<span class="sourceLineNo">089</span> */<a name="line.89"></a>
+<span class="sourceLineNo">090</span>@Category({SecurityTests.class, MediumTests.class})<a name="line.90"></a>
+<span class="sourceLineNo">091</span>public class TestRpcAccessChecks {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  @ClassRule<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      HBaseClassTestRule.forClass(TestRpcAccessChecks.class);<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  @Rule<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public final TestName TEST_NAME = new TestName();<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private static Configuration conf;<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  // user granted with all global permission<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private static User USER_ADMIN;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  // user without admin permissions<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  private static User USER_NON_ADMIN;<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>  private static final String GROUP_ADMIN = "admin_group";<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  private static User USER_GROUP_ADMIN;<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  // Dummy service to test execService calls. Needs to be public so can be loaded as Coprocessor.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public static class DummyCpService implements MasterCoprocessor, RegionServerCoprocessor {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public DummyCpService() {}<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    public Iterable&lt;Service&gt; getServices() {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      return Collections.singleton(mock(TestRpcServiceProtos.TestProtobufRpcProto.class));<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private static void enableSecurity(Configuration conf) throws IOException {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    conf.set("hadoop.security.authorization", "false");<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    conf.set("hadoop.security.authentication", "simple");<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    conf.set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, AccessController.class.getName() +<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      "," + DummyCpService.class.getName());<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    conf.set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, AccessController.class.getName());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    conf.set(CoprocessorHost.REGIONSERVER_COPROCESSOR_CONF_KEY, AccessController.class.getName() +<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      "," + DummyCpService.class.getName());<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    conf.set(User.HBASE_SECURITY_AUTHORIZATION_CONF_KEY, "true");<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    SecureTestUtil.configureSuperuser(conf);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  @BeforeClass<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  public static void setup() throws Exception {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    conf = TEST_UTIL.getConfiguration();<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>    // Enable security<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    enableSecurity(conf);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    TEST_UTIL.startMiniCluster();<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // Wait for the ACL table to become available<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    TEST_UTIL.waitUntilAllRegionsAssigned(AccessControlLists.ACL_TABLE_NAME);<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>    // Create users<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    USER_ADMIN = User.createUserForTesting(conf, "admin", new String[0]);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    USER_NON_ADMIN = User.createUserForTesting(conf, "non_admin", new String[0]);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    USER_GROUP_ADMIN =<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        User.createUserForTesting(conf, "user_group_admin", new String[] { GROUP_ADMIN });<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>    // Assign permissions to users and groups<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    SecureTestUtil.grantGlobal(TEST_UTIL, USER_ADMIN.getShortName(), Permission.Action.ADMIN);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    SecureTestUtil.grantGlobal(TEST_UTIL, toGroupEntry(GROUP_ADMIN), Permission.Action.ADMIN);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    // No permissions to USER_NON_ADMIN<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  interface Action {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    void run(Admin admin) throws Exception;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  private void verifyAllowed(User user, Action action) throws Exception {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>          Admin admin = conn.getAdmin()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        action.run(admin);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      } catch (IOException e) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        fail(e.toString());<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      return null;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    });<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>  private void verifyDenied(User user, Action action) throws Exception {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      boolean accessDenied = false;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          Admin admin = conn.getAdmin()) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        action.run(admin);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      } catch (AccessDeniedException e) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        accessDenied = true;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      assertTrue("Expected access to be denied", accessDenied);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      return null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    });<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  private void verifiedDeniedServiceException(User user, Action action) throws Exception {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      boolean accessDenied = false;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>          Admin admin = conn.getAdmin()) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        action.run(admin);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      } catch (ServiceException e) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        // For MasterRpcServices.execService.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        if (e.getCause() instanceof AccessDeniedException) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          accessDenied = true;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      assertTrue("Expected access to be denied", accessDenied);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      return null;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    });<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  }<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  private void verifyAdminCheckForAction(Action action) throws Exception {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    verifyAllowed(USER_ADMIN, action);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    verifyDenied(USER_NON_ADMIN, action);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  }<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>  @Test<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  public void testEnableCatalogJanitor() throws Exception {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    verifyAdminCheckForAction((admin) -&gt; admin.enableCatalogJanitor(true));<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>  @Test<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  public void testRunCatalogJanitor() throws Exception {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    verifyAdminCheckForAction((admin) -&gt; admin.runCatalogJanitor());<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  @Test<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  public void testCleanerChoreRunning() throws Exception {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    verifyAdminCheckForAction((admin) -&gt; admin.cleanerChoreSwitch(true));<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  @Test<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  public void testRunCleanerChore() throws Exception {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    verifyAdminCheckForAction((admin) -&gt; admin.runCleanerChore());<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>  @Test<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  public void testExecProcedure() throws Exception {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    verifyAdminCheckForAction((admin) -&gt; {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // Using existing table instead of creating a new one.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      admin.execProcedure("flush-table-proc", TableName.META_TABLE_NAME.getNameAsString(),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          new HashMap&lt;&gt;());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    });<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>  @Test<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  public void testExecService() throws Exception {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    Action action = (admin) -&gt; {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface service =<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          TestRpcServiceProtos.TestProtobufRpcProto.newBlockingStub(admin.coprocessorService());<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      service.ping(null, TestProtos.EmptyRequestProto.getDefaultInstance());<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    };<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>    verifyAllowed(USER_ADMIN, action);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    // This is same as above verifyAccessDenied<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    verifiedDeniedServiceException(USER_NON_ADMIN, action);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  }<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>  @Test<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  public void testExecProcedureWithRet() throws Exception {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    verifyAdminCheckForAction((admin) -&gt; {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      // Using existing table instead of creating a new one.<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      admin.execProcedureWithReturn("flush-table-proc", TableName.META_TABLE_NAME.getNameAsString(),<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          new HashMap&lt;&gt;());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    });<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>  @Test<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  public void testNormalize() throws Exception {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    verifyAdminCheckForAction((admin) -&gt; admin.normalize());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>  @Test<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  public void testSetNormalizerRunning() throws Exception {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    verifyAdminCheckForAction((admin) -&gt; admin.normalizerSwitch(true));<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>  @Test<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  public void testExecRegionServerService() throws Exception {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    Action action = (admin) -&gt; {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      ServerName serverName = TEST_UTIL.getHBaseCluster().getRegionServer(0).getServerName();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface service =<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          TestRpcServiceProtos.TestProtobufRpcProto.newBlockingStub(<a name="line.276"></a>
+<span class="sourceLineNo">277</span>              admin.coprocessorService(serverName));<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      service.ping(null, TestProtos.EmptyRequestProto.getDefaultInstance());<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    };<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>    verifyAllowed(USER_ADMIN, action);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    verifiedDeniedServiceException(USER_NON_ADMIN, action);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  @Test<a name="line.286"></a>
+<span class="sourceLineNo">287</span>  public void testTableFlush() throws Exception {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    TableName tn = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn)<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of("f1")).build();<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    Action adminAction = (admin) -&gt; {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      admin.createTable(desc);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // Avoid giving a global permission which may screw up other tests<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      SecureTestUtil.grantOnTable(<a name="line.294"></a>
+<span class="sourceLineNo">295</span>          TEST_UTIL, USER_NON_ADMIN.getShortName(), tn, null, null, Permission.Action.READ,<a name="line.295"></a>
+<span class="sourceLineNo">296</span>          Permission.Action.WRITE, Permission.Action.CREATE);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    };<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    verifyAllowed(USER_ADMIN, adminAction);<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>    Action userAction = (admin) -&gt; {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      Connection conn = admin.getConnection();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      final byte[] rowKey = Bytes.toBytes("row1");<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      final byte[] col = Bytes.toBytes("q1");<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      final byte[] val = Bytes.toBytes("v1");<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      try (Table table = conn.getTable(tn)) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        // Write a value<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        Put p = new Put(rowKey);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        p.addColumn(Bytes.toBytes("f1"), col, val);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        table.put(p);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        // Flush should not require ADMIN permission<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        admin.flush(tn);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        // Nb: ideally, we would verify snapshot permission too (as that was fixed in the<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        //   regression HBASE-20185) but taking a snapshot requires ADMIN permission which<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        //   masks the root issue.<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        // Make sure we read the value<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        Result result = table.get(new Get(rowKey));<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        assertFalse(result.isEmpty());<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        Cell c = result.getColumnLatestCell(Bytes.toBytes("f1"), col);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        assertArrayEquals(val, CellUtil.cloneValue(c));<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    };<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    verifyAllowed(USER_NON_ADMIN, userAction);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>  @Test<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  public void testTableFlushAndSnapshot() throws Exception {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    TableName tn = TableName.valueOf(TEST_NAME.getMethodName());<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    TableDescriptor desc = TableDescriptorBuilder.newBuilder(tn)<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        .setColumnFamily(ColumnFamilyDescriptorBuilder.of("f1")).build();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    Action adminAction = (admin) -&gt; {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      admin.createTable(desc);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      // Giving ADMIN here, but only on this table, *not* globally<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      SecureTestUtil.grantOnTable(<a name="line.333"></a>
+<span class="sourceLineNo">334</span>          TEST_UTIL, USER_NON_ADMIN.getShortName(), tn, null, null, Permission.Action.READ,<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          Permission.Action.WRITE, Permission.Action.CREATE, Permission.Action.ADMIN);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    };<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    verifyAllowed(USER_ADMIN, adminAction);<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    Action userAction = (admin) -&gt; {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      Connection conn = admin.getConnection();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      final byte[] rowKey = Bytes.toBytes("row1");<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      final byte[] col = Bytes.toBytes("q1");<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      final byte[] val = Bytes.toBytes("v1");<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      try (Table table = conn.getTable(tn)) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        // Write a value<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        Put p = new Put(rowKey);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        p.addColumn(Bytes.toBytes("f1"), col, val);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        table.put(p);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        // Flush should not require ADMIN permission<a name="line.349"></a>
+<span class="sourceLineNo">350</span>        admin.flush(tn);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        // Table admin should be sufficient to snapshot this table<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        admin.snapshot(tn.getNameAsString() + "_snapshot1", tn);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        // Read the value just because<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        Result result = table.get(new Get(rowKey));<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        assertFalse(result.isEmpty());<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        Cell c = result.getColumnLatestCell(Bytes.toBytes("f1"), col);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        assertArrayEquals(val, CellUtil.cloneValue(c));<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    };<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    verifyAllowed(USER_NON_ADMIN, userAction);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>}<a name="line.362"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[04/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAdmin1.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAdmin1.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAdmin1.html
index d6fa453..bb14853 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAdmin1.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestAdmin1.html
@@ -39,1367 +39,1397 @@
 <span class="sourceLineNo">031</span>import java.util.Map;<a name="line.31"></a>
 <span class="sourceLineNo">032</span>import java.util.concurrent.TimeUnit;<a name="line.32"></a>
 <span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HConstants;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ServerName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.TableName;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.TableNotEnabledException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.regionserver.HStoreFile;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.After;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.AfterClass;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Before;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.BeforeClass;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.ClassRule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Rule;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.Test;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.junit.experimental.categories.Category;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.junit.rules.TestName;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.slf4j.Logger;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.slf4j.LoggerFactory;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MergeTableRegionsRequest;<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>/**<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * Class to test HBaseAdmin.<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * Spins up the minicluster once at test start and then takes it down afterward.<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * Add any testing of HBaseAdmin functionality here.<a name="line.75"></a>
-<span class="sourceLineNo">076</span> */<a name="line.76"></a>
-<span class="sourceLineNo">077</span>@Category({LargeTests.class, ClientTests.class})<a name="line.77"></a>
-<span class="sourceLineNo">078</span>public class TestAdmin1 {<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  @ClassRule<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      HBaseClassTestRule.forClass(TestAdmin1.class);<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAdmin1.class);<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private Admin admin;<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>  @Rule<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  public TestName name = new TestName();<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  @BeforeClass<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  public static void setUpBeforeClass() throws Exception {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    TEST_UTIL.getConfiguration().setInt("hbase.regionserver.msginterval", 100);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    TEST_UTIL.getConfiguration().setInt("hbase.client.pause", 250);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    TEST_UTIL.getConfiguration().setInt("hbase.client.retries.number", 6);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    TEST_UTIL.getConfiguration().setBoolean("hbase.master.enabletable.roundrobin", true);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    TEST_UTIL.startMiniCluster(3);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>  @AfterClass<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public static void tearDownAfterClass() throws Exception {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  @Before<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public void setUp() throws Exception {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    this.admin = TEST_UTIL.getAdmin();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>  @After<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  public void tearDown() throws Exception {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    for (HTableDescriptor htd : this.admin.listTables()) {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      TEST_UTIL.deleteTable(htd.getTableName());<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  @Test<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  public void testSplitFlushCompactUnknownTable() throws InterruptedException {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    final TableName unknowntable = TableName.valueOf(name.getMethodName());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    Exception exception = null;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    try {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      this.admin.compact(unknowntable);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    } catch (IOException e) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      exception = e;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>    exception = null;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    try {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      this.admin.flush(unknowntable);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    } catch (IOException e) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      exception = e;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>    exception = null;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    try {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      this.admin.split(unknowntable);<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    } catch (IOException e) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      exception = e;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  @Test<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public void testDeleteEditUnknownColumnFamilyAndOrTable() throws IOException {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    // Test we get exception if we try to<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    final TableName nonexistentTable = TableName.valueOf("nonexistent");<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    final byte[] nonexistentColumn = Bytes.toBytes("nonexistent");<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    HColumnDescriptor nonexistentHcd = new HColumnDescriptor(nonexistentColumn);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    Exception exception = null;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    try {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      this.admin.addColumnFamily(nonexistentTable, nonexistentHcd);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    } catch (IOException e) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      exception = e;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>    exception = null;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    try {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      this.admin.deleteTable(nonexistentTable);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    } catch (IOException e) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      exception = e;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>    exception = null;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    try {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      this.admin.deleteColumnFamily(nonexistentTable, nonexistentColumn);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    } catch (IOException e) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      exception = e;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>    exception = null;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    try {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      this.admin.disableTable(nonexistentTable);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    } catch (IOException e) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      exception = e;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>    exception = null;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    try {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      this.admin.enableTable(nonexistentTable);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    } catch (IOException e) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      exception = e;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>    exception = null;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    try {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      this.admin.modifyColumnFamily(nonexistentTable, nonexistentHcd);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    } catch (IOException e) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      exception = e;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    exception = null;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    try {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      HTableDescriptor htd = new HTableDescriptor(nonexistentTable);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      htd.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      this.admin.modifyTable(htd.getTableName(), htd);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    } catch (IOException e) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      exception = e;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // Now make it so at least the table exists and then do tests against a<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    // nonexistent column family -- see if we get right exceptions.<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    final TableName tableName = TableName.valueOf(name.getMethodName() + System.currentTimeMillis());<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    htd.addFamily(new HColumnDescriptor("cf"));<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    this.admin.createTable(htd);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    try {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      exception = null;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      try {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        this.admin.deleteColumnFamily(htd.getTableName(), nonexistentHcd.getName());<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      } catch (IOException e) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        exception = e;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      assertTrue("found=" + exception.getClass().getName(),<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          exception instanceof InvalidFamilyOperationException);<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>      exception = null;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      try {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        this.admin.modifyColumnFamily(htd.getTableName(), nonexistentHcd);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      } catch (IOException e) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        exception = e;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      assertTrue("found=" + exception.getClass().getName(),<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          exception instanceof InvalidFamilyOperationException);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    } finally {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      this.admin.disableTable(tableName);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      this.admin.deleteTable(tableName);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>  @Test<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  public void testDisableAndEnableTable() throws IOException {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    final byte [] row = Bytes.toBytes("row");<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    final byte [] qualifier = Bytes.toBytes("qualifier");<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    final byte [] value = Bytes.toBytes("value");<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    final TableName table = TableName.valueOf(name.getMethodName());<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    Table ht = TEST_UTIL.createTable(table, HConstants.CATALOG_FAMILY);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    Put put = new Put(row);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    put.addColumn(HConstants.CATALOG_FAMILY, qualifier, value);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    ht.put(put);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    Get get = new Get(row);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    get.addColumn(HConstants.CATALOG_FAMILY, qualifier);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    ht.get(get);<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    this.admin.disableTable(ht.getName());<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    assertTrue("Table must be disabled.", TEST_UTIL.getHBaseCluster()<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        .getMaster().getTableStateManager().isTableState(<a name="line.255"></a>
-<span class="sourceLineNo">256</span>            ht.getName(), TableState.State.DISABLED));<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    assertEquals(TableState.State.DISABLED, getStateFromMeta(table));<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>    // Test that table is disabled<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    get = new Get(row);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    get.addColumn(HConstants.CATALOG_FAMILY, qualifier);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    boolean ok = false;<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    try {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      ht.get(get);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    } catch (TableNotEnabledException e) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      ok = true;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    ok = false;<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // verify that scan encounters correct exception<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    Scan scan = new Scan();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    try {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      ResultScanner scanner = ht.getScanner(scan);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      Result res = null;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      do {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        res = scanner.next();<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      } while (res != null);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    } catch (TableNotEnabledException e) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      ok = true;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    assertTrue(ok);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    this.admin.enableTable(table);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    assertTrue("Table must be enabled.", TEST_UTIL.getHBaseCluster()<a name="line.282"></a>
-<span class="sourceLineNo">283</span>        .getMaster().getTableStateManager().isTableState(<a name="line.283"></a>
-<span class="sourceLineNo">284</span>            ht.getName(), TableState.State.ENABLED));<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    assertEquals(TableState.State.ENABLED, getStateFromMeta(table));<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>    // Test that table is enabled<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      ht.get(get);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    } catch (RetriesExhaustedException e) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      ok = false;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    assertTrue(ok);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    ht.close();<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>  private TableState.State getStateFromMeta(TableName table) throws IOException {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    TableState state =<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        MetaTableAccessor.getTableState(TEST_UTIL.getConnection(), table);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    assertNotNull(state);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    return state.getState();<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>  @Test<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  public void testDisableAndEnableTables() throws IOException {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    final byte [] row = Bytes.toBytes("row");<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    final byte [] qualifier = Bytes.toBytes("qualifier");<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    final byte [] value = Bytes.toBytes("value");<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    final TableName table1 = TableName.valueOf(name.getMethodName() + "1");<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    final TableName table2 = TableName.valueOf(name.getMethodName() + "2");<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    Table ht1 = TEST_UTIL.createTable(table1, HConstants.CATALOG_FAMILY);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    Table ht2 = TEST_UTIL.createTable(table2, HConstants.CATALOG_FAMILY);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    Put put = new Put(row);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    put.addColumn(HConstants.CATALOG_FAMILY, qualifier, value);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    ht1.put(put);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    ht2.put(put);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    Get get = new Get(row);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    get.addColumn(HConstants.CATALOG_FAMILY, qualifier);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    ht1.get(get);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    ht2.get(get);<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>    this.admin.disableTables("testDisableAndEnableTable.*");<a name="line.322"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HConstants;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ServerName;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.TableName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.TableNotEnabledException;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.regionserver.HStoreFile;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.junit.After;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.AfterClass;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.Before;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.BeforeClass;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.ClassRule;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.Rule;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.Test;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.junit.experimental.categories.Category;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.junit.rules.TestName;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.slf4j.Logger;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.slf4j.LoggerFactory;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.MergeTableRegionsRequest;<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>/**<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * Class to test HBaseAdmin.<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * Spins up the minicluster once at test start and then takes it down afterward.<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * Add any testing of HBaseAdmin functionality here.<a name="line.77"></a>
+<span class="sourceLineNo">078</span> */<a name="line.78"></a>
+<span class="sourceLineNo">079</span>@Category({LargeTests.class, ClientTests.class})<a name="line.79"></a>
+<span class="sourceLineNo">080</span>public class TestAdmin1 {<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>  @ClassRule<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      HBaseClassTestRule.forClass(TestAdmin1.class);<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private static final Logger LOG = LoggerFactory.getLogger(TestAdmin1.class);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private Admin admin;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Rule<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public TestName name = new TestName();<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  @BeforeClass<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  public static void setUpBeforeClass() throws Exception {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    TEST_UTIL.getConfiguration().setInt("hbase.regionserver.msginterval", 100);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    TEST_UTIL.getConfiguration().setInt("hbase.client.pause", 250);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    TEST_UTIL.getConfiguration().setInt("hbase.client.retries.number", 6);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    TEST_UTIL.getConfiguration().setBoolean("hbase.master.enabletable.roundrobin", true);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    TEST_UTIL.startMiniCluster(3);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  @AfterClass<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  public static void tearDownAfterClass() throws Exception {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  }<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>  @Before<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public void setUp() throws Exception {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    this.admin = TEST_UTIL.getAdmin();<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  @After<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  public void tearDown() throws Exception {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    for (HTableDescriptor htd : this.admin.listTables()) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      TEST_UTIL.deleteTable(htd.getTableName());<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  @Test<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  public void testSplitFlushCompactUnknownTable() throws InterruptedException {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    final TableName unknowntable = TableName.valueOf(name.getMethodName());<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    Exception exception = null;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    try {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      this.admin.compact(unknowntable);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    } catch (IOException e) {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      exception = e;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    exception = null;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    try {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      this.admin.flush(unknowntable);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    } catch (IOException e) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      exception = e;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    }<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>    exception = null;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    try {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      this.admin.split(unknowntable);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    } catch (IOException e) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      exception = e;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>  @Test<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  public void testDeleteEditUnknownColumnFamilyAndOrTable() throws IOException {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    // Test we get exception if we try to<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    final TableName nonexistentTable = TableName.valueOf("nonexistent");<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    final byte[] nonexistentColumn = Bytes.toBytes("nonexistent");<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    HColumnDescriptor nonexistentHcd = new HColumnDescriptor(nonexistentColumn);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    Exception exception = null;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    try {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      this.admin.addColumnFamily(nonexistentTable, nonexistentHcd);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    } catch (IOException e) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      exception = e;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.159"></a>
+<span class="sourceLineNo">160</span><a name="line.160"></a>
+<span class="sourceLineNo">161</span>    exception = null;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    try {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      this.admin.deleteTable(nonexistentTable);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    } catch (IOException e) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      exception = e;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    exception = null;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    try {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      this.admin.deleteColumnFamily(nonexistentTable, nonexistentColumn);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    } catch (IOException e) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      exception = e;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>    exception = null;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    try {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      this.admin.disableTable(nonexistentTable);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    } catch (IOException e) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      exception = e;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>    exception = null;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    try {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      this.admin.enableTable(nonexistentTable);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    } catch (IOException e) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      exception = e;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>    exception = null;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    try {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      this.admin.modifyColumnFamily(nonexistentTable, nonexistentHcd);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    } catch (IOException e) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      exception = e;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    exception = null;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    try {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      HTableDescriptor htd = new HTableDescriptor(nonexistentTable);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      htd.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      this.admin.modifyTable(htd.getTableName(), htd);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    } catch (IOException e) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      exception = e;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    assertTrue(exception instanceof TableNotFoundException);<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>    // Now make it so at least the table exists and then do tests against a<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    // nonexistent column family -- see if we get right exceptions.<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    final TableName tableName = TableName.valueOf(name.getMethodName() + System.currentTimeMillis());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    htd.addFamily(new HColumnDescriptor("cf"));<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    this.admin.createTable(htd);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    try {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      exception = null;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      try {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        this.admin.deleteColumnFamily(htd.getTableName(), nonexistentHcd.getName());<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      } catch (IOException e) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        exception = e;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      }<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      assertTrue("found=" + exception.getClass().getName(),<a name="line.224"></a>
+<span class="sourceLineNo">225</span>          exception instanceof InvalidFamilyOperationException);<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>      exception = null;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      try {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        this.admin.modifyColumnFamily(htd.getTableName(), nonexistentHcd);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      } catch (IOException e) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        exception = e;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      assertTrue("found=" + exception.getClass().getName(),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          exception instanceof InvalidFamilyOperationException);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    } finally {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      this.admin.disableTable(tableName);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      this.admin.deleteTable(tableName);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  @Test<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  public void testDisableAndEnableTable() throws IOException {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    final byte [] row = Bytes.toBytes("row");<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    final byte [] qualifier = Bytes.toBytes("qualifier");<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    final byte [] value = Bytes.toBytes("value");<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    final TableName table = TableName.valueOf(name.getMethodName());<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    Table ht = TEST_UTIL.createTable(table, HConstants.CATALOG_FAMILY);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    Put put = new Put(row);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    put.addColumn(HConstants.CATALOG_FAMILY, qualifier, value);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    ht.put(put);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    Get get = new Get(row);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    get.addColumn(HConstants.CATALOG_FAMILY, qualifier);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    ht.get(get);<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span>    this.admin.disableTable(ht.getName());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    assertTrue("Table must be disabled.", TEST_UTIL.getHBaseCluster()<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        .getMaster().getTableStateManager().isTableState(<a name="line.257"></a>
+<span class="sourceLineNo">258</span>            ht.getName(), TableState.State.DISABLED));<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    assertEquals(TableState.State.DISABLED, getStateFromMeta(table));<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>    // Test that table is disabled<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    get = new Get(row);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    get.addColumn(HConstants.CATALOG_FAMILY, qualifier);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    boolean ok = false;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    try {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      ht.get(get);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    } catch (TableNotEnabledException e) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      ok = true;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    ok = false;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    // verify that scan encounters correct exception<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    Scan scan = new Scan();<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    try {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      ResultScanner scanner = ht.getScanner(scan);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      Result res = null;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      do {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        res = scanner.next();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      } while (res != null);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    } catch (TableNotEnabledException e) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      ok = true;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    assertTrue(ok);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    this.admin.enableTable(table);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    assertTrue("Table must be enabled.", TEST_UTIL.getHBaseCluster()<a name="line.284"></a>
+<span class="sourceLineNo">285</span>        .getMaster().getTableStateManager().isTableState(<a name="line.285"></a>
+<span class="sourceLineNo">286</span>            ht.getName(), TableState.State.ENABLED));<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    assertEquals(TableState.State.ENABLED, getStateFromMeta(table));<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    // Test that table is enabled<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    try {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      ht.get(get);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    } catch (RetriesExhaustedException e) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      ok = false;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    assertTrue(ok);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    ht.close();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  private TableState.State getStateFromMeta(TableName table) throws IOException {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    TableState state =<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        MetaTableAccessor.getTableState(TEST_UTIL.getConnection(), table);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    assertNotNull(state);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    return state.getState();<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  }<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  @Test<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  public void testDisableAndEnableTables() throws IOException {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    final byte [] row = Bytes.toBytes("row");<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    final byte [] qualifier = Bytes.toBytes("qualifier");<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    final byte [] value = Bytes.toBytes("value");<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    final TableName table1 = TableName.valueOf(name.getMethodName() + "1");<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    final TableName table2 = TableName.valueOf(name.getMethodName() + "2");<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    Table ht1 = TEST_UTIL.createTable(table1, HConstants.CATALOG_FAMILY);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    Table ht2 = TEST_UTIL.createTable(table2, HConstants.CATALOG_FAMILY);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    Put put = new Put(row);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    put.addColumn(HConstants.CATALOG_FAMILY, qualifier, value);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    ht1.put(put);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    ht2.put(put);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    Get get = new Get(row);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    get.addColumn(HConstants.CATALOG_FAMILY, qualifier);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    ht1.get(get);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    ht2.get(get);<a name="line.322"></a>
 <span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    // Test that tables are disabled<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    get = new Get(row);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    get.addColumn(HConstants.CATALOG_FAMILY, qualifier);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    boolean ok = false;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    try {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      ht1.get(get);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      ht2.get(get);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    } catch (org.apache.hadoop.hbase.DoNotRetryIOException e) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      ok = true;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>    assertEquals(TableState.State.DISABLED, getStateFromMeta(table1));<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    assertEquals(TableState.State.DISABLED, getStateFromMeta(table2));<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>    assertTrue(ok);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    this.admin.enableTables("testDisableAndEnableTable.*");<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span>    // Test that tables are enabled<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    try {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      ht1.get(get);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    } catch (IOException e) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      ok = false;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    try {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      ht2.get(get);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    } catch (IOException e) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      ok = false;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    assertTrue(ok);<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span>    ht1.close();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    ht2.close();<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>    assertEquals(TableState.State.ENABLED, getStateFromMeta(table1));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    assertEquals(TableState.State.ENABLED, getStateFromMeta(table2));<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  }<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span>  @Test<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  public void testCreateTable() throws IOException {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    HTableDescriptor [] tables = admin.listTables();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    int numTables = tables.length;<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    TEST_UTIL.createTable(tableName, HConstants.CATALOG_FAMILY).close();<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    tables = this.admin.listTables();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    assertEquals(numTables + 1, tables.length);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    assertTrue("Table must be enabled.",<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        TEST_UTIL.getHBaseCluster().getMaster().getTableStateManager()<a name="line.371"></a>
-<span class="sourceLineNo">372</span>            .isTableState(tableName, TableState.State.ENABLED));<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    assertEquals(TableState.State.ENABLED, getStateFromMeta(tableName));<a name="line.373"></a>
-<span class="sourceLineNo">374</span>  }<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  @Test<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  public void testTruncateTable() throws IOException {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    testTruncateTable(TableName.valueOf(name.getMethodName()), false);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  @Test<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  public void testTruncateTablePreservingSplits() throws IOException {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    testTruncateTable(TableName.valueOf(name.getMethodName()), true);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  }<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span>  private void testTruncateTable(final TableName tableName, boolean preserveSplits)<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      throws IOException {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    byte[][] splitKeys = new byte[2][];<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    splitKeys[0] = Bytes.toBytes(4);<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    splitKeys[1] = Bytes.toBytes(8);<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>    // Create &amp; Fill the table<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    Table table = TEST_UTIL.createTable(tableName, HConstants.CATALOG_FAMILY, splitKeys);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    try {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      TEST_UTIL.loadNumericRows(table, HConstants.CATALOG_FAMILY, 0, 10);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      assertEquals(10, TEST_UTIL.countRows(table));<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    } finally {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      table.close();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    assertEquals(3, TEST_UTIL.getHBaseCluster().getRegions(tableName).size());<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>    // Truncate &amp; Verify<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    this.admin.disableTable(tableName);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    this.admin.truncateTable(tableName, preserveSplits);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    table = TEST_UTIL.getConnection().getTable(tableName);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    try {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      assertEquals(0, TEST_UTIL.countRows(table));<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    } finally {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      table.close();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    if (preserveSplits) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      assertEquals(3, TEST_UTIL.getHBaseCluster().getRegions(tableName).size());<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    } else {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      assertEquals(1, TEST_UTIL.getHBaseCluster().getRegions(tableName).size());<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    }<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  }<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  @Test<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  public void testGetTableDescriptor() throws IOException {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    HColumnDescriptor fam1 = new HColumnDescriptor("fam1");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    HColumnDescriptor fam2 = new HColumnDescriptor("fam2");<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    HColumnDescriptor fam3 = new HColumnDescriptor("fam3");<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(name.getMethodName()));<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    htd.addFamily(fam1);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    htd.addFamily(fam2);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    htd.addFamily(fam3);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    this.admin.createTable(htd);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    Table table = TEST_UTIL.getConnection().getTable(htd.getTableName());<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    TableDescriptor confirmedHtd = table.getDescriptor();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    assertEquals(0, TableDescriptor.COMPARATOR.compare(htd, confirmedHtd));<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    MetaTableAccessor.fullScanMetaAndPrint(TEST_UTIL.getConnection());<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    table.close();<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>  @Test<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  public void testCompactionTimestamps() throws Exception {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    HColumnDescriptor fam1 = new HColumnDescriptor("fam1");<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    htd.addFamily(fam1);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    this.admin.createTable(htd);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    Table table = TEST_UTIL.getConnection().getTable(htd.getTableName());<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    long ts = this.admin.getLastMajorCompactionTimestamp(tableName);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    assertEquals(0, ts);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    Put p = new Put(Bytes.toBytes("row1"));<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    p.addColumn(Bytes.toBytes("fam1"), Bytes.toBytes("fam1"), Bytes.toBytes("fam1"));<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    table.put(p);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    ts = this.admin.getLastMajorCompactionTimestamp(tableName);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    // no files written -&gt; no data<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    assertEquals(0, ts);<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span>    this.admin.flush(tableName);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    ts = this.admin.getLastMajorCompactionTimestamp(tableName);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    // still 0, we flushed a file, but no major compaction happened<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    assertEquals(0, ts);<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    byte[] regionName;<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    try (RegionLocator l = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      regionName = l.getAllRegionLocations().get(0).getRegionInfo().getRegionName();<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    }<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    long ts1 = this.admin.getLastMajorCompactionTimestampForRegion(regionName);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    assertEquals(ts, ts1);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    p = new Put(Bytes.toBytes("row2"));<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    p.addColumn(Bytes.toBytes("fam1"), Bytes.toBytes("fam1"), Bytes.toBytes("fam1"));<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    table.put(p);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    this.admin.flush(tableName);<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    ts = this.admin.getLastMajorCompactionTimestamp(tableName);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    // make sure the region API returns the same value, as the old file is still around<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    assertEquals(ts1, ts);<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>    TEST_UTIL.compact(tableName, true);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    table.put(p);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    // forces a wait for the compaction<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    this.admin.flush(tableName);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    ts = this.admin.getLastMajorCompactionTimestamp(tableName);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    // after a compaction our earliest timestamp will have progressed forward<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    assertTrue(ts &gt; ts1);<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // region api still the same<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    ts1 = this.admin.getLastMajorCompactionTimestampForRegion(regionName);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    assertEquals(ts, ts1);<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    table.put(p);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    this.admin.flush(tableName);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    ts = this.admin.getLastMajorCompactionTimestamp(tableName);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    assertEquals(ts, ts1);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    table.close();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>  @Test<a name="line.489"></a>
-<span class="sourceLineNo">490</span>  public void testHColumnValidName() {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>       boolean exceptionThrown;<a name="line.491"></a>
-<span class="sourceLineNo">492</span>       try {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>         new HColumnDescriptor("\\test\\abc");<a name="line.493"></a>
-<span class="sourceLineNo">494</span>       } catch(IllegalArgumentException iae) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>           exceptionThrown = true;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>           assertTrue(exceptionThrown);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>       }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   }<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>  /**<a name="line.500"></a>
-<span class="sourceLineNo">501</span>   * Verify schema modification takes.<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * @throws IOException<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   * @throws InterruptedException<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   */<a name="line.504"></a>
-<span class="sourceLineNo">505</span>  @Test<a name="line.505"></a>
-<span class="sourceLineNo">506</span>  public void testOnlineChangeTableSchema() throws IOException, InterruptedException {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    HTableDescriptor [] tables = admin.listTables();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    int numTables = tables.length;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    TEST_UTIL.createTable(tableName, HConstants.CATALOG_FAMILY).close();<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    tables = this.admin.listTables();<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    assertEquals(numTables + 1, tables.length);<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // FIRST, do htabledescriptor changes.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    HTableDescriptor htd = this.admin.getTableDescriptor(tableName);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    // Make a copy and assert copy is good.<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    HTableDescriptor copy = new HTableDescriptor(htd);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    assertTrue(htd.equals(copy));<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    // Now amend the copy. Introduce differences.<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    long newFlushSize = htd.getMemStoreFlushSize() / 2;<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    if (newFlushSize &lt;=0) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      newFlushSize = HTableDescriptor.DEFAULT_MEMSTORE_FLUSH_SIZE / 2;<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    copy.setMemStoreFlushSize(newFlushSize);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    final String key = "anyoldkey";<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    assertTrue(htd.getValue(key) == null);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    copy.setValue(key, key);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    boolean expectedException = false;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    try {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      admin.modifyTable(tableName, copy);<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    } catch (TableNotDisabledException re) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      expectedException = true;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    assertFalse(expectedException);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    HTableDescriptor modifiedHtd = new HTableDescriptor(this.admin.getTableDescriptor(tableName));<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    assertFalse(htd.equals(modifiedHtd));<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    assertTrue(copy.equals(modifiedHtd));<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    assertEquals(newFlushSize, modifiedHtd.getMemStoreFlushSize());<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    assertEquals(key, modifiedHtd.getValue(key));<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span>    // Now work on column family changes.<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    int countOfFamilies = modifiedHtd.getFamilies().size();<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    assertTrue(countOfFamilies &gt; 0);<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    HColumnDescriptor hcd = modifiedHtd.getFamilies().iterator().next();<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    int maxversions = hcd.getMaxVersions();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    final int newMaxVersions = maxversions + 1;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    hcd.setMaxVersions(newMaxVersions);<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    final byte [] hcdName = hcd.getName();<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    expectedException = false;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    try {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      this.admin.modifyColumnFamily(tableName, hcd);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    } catch (TableNotDisabledException re) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      expectedException = true;<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    assertFalse(expectedException);<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    modifiedHtd = this.admin.getTableDescriptor(tableName);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    HColumnDescriptor modifiedHcd = modifiedHtd.getFamily(hcdName);<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    assertEquals(newMaxVersions, modifiedHcd.getMaxVersions());<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    // Try adding a column<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    assertFalse(this.admin.isTableDisabled(tableName));<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    final String xtracolName = "xtracol";<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    HColumnDescriptor xtracol = new HColumnDescriptor(xtracolName);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    xtracol.setValue(xtracolName, xtracolName);<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    expectedException = false;<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    try {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      this.admin.addColumnFamily(tableName, xtracol);<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    } catch (TableNotDisabledException re) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      expectedException = true;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    // Add column should work even if the table is enabled<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    assertFalse(expectedException);<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    modifiedHtd = this.admin.getTableDescriptor(tableName);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    hcd = modifiedHtd.getFamily(xtracol.getName());<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    assertTrue(hcd != null);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    assertTrue(hcd.getValue(xtracolName).equals(xtracolName));<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>    // Delete the just-added column.<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    this.admin.deleteColumnFamily(tableName, xtracol.getName());<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    modifiedHtd = this.admin.getTableDescriptor(tableName);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    hcd = modifiedHtd.getFamily(xtracol.getName());<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    assertTrue(hcd == null);<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>    // Delete the table<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    this.admin.disableTable(tableName);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    this.admin.deleteTable(tableName);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    this.admin.listTables();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    assertFalse(this.admin.tableExists(tableName));<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>  protected void verifyRoundRobinDistribution(ClusterConnection c, RegionLocator regionLocator, int<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      expectedRegions) throws IOException {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    int numRS = c.getCurrentNrHRS();<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    List&lt;HRegionLocation&gt; regions = regionLocator.getAllRegionLocations();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>    Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; server2Regions = new HashMap&lt;&gt;();<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    for (HRegionLocation loc : regions) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      ServerName server = loc.getServerName();<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      List&lt;RegionInfo&gt; regs = server2Regions.get(server);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      if (regs == null) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>        regs = new ArrayList&lt;&gt;();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>        server2Regions.put(server, regs);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      }<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      regs.add(loc.getRegionInfo());<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    boolean tablesOnMaster = LoadBalancer.isTablesOnMaster(TEST_UTIL.getConfiguration());<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    if (tablesOnMaster) {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      // Ignore the master region server,<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      // which contains less regions by intention.<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      numRS--;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    float average = (float) expectedRegions/numRS;<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    int min = (int)Math.floor(average);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    int max = (int)Math.ceil(average);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    for (List&lt;RegionInfo&gt; regionList : server2Regions.values()) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      assertTrue("numRS=" + numRS + ", min=" + min + ", max=" + max +<a name="line.615"></a>
-<span class="sourceLineNo">616</span>        ", size=" + regionList.size() + ", tablesOnMaster=" + tablesOnMaster,<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      regionList.size() == min || regionList.size() == max);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    }<a name="line.618"></a>
-<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>  @Test<a name="line.621"></a>
-<span class="sourceLineNo">622</span>  public void testCreateTableNumberOfRegions() throws IOException, InterruptedException {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    HTableDescriptor desc = new HTableDescriptor(tableName);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    desc.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    admin.createTable(desc);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    List&lt;HRegionLocation&gt; regions;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    try (RegionLocator l = TEST_UTIL.getConnection().getRegionLocator(tableName)) {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      regions = l.getAllRegionLocations();<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      assertEquals("Table should have only 1 region", 1, regions.size());<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    }<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>    TableName TABLE_2 = TableName.valueOf(tableName.getNameAsString() + "_2");<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    desc = new HTableDescriptor(TABLE_2);<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    desc.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    admin.createTable(desc, new byte[][]{new byte[]{42}});<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    try (RegionLocator l = TEST_UTIL.getConnection().getRegionLocator(TABLE_2)) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      regions = l.getAllRegionLocations();<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      assertEquals("Table should have only 2 region", 2, regions.size());<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>    TableName TABLE_3 = TableName.valueOf(tableName.getNameAsString() + "_3");<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    desc = new HTableDescriptor(TABLE_3);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    desc.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    admin.createTable(desc, "a".getBytes(), "z".getBytes(), 3);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    try (RegionLocator l = TEST_UTIL.getConnection().getRegionLocator(TABLE_3)) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      regions = l.getAllRegionLocations();<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      assertEquals("Table should have only 3 region", 3, regions.size());<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>    TableName TABLE_4 = TableName.valueOf(tableName.getNameAsString() + "_4");<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    desc = new HTableDescriptor(TABLE_4);<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    desc.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    try {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      admin.createTable(desc, "a".getBytes(), "z".getBytes(), 2);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      fail("Should not be able to create a table with only 2 regions using this API.");<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    } catch (IllegalArgumentException eae) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    // Expected<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    }<a name="line.659"></a>
-<span class="sourceLineNo">660</sp

<TRUNCATED>

[24/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 2770027..04d2890 100644
--- a/book.html
+++ b/book.html
@@ -890,8 +890,8 @@ This step is offered for testing and learning purposes only.
 You can start up to 9 backup HMaster servers, which makes 10 total HMasters, counting the primary.
 To start a backup HMaster, use the <code>local-master-backup.sh</code>.
 For each backup master you want to start, add a parameter representing the port offset for that master.
-Each HMaster uses three ports (16010, 16020, and 16030 by default). The port offset is added to these ports, so using an offset of 2, the backup HMaster would use ports 16012, 16022, and 16032.
-The following command starts 3 backup servers using ports 16012/16022/16032, 16013/16023/16033, and 16015/16025/16035.</p>
+Each HMaster uses two ports (16000 and 16010 by default). The port offset is added to these ports, so using an offset of 2, the backup HMaster would use ports 16002 and 16012.
+The following command starts 3 backup servers using ports 16002/16012, 16003/16013, and 16005/16015.</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -920,7 +920,7 @@ The <code>local-regionservers.sh</code> command allows you to run multiple Regio
 It works in a similar way to the <code>local-master-backup.sh</code> command, in that each parameter you provide represents the port offset for an instance.
 Each RegionServer requires two ports, and the default ports are 16020 and 16030.
 Since HBase version 1.1.0, HMaster doesn&#8217;t use region server ports, this leaves 10 ports (16020 to 16029 and 16030 to 16039) to be used for RegionServers.
-For supporting additional RegionServers, base ports can be changed in script 'local-regionservers.sh' to appropriate value.
+For supporting additional RegionServers, set environment variables HBASE_RS_BASE_PORT and HBASE_RS_INFO_BASE_PORT to appropriate values before running script <code>local-regionservers.sh</code>.
 e.g. With values 16200 and 16300 for base ports, 99 additional RegionServers can be supported, on a server.
 The following command starts four additional RegionServers, running on sequential ports starting at 16022/16032 (base ports 16020/16030 plus 2).</p>
 </div>
@@ -6881,12 +6881,6 @@ Quitting...</code></pre>
 <p>Please consult the documentation published specifically for the version of HBase that you are upgrading to for details on the upgrade process.</p>
 </div>
 </div>
-<div class="sect2">
-<h3 id="upgrade2.0"><a class="anchor" href="#upgrade2.0"></a>13.4. Upgrading to 2.x</h3>
-<div class="paragraph">
-<p>Coming soon&#8230;&#8203;</p>
-</div>
-</div>
 </div>
 </div>
 <h1 id="shell" class="sect0"><a class="anchor" href="#shell"></a>The Apache HBase Shell</h1>
@@ -15943,9 +15937,21 @@ These parameters will be explained in context, and then will be given in a table
 <h6 id="compaction.being.stuck"><a class="anchor" href="#compaction.being.stuck"></a>Being Stuck</h6>
 <div class="paragraph">
 <p>When the MemStore gets too large, it needs to flush its contents to a StoreFile.
-However, a Store can only have <code>hbase.hstore.blockingStoreFiles</code> files, so the MemStore needs to wait for the number of StoreFiles to be reduced by one or more compactions.
-However, if the MemStore grows larger than <code>hbase.hregion.memstore.flush.size</code>, it is not able to flush its contents to a StoreFile.
-If the MemStore is too large and the number of StoreFiles is also too high, the algorithm is said to be "stuck". The compaction algorithm checks for this "stuck" situation and provides mechanisms to alleviate it.</p>
+However, Stores are configured with a bound on the number StoreFiles,
+<code>hbase.hstore.blockingStoreFiles</code>, and if in excess, the MemStore flush must wait
+until the StoreFile count is reduced by one or more compactions. If the MemStore
+is too large and the number of StoreFiles is also too high, the algorithm is said
+to be "stuck". By default we&#8217;ll wait on compactions up to
+<code>hbase.hstore.blockingWaitTime</code> milliseconds. If this period expires, we&#8217;ll flush
+anyways even though we are in excess of the
+<code>hbase.hstore.blockingStoreFiles</code> count.</p>
+</div>
+<div class="paragraph">
+<p>Upping the <code>hbase.hstore.blockingStoreFiles</code> count will allow flushes to happen
+but a Store with many StoreFiles in will likely have higher read latencies. Try to
+figure why Compactions are not keeping up. Is it a write spurt that is bringing
+about this situation or is a regular occurance and the cluster is under-provisioned
+for the volume of writes?</p>
 </div>
 </div>
 <div class="sect5">
@@ -32662,9 +32668,6 @@ Starting the mini-cluster takes about 20-30 seconds, but that should be appropri
 </table>
 </div>
 <div class="paragraph">
-<p>To use an HBase mini-cluster on Microsoft Windows, you need to use a Cygwin environment.</p>
-</div>
-<div class="paragraph">
 <p>See the paper at <a href="http://blog.sematext.com/2010/08/30/hbase-case-study-using-hbasetestingutility-for-local-testing-development/">HBase Case-Study: Using HBaseTestingUtility for Local Testing and
                 Development</a> (2010) for more information about HBaseTestingUtility.</p>
 </div>
@@ -37001,7 +37004,7 @@ The server will return cellblocks compressed using this same compressor as long
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-03-27 14:29:58 UTC
+Last updated 2018-03-28 14:29:55 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index f4df371..a1f7dab 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -178,9 +178,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -299,7 +296,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 


[25/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 2c0540e..ec799a6 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,16 +5,16 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20180327144547+00'00')
-/CreationDate (D:20180327144547+00'00')
+/ModDate (D:20180328144700+00'00')
+/CreationDate (D:20180328144700+00'00')
 >>
 endobj
 2 0 obj
 << /Type /Catalog
 /Pages 3 0 R
 /Names 26 0 R
-/Outlines 4515 0 R
-/PageLabels 4738 0 R
+/Outlines 4514 0 R
+/PageLabels 4737 0 R
 /PageMode /UseOutlines
 /OpenAction [7 0 R /FitH 842.89]
 /ViewerPreferences << /DisplayDocTitle true
@@ -24,7 +24,7 @@ endobj
 3 0 obj
 << /Type /Pages
 /Count 705
-/Kids [7 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R 22 0 R 24 0 R 44 0 R 47 0 R 50 0 R 54 0 R 61 0 R 65 0 R 67 0 R 69 0 R 76 0 R 79 0 R 81 0 R 87 0 R 90 0 R 92 0 R 94 0 R 101 0 R 107 0 R 112 0 R 114 0 R 130 0 R 135 0 R 142 0 R 151 0 R 159 0 R 168 0 R 179 0 R 183 0 R 185 0 R 189 0 R 198 0 R 207 0 R 215 0 R 224 0 R 229 0 R 238 0 R 246 0 R 255 0 R 268 0 R 275 0 R 285 0 R 293 0 R 301 0 R 308 0 R 316 0 R 322 0 R 328 0 R 335 0 R 343 0 R 354 0 R 363 0 R 375 0 R 383 0 R 391 0 R 398 0 R 407 0 R 415 0 R 425 0 R 433 0 R 440 0 R 449 0 R 461 0 R 470 0 R 477 0 R 485 0 R 493 0 R 502 0 R 509 0 R 514 0 R 518 0 R 523 0 R 527 0 R 543 0 R 554 0 R 558 0 R 573 0 R 578 0 R 583 0 R 585 0 R 587 0 R 590 0 R 592 0 R 594 0 R 602 0 R 608 0 R 613 0 R 618 0 R 625 0 R 635 0 R 643 0 R 647 0 R 651 0 R 653 0 R 664 0 R 676 0 R 686 0 R 698 0 R 708 0 R 716 0 R 721 0 R 727 0 R 730 0 R 734 0 R 738 0 R 741 0 R 744 0 R 746 0 R 749 0 R 754 0 R 756 0 R 761 0 R 765 0 R 770 0 R 774 0 R 777 0 R 783 0 R 785 0 R 790 0 R 798 0 R 800 0 
 R 803 0 R 806 0 R 810 0 R 813 0 R 828 0 R 835 0 R 844 0 R 855 0 R 861 0 R 871 0 R 882 0 R 885 0 R 889 0 R 892 0 R 897 0 R 906 0 R 914 0 R 918 0 R 922 0 R 927 0 R 931 0 R 933 0 R 948 0 R 959 0 R 964 0 R 970 0 R 973 0 R 981 0 R 990 0 R 995 0 R 1000 0 R 1005 0 R 1007 0 R 1009 0 R 1011 0 R 1021 0 R 1029 0 R 1033 0 R 1040 0 R 1047 0 R 1055 0 R 1059 0 R 1065 0 R 1070 0 R 1078 0 R 1082 0 R 1087 0 R 1089 0 R 1095 0 R 1102 0 R 1104 0 R 1111 0 R 1122 0 R 1126 0 R 1128 0 R 1130 0 R 1134 0 R 1137 0 R 1142 0 R 1145 0 R 1157 0 R 1161 0 R 1167 0 R 1175 0 R 1180 0 R 1184 0 R 1188 0 R 1190 0 R 1193 0 R 1196 0 R 1199 0 R 1203 0 R 1207 0 R 1211 0 R 1216 0 R 1220 0 R 1223 0 R 1225 0 R 1235 0 R 1238 0 R 1246 0 R 1255 0 R 1261 0 R 1265 0 R 1267 0 R 1277 0 R 1280 0 R 1286 0 R 1295 0 R 1298 0 R 1305 0 R 1313 0 R 1315 0 R 1317 0 R 1326 0 R 1328 0 R 1330 0 R 1333 0 R 1335 0 R 1337 0 R 1339 0 R 1341 0 R 1344 0 R 1348 0 R 1353 0 R 1355 0 R 1357 0 R 1359 0 R 1364 0 R 1372 0 R 1377 0 R 1380 0 R 1382 0 R 1385 0 R
  1389 0 R 1393 0 R 1396 0 R 1398 0 R 1400 0 R 1403 0 R 1409 0 R 1414 0 R 1422 0 R 1436 0 R 1450 0 R 1454 0 R 1459 0 R 1472 0 R 1477 0 R 1492 0 R 1500 0 R 1504 0 R 1512 0 R 1527 0 R 1541 0 R 1553 0 R 1558 0 R 1564 0 R 1573 0 R 1579 0 R 1584 0 R 1592 0 R 1595 0 R 1605 0 R 1611 0 R 1614 0 R 1627 0 R 1629 0 R 1635 0 R 1639 0 R 1641 0 R 1649 0 R 1657 0 R 1661 0 R 1663 0 R 1665 0 R 1677 0 R 1683 0 R 1692 0 R 1698 0 R 1712 0 R 1717 0 R 1726 0 R 1734 0 R 1740 0 R 1747 0 R 1752 0 R 1755 0 R 1757 0 R 1763 0 R 1767 0 R 1773 0 R 1777 0 R 1785 0 R 1791 0 R 1796 0 R 1801 0 R 1803 0 R 1811 0 R 1818 0 R 1824 0 R 1829 0 R 1833 0 R 1836 0 R 1841 0 R 1847 0 R 1855 0 R 1857 0 R 1859 0 R 1862 0 R 1870 0 R 1873 0 R 1880 0 R 1889 0 R 1892 0 R 1897 0 R 1899 0 R 1902 0 R 1905 0 R 1908 0 R 1919 0 R 1924 0 R 1929 0 R 1931 0 R 1940 0 R 1947 0 R 1955 0 R 1961 0 R 1966 0 R 1968 0 R 1977 0 R 1986 0 R 1997 0 R 2003 0 R 2010 0 R 2012 0 R 2017 0 R 2019 0 R 2021 0 R 2024 0 R 2027 0 R 2030 0 R 2035 0 R 2039 0 R 2050 0
  R 2053 0 R 2058 0 R 2061 0 R 2063 0 R 2068 0 R 2078 0 R 2080 0 R 2082 0 R 2084 0 R 2086 0 R 2089 0 R 2091 0 R 2093 0 R 2096 0 R 2098 0 R 2100 0 R 2104 0 R 2109 0 R 2118 0 R 2120 0 R 2122 0 R 2129 0 R 2131 0 R 2136 0 R 2138 0 R 2140 0 R 2147 0 R 2152 0 R 2156 0 R 2160 0 R 2164 0 R 2166 0 R 2168 0 R 2172 0 R 2175 0 R 2177 0 R 2179 0 R 2183 0 R 2185 0 R 2188 0 R 2190 0 R 2192 0 R 2194 0 R 2201 0 R 2204 0 R 2209 0 R 2211 0 R 2213 0 R 2215 0 R 2217 0 R 2225 0 R 2236 0 R 2250 0 R 2261 0 R 2265 0 R 2271 0 R 2275 0 R 2278 0 R 2283 0 R 2288 0 R 2290 0 R 2293 0 R 2295 0 R 2297 0 R 2299 0 R 2304 0 R 2306 0 R 2319 0 R 2322 0 R 2330 0 R 2336 0 R 2348 0 R 2362 0 R 2375 0 R 2392 0 R 2396 0 R 2398 0 R 2402 0 R 2420 0 R 2427 0 R 2439 0 R 2443 0 R 2447 0 R 2456 0 R 2468 0 R 2473 0 R 2483 0 R 2496 0 R 2516 0 R 2525 0 R 2528 0 R 2537 0 R 2554 0 R 2561 0 R 2564 0 R 2569 0 R 2573 0 R 2576 0 R 2585 0 R 2594 0 R 2597 0 R 2599 0 R 2603 0 R 2618 0 R 2626 0 R 2631 0 R 2636 0 R 2639 0 R 2641 0 R 2643 0 R 2645
  0 R 2650 0 R 2663 0 R 2673 0 R 2681 0 R 2687 0 R 2693 0 R 2703 0 R 2710 0 R 2716 0 R 2718 0 R 2727 0 R 2735 0 R 2744 0 R 2749 0 R 2757 0 R 2761 0 R 2771 0 R 2779 0 R 2787 0 R 2792 0 R 2796 0 R 2800 0 R 2802 0 R 2808 0 R 2812 0 R 2816 0 R 2822 0 R 2828 0 R 2831 0 R 2837 0 R 2841 0 R 2851 0 R 2856 0 R 2861 0 R 2870 0 R 2876 0 R 2884 0 R 2886 0 R 2891 0 R 2897 0 R 2901 0 R 2905 0 R 2914 0 R 2921 0 R 2923 0 R 2927 0 R 2934 0 R 2937 0 R 2947 0 R 2953 0 R 2962 0 R 2965 0 R 2975 0 R 2980 0 R 2984 0 R 2992 0 R 2997 0 R 3001 0 R 3003 0 R 3014 0 R 3019 0 R 3022 0 R 3024 0 R 3026 0 R 3036 0 R 3043 0 R 3047 0 R 3050 0 R 3057 0 R 3060 0 R 3063 0 R 3066 0 R 3073 0 R 3078 0 R 3084 0 R 3088 0 R 3091 0 R 3094 0 R 3096 0 R 3100 0 R 3111 0 R 3113 0 R 3117 0 R 3120 0 R 3124 0 R 3127 0 R 3131 0 R 3133 0 R 3146 0 R 3151 0 R 3156 0 R 3163 0 R 3172 0 R 3174 0 R 3182 0 R 3200 0 R 3212 0 R 3218 0 R 3234 0 R 3237 0 R 3242 0 R 3244 0 R 3253 0 R 3258 0 R 3261 0 R 3263 0 R 3265 0 R 3267 0 R 3270 0 R 3287 0 R 32
 90 0 R 3296 0 R 3302 0 R 3311 0 R 3317 0 R 3327 0 R 3338 0 R 3345 0 R 3354 0 R 3359 0 R 3362 0 R 3370 0 R 3374 0 R 3379 0 R 3384 0 R 3397 0 R 3400 0 R 3406 0 R 3411 0 R 3420 0 R 3429 0 R 3435 0 R 3448 0 R 3454 0 R 3458 0 R 3466 0 R 3470 0 R 3475 0 R 3477 0 R 3483 0 R 3490 0 R 3492 0 R 3499 0 R 3501 0 R 3509 0 R 3516 0 R 3522 0 R 3529 0 R 3539 0 R 3546 0 R 3558 0 R 3565 0 R 3578 0 R 3585 0 R 3587 0 R 3592 0 R 3605 0 R 3610 0 R 3616 0 R 3620 0 R 3623 0 R 3628 0 R 3630 0 R 3634 0 R 3636 0 R 3640 0 R 3643 0 R 3646 0 R 3654 0 R 3656 0 R 3660 0 R 3663 0 R 3670 0 R 3676 0 R 3680 0 R 3683 0 R 3685 0 R 3689 0 R 3694 0 R 3699 0 R 3702 0 R 3715 0 R 3720 0 R 3724 0 R 3727 0 R 3735 0 R 3739 0 R 3747 0 R 3752 0 R 3754 0 R 3760 0 R 3762 0 R 3767 0 R 3771 0 R 3776 0 R 3780 0 R 3794 0 R 3810 0 R 3825 0 R 3830 0 R 3833 0 R 3836 0 R 3842 0 R 3847 0 R 3849 0 R 3851 0 R 3853 0 R 3855 0 R 3857 0 R 3866 0 R 3870 0 R 3874 0 R 3878 0 R 3880 0 R 3887 0 R 3897 0 R 3904 0 R 3907 0 R 3910 0 R 3912 0 R 3919 0 R 
 3926 0 R 3936 0 R 3940 0 R 3943 0 R 3947 0 R 3950 0 R 3955 0 R 3958 0 R 3974 0 R 3978 0 R 4001 0 R 4005 0 R 4012 0 R 4023 0 R 4032 0 R 4034 0 R 4037 0 R 4040 0 R 4056 0 R 4062 0 R 4069 0 R]
+/Kids [7 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R 22 0 R 24 0 R 44 0 R 47 0 R 50 0 R 54 0 R 61 0 R 65 0 R 67 0 R 69 0 R 76 0 R 79 0 R 81 0 R 87 0 R 90 0 R 92 0 R 94 0 R 101 0 R 107 0 R 112 0 R 114 0 R 130 0 R 135 0 R 142 0 R 151 0 R 159 0 R 168 0 R 179 0 R 183 0 R 185 0 R 189 0 R 198 0 R 207 0 R 215 0 R 224 0 R 229 0 R 238 0 R 246 0 R 255 0 R 268 0 R 275 0 R 285 0 R 293 0 R 301 0 R 308 0 R 316 0 R 322 0 R 328 0 R 335 0 R 343 0 R 354 0 R 363 0 R 375 0 R 383 0 R 391 0 R 398 0 R 407 0 R 415 0 R 425 0 R 433 0 R 440 0 R 449 0 R 461 0 R 470 0 R 477 0 R 485 0 R 493 0 R 502 0 R 509 0 R 514 0 R 518 0 R 523 0 R 527 0 R 543 0 R 554 0 R 558 0 R 573 0 R 578 0 R 583 0 R 585 0 R 587 0 R 590 0 R 592 0 R 594 0 R 602 0 R 608 0 R 613 0 R 618 0 R 625 0 R 635 0 R 643 0 R 647 0 R 651 0 R 653 0 R 664 0 R 676 0 R 686 0 R 698 0 R 708 0 R 716 0 R 720 0 R 726 0 R 729 0 R 733 0 R 737 0 R 740 0 R 743 0 R 745 0 R 748 0 R 753 0 R 755 0 R 760 0 R 764 0 R 769 0 R 773 0 R 776 0 R 782 0 R 784 0 R 789 0 R 797 0 R 799 0 
 R 802 0 R 805 0 R 809 0 R 812 0 R 827 0 R 834 0 R 843 0 R 854 0 R 860 0 R 870 0 R 881 0 R 884 0 R 888 0 R 891 0 R 896 0 R 905 0 R 913 0 R 917 0 R 921 0 R 926 0 R 930 0 R 932 0 R 947 0 R 958 0 R 963 0 R 969 0 R 972 0 R 980 0 R 988 0 R 993 0 R 999 0 R 1004 0 R 1006 0 R 1008 0 R 1010 0 R 1020 0 R 1028 0 R 1032 0 R 1039 0 R 1046 0 R 1054 0 R 1058 0 R 1064 0 R 1069 0 R 1077 0 R 1081 0 R 1086 0 R 1088 0 R 1094 0 R 1101 0 R 1103 0 R 1110 0 R 1121 0 R 1125 0 R 1127 0 R 1129 0 R 1133 0 R 1136 0 R 1141 0 R 1144 0 R 1156 0 R 1160 0 R 1166 0 R 1174 0 R 1179 0 R 1183 0 R 1187 0 R 1189 0 R 1192 0 R 1195 0 R 1198 0 R 1202 0 R 1206 0 R 1210 0 R 1215 0 R 1219 0 R 1222 0 R 1224 0 R 1234 0 R 1237 0 R 1245 0 R 1254 0 R 1260 0 R 1264 0 R 1266 0 R 1276 0 R 1279 0 R 1285 0 R 1294 0 R 1297 0 R 1304 0 R 1312 0 R 1314 0 R 1316 0 R 1325 0 R 1327 0 R 1329 0 R 1332 0 R 1334 0 R 1336 0 R 1338 0 R 1340 0 R 1343 0 R 1347 0 R 1352 0 R 1354 0 R 1356 0 R 1358 0 R 1363 0 R 1371 0 R 1376 0 R 1379 0 R 1381 0 R 1384 0 R 
 1388 0 R 1392 0 R 1395 0 R 1397 0 R 1399 0 R 1402 0 R 1408 0 R 1413 0 R 1421 0 R 1435 0 R 1449 0 R 1453 0 R 1458 0 R 1471 0 R 1476 0 R 1491 0 R 1499 0 R 1503 0 R 1511 0 R 1526 0 R 1540 0 R 1552 0 R 1557 0 R 1563 0 R 1572 0 R 1578 0 R 1583 0 R 1591 0 R 1594 0 R 1604 0 R 1610 0 R 1613 0 R 1626 0 R 1628 0 R 1634 0 R 1638 0 R 1640 0 R 1648 0 R 1656 0 R 1660 0 R 1662 0 R 1664 0 R 1676 0 R 1682 0 R 1691 0 R 1697 0 R 1711 0 R 1716 0 R 1725 0 R 1733 0 R 1739 0 R 1744 0 R 1750 0 R 1753 0 R 1756 0 R 1761 0 R 1765 0 R 1772 0 R 1776 0 R 1781 0 R 1790 0 R 1795 0 R 1800 0 R 1802 0 R 1810 0 R 1817 0 R 1823 0 R 1828 0 R 1832 0 R 1835 0 R 1840 0 R 1845 0 R 1853 0 R 1855 0 R 1857 0 R 1860 0 R 1868 0 R 1871 0 R 1878 0 R 1887 0 R 1890 0 R 1895 0 R 1897 0 R 1900 0 R 1903 0 R 1906 0 R 1917 0 R 1922 0 R 1927 0 R 1929 0 R 1938 0 R 1945 0 R 1953 0 R 1959 0 R 1964 0 R 1966 0 R 1975 0 R 1984 0 R 1995 0 R 2001 0 R 2008 0 R 2010 0 R 2015 0 R 2017 0 R 2019 0 R 2022 0 R 2025 0 R 2028 0 R 2033 0 R 2037 0 R 2048 0 
 R 2051 0 R 2056 0 R 2059 0 R 2061 0 R 2066 0 R 2076 0 R 2078 0 R 2080 0 R 2082 0 R 2084 0 R 2087 0 R 2089 0 R 2091 0 R 2094 0 R 2096 0 R 2098 0 R 2103 0 R 2108 0 R 2117 0 R 2119 0 R 2121 0 R 2128 0 R 2130 0 R 2135 0 R 2137 0 R 2139 0 R 2146 0 R 2151 0 R 2155 0 R 2159 0 R 2163 0 R 2165 0 R 2167 0 R 2171 0 R 2174 0 R 2176 0 R 2178 0 R 2182 0 R 2184 0 R 2187 0 R 2189 0 R 2191 0 R 2193 0 R 2200 0 R 2203 0 R 2208 0 R 2210 0 R 2212 0 R 2214 0 R 2216 0 R 2224 0 R 2235 0 R 2249 0 R 2260 0 R 2264 0 R 2270 0 R 2274 0 R 2277 0 R 2282 0 R 2287 0 R 2289 0 R 2292 0 R 2294 0 R 2296 0 R 2298 0 R 2303 0 R 2305 0 R 2318 0 R 2321 0 R 2329 0 R 2335 0 R 2347 0 R 2361 0 R 2374 0 R 2391 0 R 2395 0 R 2397 0 R 2401 0 R 2419 0 R 2426 0 R 2438 0 R 2442 0 R 2446 0 R 2455 0 R 2467 0 R 2472 0 R 2482 0 R 2495 0 R 2515 0 R 2524 0 R 2527 0 R 2536 0 R 2553 0 R 2560 0 R 2563 0 R 2568 0 R 2572 0 R 2575 0 R 2584 0 R 2592 0 R 2596 0 R 2598 0 R 2602 0 R 2616 0 R 2625 0 R 2630 0 R 2634 0 R 2637 0 R 2639 0 R 2641 0 R 2643 
 0 R 2648 0 R 2661 0 R 2671 0 R 2679 0 R 2685 0 R 2691 0 R 2701 0 R 2708 0 R 2714 0 R 2716 0 R 2724 0 R 2733 0 R 2742 0 R 2747 0 R 2755 0 R 2759 0 R 2769 0 R 2777 0 R 2786 0 R 2791 0 R 2795 0 R 2799 0 R 2801 0 R 2807 0 R 2811 0 R 2815 0 R 2821 0 R 2827 0 R 2830 0 R 2836 0 R 2840 0 R 2850 0 R 2855 0 R 2860 0 R 2869 0 R 2875 0 R 2883 0 R 2885 0 R 2890 0 R 2896 0 R 2900 0 R 2904 0 R 2913 0 R 2920 0 R 2922 0 R 2926 0 R 2933 0 R 2936 0 R 2946 0 R 2952 0 R 2961 0 R 2964 0 R 2974 0 R 2979 0 R 2983 0 R 2991 0 R 2996 0 R 3000 0 R 3002 0 R 3013 0 R 3018 0 R 3021 0 R 3023 0 R 3025 0 R 3035 0 R 3042 0 R 3046 0 R 3049 0 R 3056 0 R 3059 0 R 3062 0 R 3065 0 R 3072 0 R 3077 0 R 3083 0 R 3087 0 R 3090 0 R 3093 0 R 3095 0 R 3099 0 R 3110 0 R 3112 0 R 3116 0 R 3119 0 R 3123 0 R 3126 0 R 3130 0 R 3132 0 R 3145 0 R 3150 0 R 3155 0 R 3162 0 R 3171 0 R 3173 0 R 3181 0 R 3199 0 R 3211 0 R 3217 0 R 3233 0 R 3236 0 R 3241 0 R 3243 0 R 3251 0 R 3256 0 R 3259 0 R 3261 0 R 3263 0 R 3265 0 R 3268 0 R 3285 0 R 328
 8 0 R 3294 0 R 3300 0 R 3309 0 R 3315 0 R 3325 0 R 3336 0 R 3343 0 R 3352 0 R 3357 0 R 3360 0 R 3368 0 R 3372 0 R 3377 0 R 3382 0 R 3395 0 R 3398 0 R 3404 0 R 3409 0 R 3418 0 R 3427 0 R 3433 0 R 3446 0 R 3452 0 R 3456 0 R 3464 0 R 3468 0 R 3473 0 R 3475 0 R 3481 0 R 3488 0 R 3490 0 R 3497 0 R 3499 0 R 3507 0 R 3514 0 R 3520 0 R 3527 0 R 3537 0 R 3544 0 R 3556 0 R 3563 0 R 3576 0 R 3583 0 R 3585 0 R 3590 0 R 3603 0 R 3608 0 R 3614 0 R 3618 0 R 3621 0 R 3626 0 R 3628 0 R 3632 0 R 3634 0 R 3638 0 R 3641 0 R 3644 0 R 3652 0 R 3654 0 R 3658 0 R 3661 0 R 3668 0 R 3674 0 R 3678 0 R 3681 0 R 3683 0 R 3687 0 R 3692 0 R 3697 0 R 3700 0 R 3713 0 R 3718 0 R 3722 0 R 3725 0 R 3733 0 R 3737 0 R 3745 0 R 3750 0 R 3752 0 R 3758 0 R 3760 0 R 3765 0 R 3769 0 R 3774 0 R 3778 0 R 3791 0 R 3807 0 R 3822 0 R 3827 0 R 3830 0 R 3833 0 R 3839 0 R 3844 0 R 3846 0 R 3848 0 R 3850 0 R 3852 0 R 3854 0 R 3863 0 R 3867 0 R 3871 0 R 3875 0 R 3877 0 R 3884 0 R 3894 0 R 3901 0 R 3904 0 R 3907 0 R 3909 0 R 3916 0 R 3
 923 0 R 3933 0 R 3937 0 R 3942 0 R 3946 0 R 3949 0 R 3954 0 R 3957 0 R 3973 0 R 3977 0 R 4000 0 R 4004 0 R 4011 0 R 4022 0 R 4031 0 R 4033 0 R 4036 0 R 4039 0 R 4055 0 R 4061 0 R 4068 0 R]
 >>
 endobj
 4 0 obj
@@ -187,11 +187,11 @@ endobj
 << /Type /Font
 /BaseFont /71be00+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 4740 0 R
+/FontDescriptor 4739 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4742 0 R
-/ToUnicode 4741 0 R
+/Widths 4741 0 R
+/ToUnicode 4740 0 R
 >>
 endobj
 11 0 obj
@@ -1750,7 +1750,7 @@ endobj
 /F1.0 10 0 R
 >>
 >>
-/Annots [4071 0 R 4072 0 R 4073 0 R 4074 0 R 4075 0 R 4076 0 R 4077 0 R 4078 0 R 4079 0 R 4080 0 R 4081 0 R 4082 0 R 4083 0 R 4084 0 R 4085 0 R 4086 0 R 4087 0 R 4088 0 R 4089 0 R 4090 0 R 4091 0 R 4092 0 R 4093 0 R 4094 0 R 4095 0 R 4096 0 R 4097 0 R 4098 0 R 4099 0 R 4100 0 R 4101 0 R 4102 0 R 4103 0 R 4104 0 R 4105 0 R 4106 0 R 4107 0 R 4108 0 R 4109 0 R 4110 0 R 4111 0 R 4112 0 R 4113 0 R 4114 0 R 4115 0 R 4116 0 R 4117 0 R 4118 0 R 4119 0 R 4120 0 R 4121 0 R 4122 0 R 4123 0 R 4124 0 R 4125 0 R 4126 0 R 4127 0 R 4128 0 R 4129 0 R 4130 0 R 4131 0 R 4132 0 R 4133 0 R 4134 0 R 4135 0 R 4136 0 R 4137 0 R 4138 0 R 4139 0 R 4140 0 R 4141 0 R 4142 0 R 4143 0 R 4144 0 R 4145 0 R 4146 0 R]
+/Annots [4070 0 R 4071 0 R 4072 0 R 4073 0 R 4074 0 R 4075 0 R 4076 0 R 4077 0 R 4078 0 R 4079 0 R 4080 0 R 4081 0 R 4082 0 R 4083 0 R 4084 0 R 4085 0 R 4086 0 R 4087 0 R 4088 0 R 4089 0 R 4090 0 R 4091 0 R 4092 0 R 4093 0 R 4094 0 R 4095 0 R 4096 0 R 4097 0 R 4098 0 R 4099 0 R 4100 0 R 4101 0 R 4102 0 R 4103 0 R 4104 0 R 4105 0 R 4106 0 R 4107 0 R 4108 0 R 4109 0 R 4110 0 R 4111 0 R 4112 0 R 4113 0 R 4114 0 R 4115 0 R 4116 0 R 4117 0 R 4118 0 R 4119 0 R 4120 0 R 4121 0 R 4122 0 R 4123 0 R 4124 0 R 4125 0 R 4126 0 R 4127 0 R 4128 0 R 4129 0 R 4130 0 R 4131 0 R 4132 0 R 4133 0 R 4134 0 R 4135 0 R 4136 0 R 4137 0 R 4138 0 R 4139 0 R 4140 0 R 4141 0 R 4142 0 R 4143 0 R 4144 0 R 4145 0 R]
 >>
 endobj
 13 0 obj
@@ -3417,7 +3417,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4147 0 R 4148 0 R 4149 0 R 4150 0 R 4151 0 R 4152 0 R 4153 0 R 4154 0 R 4155 0 R 4156 0 R 4157 0 R 4158 0 R 4159 0 R 4160 0 R 4161 0 R 4162 0 R 4163 0 R 4164 0 R 4165 0 R 4166 0 R 4167 0 R 4168 0 R 4169 0 R 4170 0 R 4171 0 R 4172 0 R 4173 0 R 4174 0 R 4175 0 R 4176 0 R 4177 0 R 4178 0 R 4179 0 R 4180 0 R 4181 0 R 4182 0 R 4183 0 R 4184 0 R 4185 0 R 4186 0 R 4187 0 R 4188 0 R 4189 0 R 4190 0 R 4191 0 R 4192 0 R 4193 0 R 4194 0 R 4195 0 R 4196 0 R 4197 0 R 4198 0 R 4199 0 R 4200 0 R 4201 0 R 4202 0 R 4203 0 R 4204 0 R 4205 0 R 4206 0 R 4207 0 R 4208 0 R 4209 0 R 4210 0 R 4211 0 R 4212 0 R 4213 0 R 4214 0 R 4215 0 R 4216 0 R 4217 0 R 4218 0 R 4219 0 R 4220 0 R 4221 0 R 4222 0 R 4223 0 R 4224 0 R 4225 0 R 4226 0 R 4227 0 R 4228 0 R]
+/Annots [4146 0 R 4147 0 R 4148 0 R 4149 0 R 4150 0 R 4151 0 R 4152 0 R 4153 0 R 4154 0 R 4155 0 R 4156 0 R 4157 0 R 4158 0 R 4159 0 R 4160 0 R 4161 0 R 4162 0 R 4163 0 R 4164 0 R 4165 0 R 4166 0 R 4167 0 R 4168 0 R 4169 0 R 4170 0 R 4171 0 R 4172 0 R 4173 0 R 4174 0 R 4175 0 R 4176 0 R 4177 0 R 4178 0 R 4179 0 R 4180 0 R 4181 0 R 4182 0 R 4183 0 R 4184 0 R 4185 0 R 4186 0 R 4187 0 R 4188 0 R 4189 0 R 4190 0 R 4191 0 R 4192 0 R 4193 0 R 4194 0 R 4195 0 R 4196 0 R 4197 0 R 4198 0 R 4199 0 R 4200 0 R 4201 0 R 4202 0 R 4203 0 R 4204 0 R 4205 0 R 4206 0 R 4207 0 R 4208 0 R 4209 0 R 4210 0 R 4211 0 R 4212 0 R 4213 0 R 4214 0 R 4215 0 R 4216 0 R 4217 0 R 4218 0 R 4219 0 R 4220 0 R 4221 0 R 4222 0 R 4223 0 R 4224 0 R 4225 0 R 4226 0 R 4227 0 R]
 >>
 endobj
 15 0 obj
@@ -5084,7 +5084,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4229 0 R 4230 0 R 4231 0 R 4232 0 R 4233 0 R 4234 0 R 4235 0 R 4236 0 R 4237 0 R 4238 0 R 4239 0 R 4240 0 R 4241 0 R 4242 0 R 4243 0 R 4244 0 R 4245 0 R 4246 0 R 4247 0 R 4248 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R 4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R 4258 0 R 4259 0 R 4260 0 R 4261 0 R 4262 0 R 4263 0 R 4264 0 R 4265 0 R 4266 0 R 4267 0 R 4268 0 R 4269 0 R 4270 0 R 4271 0 R 4272 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R 4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R 4282 0 R 4283 0 R 4284 0 R 4285 0 R 4286 0 R 4287 0 R 4288 0 R 4289 0 R 4290 0 R 4291 0 R 4292 0 R 4293 0 R 4294 0 R 4295 0 R 4296 0 R 4297 0 R 4298 0 R 4299 0 R 4300 0 R 4301 0 R 4302 0 R 4303 0 R 4304 0 R 4305 0 R 4306 0 R 4307 0 R 4308 0 R 4309 0 R 4310 0 R]
+/Annots [4228 0 R 4229 0 R 4230 0 R 4231 0 R 4232 0 R 4233 0 R 4234 0 R 4235 0 R 4236 0 R 4237 0 R 4238 0 R 4239 0 R 4240 0 R 4241 0 R 4242 0 R 4243 0 R 4244 0 R 4245 0 R 4246 0 R 4247 0 R 4248 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R 4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R 4258 0 R 4259 0 R 4260 0 R 4261 0 R 4262 0 R 4263 0 R 4264 0 R 4265 0 R 4266 0 R 4267 0 R 4268 0 R 4269 0 R 4270 0 R 4271 0 R 4272 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R 4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R 4282 0 R 4283 0 R 4284 0 R 4285 0 R 4286 0 R 4287 0 R 4288 0 R 4289 0 R 4290 0 R 4291 0 R 4292 0 R 4293 0 R 4294 0 R 4295 0 R 4296 0 R 4297 0 R 4298 0 R 4299 0 R 4300 0 R 4301 0 R 4302 0 R 4303 0 R 4304 0 R 4305 0 R 4306 0 R 4307 0 R 4308 0 R 4309 0 R]
 >>
 endobj
 17 0 obj
@@ -6751,7 +6751,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4311 0 R 4312 0 R 4313 0 R 4314 0 R 4315 0 R 4316 0 R 4317 0 R 4318 0 R 4319 0 R 4320 0 R 4321 0 R 4322 0 R 4323 0 R 4324 0 R 4325 0 R 4326 0 R 4327 0 R 4328 0 R 4329 0 R 4330 0 R 4331 0 R 4332 0 R 4333 0 R 4334 0 R 4335 0 R 4336 0 R 4337 0 R 4338 0 R 4339 0 R 4340 0 R 4341 0 R 4342 0 R 4343 0 R 4344 0 R 4345 0 R 4346 0 R 4347 0 R 4348 0 R 4349 0 R 4350 0 R 4351 0 R 4352 0 R 4353 0 R 4354 0 R 4355 0 R 4356 0 R 4357 0 R 4358 0 R 4359 0 R 4360 0 R 4361 0 R 4362 0 R 4363 0 R 4364 0 R 4365 0 R 4366 0 R 4367 0 R 4368 0 R 4369 0 R 4370 0 R 4371 0 R 4372 0 R 4373 0 R 4374 0 R 4375 0 R 4376 0 R 4377 0 R 4378 0 R 4379 0 R 4380 0 R 4381 0 R 4382 0 R 4383 0 R 4384 0 R 4385 0 R 4386 0 R 4387 0 R 4388 0 R 4389 0 R 4390 0 R 4391 0 R 4392 0 R]
+/Annots [4310 0 R 4311 0 R 4312 0 R 4313 0 R 4314 0 R 4315 0 R 4316 0 R 4317 0 R 4318 0 R 4319 0 R 4320 0 R 4321 0 R 4322 0 R 4323 0 R 4324 0 R 4325 0 R 4326 0 R 4327 0 R 4328 0 R 4329 0 R 4330 0 R 4331 0 R 4332 0 R 4333 0 R 4334 0 R 4335 0 R 4336 0 R 4337 0 R 4338 0 R 4339 0 R 4340 0 R 4341 0 R 4342 0 R 4343 0 R 4344 0 R 4345 0 R 4346 0 R 4347 0 R 4348 0 R 4349 0 R 4350 0 R 4351 0 R 4352 0 R 4353 0 R 4354 0 R 4355 0 R 4356 0 R 4357 0 R 4358 0 R 4359 0 R 4360 0 R 4361 0 R 4362 0 R 4363 0 R 4364 0 R 4365 0 R 4366 0 R 4367 0 R 4368 0 R 4369 0 R 4370 0 R 4371 0 R 4372 0 R 4373 0 R 4374 0 R 4375 0 R 4376 0 R 4377 0 R 4378 0 R 4379 0 R 4380 0 R 4381 0 R 4382 0 R 4383 0 R 4384 0 R 4385 0 R 4386 0 R 4387 0 R 4388 0 R 4389 0 R 4390 0 R 4391 0 R]
 >>
 endobj
 19 0 obj
@@ -8429,7 +8429,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4393 0 R 4394 0 R 4395 0 R 4396 0 R 4397 0 R 4398 0 R 4399 0 R 4400 0 R 4401 0 R 4402 0 R 4403 0 R 4404 0 R 4405 0 R 4406 0 R 4407 0 R 4408 0 R 4409 0 R 4410 0 R 4411 0 R 4412 0 R 4413 0 R 4414 0 R 4415 0 R 4416 0 R 4417 0 R 4418 0 R 4419 0 R 4420 0 R 4421 0 R 4422 0 R 4423 0 R 4424 0 R 4425 0 R 4426 0 R 4427 0 R 4428 0 R 4429 0 R 4430 0 R 4431 0 R 4432 0 R 4433 0 R 4434 0 R 4435 0 R 4436 0 R 4437 0 R 4438 0 R 4439 0 R 4440 0 R 4441 0 R 4442 0 R 4443 0 R 4444 0 R 4445 0 R 4446 0 R 4447 0 R 4448 0 R 4449 0 R 4450 0 R 4451 0 R 4452 0 R 4453 0 R 4454 0 R 4455 0 R 4456 0 R 4457 0 R 4458 0 R 4459 0 R 4460 0 R 4461 0 R 4462 0 R 4463 0 R 4464 0 R 4465 0 R 4466 0 R 4467 0 R 4468 0 R 4469 0 R 4470 0 R 4471 0 R 4472 0 R 4473 0 R 4474 0 R 4475 0 R 4476 0 R]
+/Annots [4392 0 R 4393 0 R 4394 0 R 4395 0 R 4396 0 R 4397 0 R 4398 0 R 4399 0 R 4400 0 R 4401 0 R 4402 0 R 4403 0 R 4404 0 R 4405 0 R 4406 0 R 4407 0 R 4408 0 R 4409 0 R 4410 0 R 4411 0 R 4412 0 R 4413 0 R 4414 0 R 4415 0 R 4416 0 R 4417 0 R 4418 0 R 4419 0 R 4420 0 R 4421 0 R 4422 0 R 4423 0 R 4424 0 R 4425 0 R 4426 0 R 4427 0 R 4428 0 R 4429 0 R 4430 0 R 4431 0 R 4432 0 R 4433 0 R 4434 0 R 4435 0 R 4436 0 R 4437 0 R 4438 0 R 4439 0 R 4440 0 R 4441 0 R 4442 0 R 4443 0 R 4444 0 R 4445 0 R 4446 0 R 4447 0 R 4448 0 R 4449 0 R 4450 0 R 4451 0 R 4452 0 R 4453 0 R 4454 0 R 4455 0 R 4456 0 R 4457 0 R 4458 0 R 4459 0 R 4460 0 R 4461 0 R 4462 0 R 4463 0 R 4464 0 R 4465 0 R 4466 0 R 4467 0 R 4468 0 R 4469 0 R 4470 0 R 4471 0 R 4472 0 R 4473 0 R 4474 0 R 4475 0 R]
 >>
 endobj
 21 0 obj
@@ -9176,7 +9176,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4477 0 R 4478 0 R 4479 0 R 4480 0 R 4481 0 R 4482 0 R 4483 0 R 4484 0 R 4485 0 R 4486 0 R 4487 0 R 4488 0 R 4489 0 R 4490 0 R 4491 0 R 4492 0 R 4493 0 R 4494 0 R 4495 0 R 4496 0 R 4497 0 R 4498 0 R 4499 0 R 4500 0 R 4501 0 R 4502 0 R 4503 0 R 4504 0 R 4505 0 R 4506 0 R 4507 0 R 4508 0 R 4509 0 R 4510 0 R 4511 0 R 4512 0 R]
+/Annots [4476 0 R 4477 0 R 4478 0 R 4479 0 R 4480 0 R 4481 0 R 4482 0 R 4483 0 R 4484 0 R 4485 0 R 4486 0 R 4487 0 R 4488 0 R 4489 0 R 4490 0 R 4491 0 R 4492 0 R 4493 0 R 4494 0 R 4495 0 R 4496 0 R 4497 0 R 4498 0 R 4499 0 R 4500 0 R 4501 0 R 4502 0 R 4503 0 R 4504 0 R 4505 0 R 4506 0 R 4507 0 R 4508 0 R 4509 0 R 4510 0 R 4511 0 R]
 >>
 endobj
 23 0 obj
@@ -9988,7 +9988,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [30 0 R 31 0 R 32 0 R 34 0 R 36 0 R 37 0 R 39 0 R 40 0 R 41 0 R]
@@ -10003,7 +10003,7 @@ endobj
 >>
 endobj
 27 0 obj
-<< /Kids [638 0 R 3549 0 R 1934 0 R 639 0 R 3473 0 R 1114 0 R 2463 0 R 3792 0 R]
+<< /Kids [638 0 R 3547 0 R 1932 0 R 639 0 R 3471 0 R 1113 0 R 2462 0 R 3940 0 R]
 >>
 endobj
 28 0 obj
@@ -10013,11 +10013,11 @@ endobj
 << /Type /Font
 /BaseFont /358635+NotoSerif-Bold
 /Subtype /TrueType
-/FontDescriptor 4744 0 R
+/FontDescriptor 4743 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4746 0 R
-/ToUnicode 4745 0 R
+/Widths 4745 0 R
+/ToUnicode 4744 0 R
 >>
 endobj
 30 0 obj
@@ -10057,11 +10057,11 @@ endobj
 << /Type /Font
 /BaseFont /260f03+NotoSerif-Italic
 /Subtype /TrueType
-/FontDescriptor 4748 0 R
+/FontDescriptor 4747 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4750 0 R
-/ToUnicode 4749 0 R
+/Widths 4749 0 R
+/ToUnicode 4748 0 R
 >>
 endobj
 34 0 obj
@@ -10079,11 +10079,11 @@ endobj
 << /Type /Font
 /BaseFont /c7d210+mplus1mn-regular
 /Subtype /TrueType
-/FontDescriptor 4752 0 R
+/FontDescriptor 4751 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4754 0 R
-/ToUnicode 4753 0 R
+/Widths 4753 0 R
+/ToUnicode 4752 0 R
 >>
 endobj
 36 0 obj
@@ -10109,11 +10109,11 @@ endobj
 << /Type /Font
 /BaseFont /34c70d+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 4756 0 R
+/FontDescriptor 4755 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4758 0 R
-/ToUnicode 4757 0 R
+/Widths 4757 0 R
+/ToUnicode 4756 0 R
 >>
 endobj
 39 0 obj
@@ -10547,7 +10547,7 @@ endobj
 /F5.1 45 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -10556,11 +10556,11 @@ endobj
 << /Type /Font
 /BaseFont /26ec65+FontAwesome
 /Subtype /TrueType
-/FontDescriptor 4760 0 R
+/FontDescriptor 4759 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4762 0 R
-/ToUnicode 4761 0 R
+/Widths 4761 0 R
+/ToUnicode 4760 0 R
 >>
 endobj
 46 0 obj
@@ -10618,7 +10618,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -10703,7 +10703,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [52 0 R]
@@ -12276,7 +12276,7 @@ endobj
 /F1.1 38 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [57 0 R 59 0 R]
@@ -13554,7 +13554,7 @@ endobj
 /F1.0 10 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [62 0 R]
@@ -14415,7 +14415,7 @@ endobj
 /Font << /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -15134,7 +15134,7 @@ endobj
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -16010,7 +16010,7 @@ endobj
 /F2.0 29 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [71 0 R 72 0 R 73 0 R 74 0 R]
@@ -16955,7 +16955,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [77 0 R]
@@ -16970,7 +16970,7 @@ endobj
 >>
 endobj
 78 0 obj
-<< /Length 14514
+<< /Length 15030
 >>
 stream
 q
@@ -17129,12 +17129,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.4938 Tw
+0.4492 Tw
 
 BT
 66.24 663.466 Td
 /F1.0 10.5 Tf
-[<706f7274206f666673657420666f722074686174206d61737465722e204561636820484d6173746572207573657320746872656520706f727473202831363031302c2031363032302c20616e642031363033302062> 20.0195 <792064656661756c74292e>] TJ
+[<706f7274206f666673657420666f722074686174206d61737465722e204561636820484d617374657220757365732074776f20706f7274732028313630303020616e642031363031302062> 20.0195 <792064656661756c74292e2054686520706f7274>] TJ
 ET
 
 
@@ -17144,12 +17144,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-1.0859 Tw
+0.2313 Tw
 
 BT
 66.24 647.686 Td
 /F1.0 10.5 Tf
-<54686520706f7274206f666673657420697320616464656420746f20746865736520706f7274732c20736f207573696e6720616e206f6666736574206f6620322c20746865206261636b757020484d617374657220776f756c6420757365> Tj
+<6f666673657420697320616464656420746f20746865736520706f7274732c20736f207573696e6720616e206f6666736574206f6620322c20746865206261636b757020484d617374657220776f756c642075736520706f727473203136303032> Tj
 ET
 
 
@@ -17159,12 +17159,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-2.1812 Tw
+5.3879 Tw
 
 BT
 66.24 631.906 Td
 /F1.0 10.5 Tf
-<706f7274732031363031322c2031363032322c20616e642031363033322e2054686520666f6c6c6f77696e6720636f6d6d616e64207374617274732033206261636b75702073657276657273207573696e6720706f727473> Tj
+<616e642031363031322e2054686520666f6c6c6f77696e6720636f6d6d616e64207374617274732033206261636b75702073657276657273207573696e6720706f7274732031363030322f31363031322c> Tj
 ET
 
 
@@ -17177,7 +17177,7 @@ ET
 BT
 66.24 616.126 Td
 /F1.0 10.5 Tf
-<31363031322f31363032322f31363033322c2031363031332f31363032332f31363033332c20616e642031363031352f31363032352f31363033352e> Tj
+<31363030332f31363031332c20616e642031363030352f31363031352e> Tj
 ET
 
 0.0 0.0 0.0 SCN
@@ -17581,12 +17581,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.2706 Tw
+26.501 Tw
 
 BT
 66.24 261.726 Td
 /F1.0 10.5 Tf
-<526567696f6e536572766572732c206261736520706f7274732063616e206265206368616e67656420696e2073637269707420276c6f63616c2d726567696f6e736572766572732e73682720746f20617070726f7072696174652076616c75652e> Tj
+[<526567696f6e536572766572732c2073657420656e7669726f6e6d656e74207661726961626c6573204842> 20.0195 <4153455f52535f42> 20.0195 <4153455f504f52> 20.0195 <5420616e64>] TJ
 ET
 
 
@@ -17596,12 +17596,42 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-0.5006 Tw
+11.5658 Tw
 
 BT
 66.24 245.946 Td
 /F1.0 10.5 Tf
-<652e672e20576974682076616c75657320313632303020616e6420313633303020666f72206261736520706f7274732c203939206164646974696f6e616c20526567696f6e536572766572732063616e20626520737570706f727465642c> Tj
+[<4842> 20.0195 <4153455f52535f494e464f5f42> 20.0195 <4153455f504f52> 20.0195 <5420746f20617070726f7072696174652076616c756573206265666f72652072756e6e696e672073637269707420>] TJ
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.6941 0.1294 0.2745 scn
+0.6941 0.1294 0.2745 SCN
+
+11.5658 Tw
+
+BT
+515.54 245.946 Td
+/F4.0 10.5 Tf
+<6c6f63616c2d> Tj
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.6941 0.1294 0.2745 scn
+0.6941 0.1294 0.2745 SCN
+
+0.78 Tw
+
+BT
+66.24 230.166 Td
+/F4.0 10.5 Tf
+<726567696f6e736572766572732e7368> Tj
 ET
 
 
@@ -17611,12 +17641,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-4.7885 Tw
+0.78 Tw
 
 BT
-66.24 230.166 Td
+150.24 230.166 Td
 /F1.0 10.5 Tf
-<6f6e2061207365727665722e2054686520666f6c6c6f77696e6720636f6d6d616e642073746172747320666f7572206164646974696f6e616c20526567696f6e536572766572732c2072756e6e696e67206f6e> Tj
+<2e20652e672e20576974682076616c75657320313632303020616e6420313633303020666f72206261736520706f7274732c203939206164646974696f6e616c20526567696f6e53657276657273> Tj
 ET
 
 
@@ -17626,38 +17656,53 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
+1.6804 Tw
+
 BT
 66.24 214.386 Td
 /F1.0 10.5 Tf
-<73657175656e7469616c20706f727473207374617274696e672061742031363032322f313630333220286261736520706f7274732031363032302f313630333020706c75732032292e> Tj
+<63616e20626520737570706f727465642c206f6e2061207365727665722e2054686520666f6c6c6f77696e6720636f6d6d616e642073746172747320666f7572206164646974696f6e616c20526567696f6e536572766572732c> Tj
+ET
+
+
+0.0 Tw
+0.0 0.0 0.0 SCN
+0.0 0.0 0.0 scn
+0.2 0.2 0.2 scn
+0.2 0.2 0.2 SCN
+
+BT
+66.24 198.606 Td
+/F1.0 10.5 Tf
+<72756e6e696e67206f6e2073657175656e7469616c20706f727473207374617274696e672061742031363032322f313630333220286261736520706f7274732031363032302f313630333020706c75732032292e> Tj
 ET
 
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
 q
 0.9608 0.9608 0.9608 scn
-70.24 198.57 m
-543.04 198.57 l
-545.2491 198.57 547.04 196.7791 547.04 194.57 c
-547.04 165.83 l
-547.04 163.6209 545.2491 161.83 543.04 161.83 c
-70.24 161.83 l
-68.0309 161.83 66.24 163.6209 66.24 165.83 c
-66.24 194.57 l
-66.24 196.7791 68.0309 198.57 70.24 198.57 c
+70.24 182.79 m
+543.04 182.79 l
+545.2491 182.79 547.04 180.9991 547.04 178.79 c
+547.04 150.05 l
+547.04 147.8409 545.2491 146.05 543.04 146.05 c
+70.24 146.05 l
+68.0309 146.05 66.24 147.8409 66.24 150.05 c
+66.24 178.79 l
+66.24 180.9991 68.0309 182.79 70.24 182.79 c
 h
 f
 0.8 0.8 0.8 SCN
 0.75 w
-70.24 198.57 m
-543.04 198.57 l
-545.2491 198.57 547.04 196.7791 547.04 194.57 c
-547.04 165.83 l
-547.04 163.6209 545.2491 161.83 543.04 161.83 c
-70.24 161.83 l
-68.0309 161.83 66.24 163.6209 66.24 165.83 c
-66.24 194.57 l
-66.24 196.7791 68.0309 198.57 70.24 198.57 c
+70.24 182.79 m
+543.04 182.79 l
+545.2491 182.79 547.04 180.9991 547.04 178.79 c
+547.04 150.05 l
+547.04 147.8409 545.2491 146.05 543.04 146.05 c
+70.24 146.05 l
+68.0309 146.05 66.24 147.8409 66.24 150.05 c
+66.24 178.79 l
+66.24 180.9991 68.0309 182.79 70.24 182.79 c
 h
 S
 Q
@@ -17665,7 +17710,7 @@ Q
 0.2 0.2 0.2 SCN
 
 BT
-77.24 175.745 Td
+77.24 159.965 Td
 /F4.0 11 Tf
 <24202e62696e2f6c6f63616c2d726567696f6e736572766572732e73682073746172742032203320342035> Tj
 ET
@@ -17678,7 +17723,7 @@ ET
 3.3677 Tw
 
 BT
-66.24 137.866 Td
+66.24 122.086 Td
 /F1.0 10.5 Tf
 [<54> 29.7852 <6f2073746f70206120526567696f6e536572766572206d616e75616c6c79> 89.8438 <2c207573652074686520>] TJ
 ET
@@ -17693,7 +17738,7 @@ ET
 3.3677 Tw
 
 BT
-297.3191 137.866 Td
+297.3191 122.086 Td
 /F4.0 10.5 Tf
 <6c6f63616c2d726567696f6e736572766572732e7368> Tj
 ET
@@ -17708,7 +17753,7 @@ ET
 3.3677 Tw
 
 BT
-412.8191 137.866 Td
+412.8191 122.086 Td
 /F1.0 10.5 Tf
 <20636f6d6d616e6420776974682074686520> Tj
 ET
@@ -17723,7 +17768,7 @@ ET
 3.3677 Tw
 
 BT
-526.04 137.866 Td
+526.04 122.086 Td
 /F4.0 10.5 Tf
 <73746f70> Tj
 ET
@@ -17738,7 +17783,7 @@ ET
 3.3677 Tw
 
 BT
-547.04 137.866 Td
+547.04 122.086 Td
 ET
 
 
@@ -17749,7 +17794,7 @@ ET
 0.2 0.2 0.2 SCN
 
 BT
-66.24 122.086 Td
+66.24 106.306 Td
 /F1.0 10.5 Tf
 [<706172> 20.0195 <616d6574657220616e6420746865206f6666736574206f66207468652073657276657220746f2073746f702e>] TJ
 ET
@@ -17758,28 +17803,28 @@ ET
 0.0 0.0 0.0 scn
 q
 0.9608 0.9608 0.9608 scn
-70.24 106.27 m
-543.04 106.27 l
-545.2491 106.27 547.04 104.4791 547.04 102.27 c
-547.04 73.53 l
-547.04 71.3209 545.2491 69.53 543.04 69.53 c
-70.24 69.53 l
-68.0309 69.53 66.24 71.3209 66.24 73.53 c
-66.24 102.27 l
-66.24 104.4791 68.0309 106.27 70.24 106.27 c
+70.24 90.49 m
+543.04 90.49 l
+545.2491 90.49 547.04 88.6991 547.04 86.49 c
+547.04 57.75 l
+547.04 55.5409 545.2491 53.75 543.04 53.75 c
+70.24 53.75 l
+68.0309 53.75 66.24 55.5409 66.24 57.75 c
+66.24 86.49 l
+66.24 88.6991 68.0309 90.49 70.24 90.49 c
 h
 f
 0.8 0.8 0.8 SCN
 0.75 w
-70.24 106.27 m
-543.04 106.27 l
-545.2491 106.27 547.04 104.4791 547.04 102.27 c
-547.04 73.53 l
-547.04 71.3209 545.2491 69.53 543.04 69.53 c
-70.24 69.53 l
-68.0309 69.53 66.24 71.3209 66.24 73.53 c
-66.24 102.27 l
-66.24 104.4791 68.0309 106.27 70.24 106.27 c
+70.24 90.49 m
+543.04 90.49 l
+545.2491 90.49 547.04 88.6991 547.04 86.49 c
+547.04 57.75 l
+547.04 55.5409 545.2491 53.75 543.04 53.75 c
+70.24 53.75 l
+68.0309 53.75 66.24 55.5409 66.24 57.75 c
+66.24 86.49 l
+66.24 88.6991 68.0309 90.49 70.24 90.49 c
 h
 S
 Q
@@ -17787,7 +17832,7 @@ Q
 0.2 0.2 0.2 SCN
 
 BT
-77.24 83.445 Td
+77.24 67.665 Td
 /F4.0 11 Tf
 <24202e62696e2f6c6f63616c2d726567696f6e736572766572732e73682073746f702033> Tj
 ET
@@ -17833,7 +17878,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -19344,7 +19389,7 @@ endobj
 /F4.0 35 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [82 0 R 84 0 R]
@@ -20692,7 +20737,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [88 0 R]
@@ -21766,7 +21811,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -22450,7 +22495,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -23241,7 +23286,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [95 0 R 96 0 R 97 0 R 99 0 R]
@@ -23470,7 +23515,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [103 0 R 104 0 R 105 0 R]
@@ -24334,7 +24379,7 @@ endobj
 /F4.0 35 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [109 0 R 110 0 R]
@@ -24614,7 +24659,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -26094,7 +26139,7 @@ endobj
 /F5.1 45 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 125 0 R 126 0 R 127 0 R 128 0 R]
@@ -27161,7 +27206,7 @@ endobj
 /F2.0 29 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [131 0 R 133 0 R]
@@ -27899,7 +27944,7 @@ endobj
 /F2.0 29 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [136 0 R 138 0 R 139 0 R 140 0 R]
@@ -30305,7 +30350,7 @@ endobj
 /F2.0 29 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R]
@@ -31121,7 +31166,7 @@ endobj
 /F2.0 29 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [155 0 R 156 0 R]
@@ -31132,12 +31177,12 @@ endobj
 endobj
 153 0 obj
 << /Limits [(__anchor-top) (api-as-of-hbase-1-0-0)]
-/Names [(__anchor-top) 25 0 R (__indexterm-7321942) 3438 0 R (__indexterm-7324346) 3440 0 R (__indexterm-7325894) 3442 0 R (__indexterm-7328078) 3443 0 R (acid) 893 0 R (acl) 3250 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3542 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3543 0 R (add.metrics) 3540 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3777 0 R (adding.new.node) 2999 0 R (administration) 1331 0 R (administration-2) 1351 0 R (administration-3) 1383 0 R (all-service-rollback) 644 0 R (allow-the-hbase-system-user-in-yarn) 1926 0 R (amazon-ec2) 3816 0 R (api-as-of-hbase-1-0-0) 1430 0 R]
+/Names [(__anchor-top) 25 0 R (__indexterm-7323508) 3436 0 R (__indexterm-7325912) 3438 0 R (__indexterm-7327460) 3440 0 R (__indexterm-7329644) 3441 0 R (acid) 892 0 R (acl) 3248 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3540 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3541 0 R (add.metrics) 3538 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3775 0 R (adding.new.node) 2998 0 R (administration) 1330 0 R (administration-2) 1350 0 R (administration-3) 1382 0 R (all-service-rollback) 644 0 R (allow-the-hbase-system-user-in-yarn) 1924 0 R (amazon-ec2) 3813 0 R (api-as-of-hbase-1-0-0) 1429 0 R]
 >>
 endobj
 154 0 obj
 << /Limits [(io.storefile.bloom.block.size) (jdo)]
-/Names [(io.storefile.bloom.block.size) 351 0 R (irc) 3281 0 R (isolate-system-tables) 3246 0 R (java) 116 0 R (java-2) 1866 0 R (java-3) 1871 0 R (java.client.config) 511 0 R (jdk-issues) 2823 0 R (jdk-version-requirements) 56 0 R (jdo) 2110 0 R]
+/Names [(io.storefile.bloom.block.size) 351 0 R (irc) 3279 0 R (isolate-system-tables) 3245 0 R (java) 116 0 R (java-2) 1864 0 R (java-3) 1869 0 R (java.client.config) 511 0 R (jdk-issues) 2822 0 R (jdk-version-requirements) 56 0 R (jdo) 2109 0 R]
 >>
 endobj
 155 0 obj
@@ -32276,7 +32321,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [161 0 R 162 0 R 164 0 R]
@@ -33076,7 +33121,7 @@ endobj
 /F5.1 45 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [169 0 R 170 0 R 171 0 R 173 0 R 174 0 R 176 0 R 177 0 R]
@@ -34548,7 +34593,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [180 0 R 181 0 R]
@@ -34973,7 +35018,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -35629,7 +35674,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [187 0 R]
@@ -36396,7 +36441,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [192 0 R]
@@ -36927,7 +36972,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -36943,7 +36988,7 @@ endobj
 endobj
 202 0 obj
 << /Limits [(getshortmidpointkey-an-optimization-for-data-index-block) (handling-of-errors-during-log-splitting)]
-/Names [(getshortmidpointkey-an-optimization-for-data-index-block) 3956 0 R (getting.involved) 3271 0 R (getting_started) 48 0 R (git.best.practices) 3544 0 R (git.patch.flow) 3594 0 R (goals) 4048 0 R (guide-for-hbase-committers) 3571 0 R (guidelines-for-deploying-a-coprocessor) 2300 0 R (guidelines-for-reporting-effective-issues) 3288 0 R (hadoop) 137 0 R (hadoop.native.lib) 3876 0 R (hadoop.policy.file) 378 0 R (handling-of-errors-during-log-splitting) 1612 0 R]
+/Names [(getshortmidpointkey-an-optimization-for-data-index-block) 3955 0 R (getting.involved) 3269 0 R (getting_started) 48 0 R (git.best.practices) 3542 0 R (git.patch.flow) 3592 0 R (goals) 4047 0 R (guide-for-hbase-committers) 3569 0 R (guidelines-for-deploying-a-coprocessor) 2299 0 R (guidelines-for-reporting-effective-issues) 3286 0 R (hadoop) 137 0 R (hadoop.native.lib) 3873 0 R (hadoop.policy.file) 378 0 R (handling-of-errors-during-log-splitting) 1611 0 R]
 >>
 endobj
 203 0 obj
@@ -37473,7 +37518,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -37995,7 +38040,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -38630,7 +38675,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -39139,7 +39184,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -39670,7 +39715,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -40249,7 +40294,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [248 0 R 249 0 R]
@@ -40816,7 +40861,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [257 0 R 258 0 R 260 0 R 261 0 R]
@@ -40880,7 +40925,7 @@ endobj
 endobj
 264 0 obj
 << /Limits [(hbase.table.lock.enable) (hbase.tmp.dir)]
-/Names [(hbase.table.lock.enable) 403 0 R (hbase.table.max.rowsize) 404 0 R (hbase.tags) 1306 0 R (hbase.tests) 3421 0 R (hbase.tests.categories) 3463 0 R (hbase.tests.cluster) 3467 0 R (hbase.tests.example.code) 3468 0 R (hbase.tests.rules) 3461 0 R (hbase.tests.sleeps) 3464 0 R (hbase.tests.writing) 3460 0 R (hbase.thrift.maxQueuedRequests) 410 0 R (hbase.thrift.maxWorkerThreads) 409 0 R (hbase.thrift.minWorkerThreads) 408 0 R (hbase.tmp.dir) 194 0 R]
+/Names [(hbase.table.lock.enable) 403 0 R (hbase.table.max.rowsize) 404 0 R (hbase.tags) 1305 0 R (hbase.tests) 3419 0 R (hbase.tests.categories) 3461 0 R (hbase.tests.cluster) 3465 0 R (hbase.tests.example.code) 3466 0 R (hbase.tests.rules) 3459 0 R (hbase.tests.sleeps) 3462 0 R (hbase.tests.writing) 3458 0 R (hbase.thrift.maxQueuedRequests) 410 0 R (hbase.thrift.maxWorkerThreads) 409 0 R (hbase.thrift.minWorkerThreads) 408 0 R (hbase.tmp.dir) 194 0 R]
 >>
 endobj
 265 0 obj
@@ -41436,7 +41481,7 @@ endobj
 /F1.0 10 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -42031,7 +42076,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [281 0 R 282 0 R]
@@ -42051,7 +42096,7 @@ endobj
 endobj
 280 0 obj
 << /Limits [(hbase.cluster.distributed) (hbase.data.umask.enable)]
-/Names [(hbase.cluster.distributed) 196 0 R (hbase.column.max.version) 429 0 R (hbase.commit.msg.format) 3721 0 R (hbase.coordinated.state.manager.class) 472 0 R (hbase.coprocessor.abortonerror) 394 0 R (hbase.coprocessor.enabled) 387 0 R (hbase.coprocessor.master.classes) 393 0 R (hbase.coprocessor.region.classes) 392 0 R (hbase.coprocessor.user.enabled) 389 0 R (hbase.data.umask) 420 0 R (hbase.data.umask.enable) 419 0 R]
+/Names [(hbase.cluster.distributed) 196 0 R (hbase.column.max.version) 429 0 R (hbase.commit.msg.format) 3719 0 R (hbase.coordinated.state.manager.class) 472 0 R (hbase.coprocessor.abortonerror) 394 0 R (hbase.coprocessor.enabled) 387 0 R (hbase.coprocessor.master.classes) 393 0 R (hbase.coprocessor.region.classes) 392 0 R (hbase.coprocessor.user.enabled) 389 0 R (hbase.data.umask) 420 0 R (hbase.data.umask.enable) 419 0 R]
 >>
 endobj
 281 0 obj
@@ -42597,7 +42642,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -43092,7 +43137,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -43664,7 +43709,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -44229,7 +44274,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -44834,7 +44879,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -45431,7 +45476,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -45974,7 +46019,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -46485,7 +46530,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -47060,7 +47105,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [345 0 R 349 0 R]
@@ -47108,7 +47153,7 @@ endobj
 endobj
 352 0 obj
 << /Limits [(quota) (regions.arch)]
-/Names [(quota) 3105 0 R (read-api-and-usage) 1867 0 R (read-hbase-shell-commands-from-a-command-file) 742 0 R (reading-filtering-and-sending-edits) 3085 0 R (reading_cells_with_labels) 1360 0 R (recommended.configurations.hdfs) 541 0 R (recommended_configurations) 536 0 R (recommended_configurations.zk) 537 0 R (region-overlap-repairs) 3834 0 R (region-replication-for-meta-table-s-region) 1845 0 R (regions.arch) 1642 0 R]
+/Names [(quota) 3104 0 R (read-api-and-usage) 1865 0 R (read-hbase-shell-commands-from-a-command-file) 741 0 R (reading-filtering-and-sending-edits) 3084 0 R (reading_cells_with_labels) 1359 0 R (recommended.configurations.hdfs) 541 0 R (recommended_configurations) 536 0 R (recommended_configurations.zk) 537 0 R (region-overlap-repairs) 3831 0 R (region-replication-for-meta-table-s-region) 1843 0 R (regions.arch) 1641 0 R]
 >>
 endobj
 353 0 obj
@@ -47641,7 +47686,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -47668,7 +47713,7 @@ endobj
 endobj
 361 0 obj
 << /Limits [(hbase.regionserver.thrift.compact) (hbase.rootdir.perms)]
-/Names [(hbase.regionserver.thrift.compact) 413 0 R (hbase.regionserver.thrift.framed) 411 0 R (hbase.regionserver.thrift.framed.max_frame_size_in_mb) 412 0 R (hbase.replication.management) 3061 0 R (hbase.replication.rpc.codec) 481 0 R (hbase.replication.source.maxthreads) 482 0 R (hbase.rest-csrf.browser-useragents-regex) 465 0 R (hbase.rest.csrf.enabled) 464 0 R (hbase.rest.filter.classes) 452 0 R (hbase.rest.port) 395 0 R (hbase.rest.readonly) 396 0 R (hbase.rest.support.proxyuser) 401 0 R (hbase.rest.threads.max) 399 0 R (hbase.rest.threads.min) 400 0 R (hbase.rolling.restart) 630 0 R (hbase.rolling.upgrade) 626 0 R (hbase.rootdir) 195 0 R (hbase.rootdir.perms) 416 0 R]
+/Names [(hbase.regionserver.thrift.compact) 413 0 R (hbase.regionserver.thrift.framed) 411 0 R (hbase.regionserver.thrift.framed.max_frame_size_in_mb) 412 0 R (hbase.replication.management) 3060 0 R (hbase.replication.rpc.codec) 481 0 R (hbase.replication.source.maxthreads) 482 0 R (hbase.rest-csrf.browser-useragents-regex) 465 0 R (hbase.rest.csrf.enabled) 464 0 R (hbase.rest.filter.classes) 452 0 R (hbase.rest.port) 395 0 R (hbase.rest.readonly) 396 0 R (hbase.rest.support.proxyuser) 401 0 R (hbase.rest.threads.max) 399 0 R (hbase.rest.threads.min) 400 0 R (hbase.rolling.restart) 630 0 R (hbase.rolling.upgrade) 626 0 R (hbase.rootdir) 195 0 R (hbase.rootdir.perms) 416 0 R]
 >>
 endobj
 362 0 obj
@@ -48256,7 +48301,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [365 0 R 366 0 R 368 0 R 370 0 R 371 0 R]
@@ -48831,7 +48876,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -49380,7 +49425,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -49927,7 +49972,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -50446,7 +50491,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -50471,7 +50516,7 @@ endobj
 endobj
 405 0 obj
 << /Limits [(hbase.zookeeper.property.maxClientCnxns) (hfile.block.index.cacheonwrite)]
-/Names [(hbase.zookeeper.property.maxClientCnxns) 269 0 R (hbase.zookeeper.property.syncLimit) 263 0 R (hbase.zookeeper.quorum) 199 0 R (hbase_apis) 2054 0 R (hbase_default_configurations) 193 0 R (hbase_env) 525 0 R (hbase_metrics) 3004 0 R (hbase_mob) 1881 0 R (hbase_site) 521 0 R (hbase_supported_tested_definitions) 42 0 R (hbck) 2906 0 R (hbck.in.depth) 3826 0 R (health.check) 2902 0 R (hedged.reads) 2520 0 R (hfile) 1699 0 R (hfile-format) 1700 0 R (hfile-format-2) 3927 0 R (hfile.block.bloom.cacheonwrite) 350 0 R (hfile.block.cache.size) 339 0 R (hfile.block.index.cacheonwrite) 340 0 R]
+/Names [(hbase.zookeeper.property.maxClientCnxns) 269 0 R (hbase.zookeeper.property.syncLimit) 263 0 R (hbase.zookeeper.quorum) 199 0 R (hbase_apis) 2052 0 R (hbase_default_configurations) 193 0 R (hbase_env) 525 0 R (hbase_metrics) 3003 0 R (hbase_mob) 1879 0 R (hbase_site) 521 0 R (hbase_supported_tested_definitions) 42 0 R (hbck) 2905 0 R (hbck.in.depth) 3823 0 R (health.check) 2901 0 R (hedged.reads) 2519 0 R (hfile) 1698 0 R (hfile-format) 1699 0 R (hfile-format-2) 3924 0 R (hfile.block.bloom.cacheonwrite) 350 0 R (hfile.block.cache.size) 339 0 R (hfile.block.index.cacheonwrite) 340 0 R]
 >>
 endobj
 406 0 obj
@@ -50965,7 +51010,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -51475,7 +51520,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -51485,7 +51530,7 @@ endobj
 endobj
 417 0 obj
 << /Limits [(hbase.rpc) (hbase.secure.spnego.ui)]
-/Names [(hbase.rpc) 4041 0 R (hbase.rpc.rows.warning.threshold) 504 0 R (hbase.rpc.shortoperation.timeout) 360 0 R (hbase.rpc.timeout) 356 0 R (hbase.rs.cacheblocksonwrite) 355 0 R (hbase.secure.bulkload) 1386 0 R (hbase.secure.configuration) 1226 0 R (hbase.secure.enable) 1390 0 R (hbase.secure.simpleconfiguration) 1268 0 R (hbase.secure.spnego.ui) 1221 0 R]
+/Names [(hbase.rpc) 4040 0 R (hbase.rpc.rows.warning.threshold) 504 0 R (hbase.rpc.shortoperation.timeout) 360 0 R (hbase.rpc.timeout) 356 0 R (hbase.rs.cacheblocksonwrite) 355 0 R (hbase.secure.bulkload) 1385 0 R (hbase.secure.configuration) 1225 0 R (hbase.secure.enable) 1389 0 R (hbase.secure.simpleconfiguration) 1267 0 R (hbase.secure.spnego.ui) 1220 0 R]
 >>
 endobj
 418 0 obj
@@ -52001,7 +52046,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -52562,7 +52607,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -53062,7 +53107,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -53607,7 +53652,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [455 0 R 456 0 R]
@@ -53627,7 +53672,7 @@ endobj
 endobj
 454 0 obj
 << /Limits [(hbase.limitetprivate.api) (hbase.master.logcleaner.plugins)]
-/Names [(hbase.limitetprivate.api) 621 0 R (hbase.local.dir) 201 0 R (hbase.mapreduce.classpath) 1123 0 R (hbase.master.balancer.maxRitPercent) 291 0 R (hbase.master.fileSplitTimeout) 213 0 R (hbase.master.hfilecleaner.plugins) 211 0 R (hbase.master.info.bindAddress) 205 0 R (hbase.master.info.port) 204 0 R (hbase.master.infoserver.redirect) 212 0 R (hbase.master.kerberos.principal) 373 0 R (hbase.master.keytab.file) 372 0 R (hbase.master.loadbalance.bytable) 457 0 R (hbase.master.loadbalancer.class) 453 0 R (hbase.master.logcleaner.plugins) 208 0 R]
+/Names [(hbase.limitetprivate.api) 621 0 R (hbase.local.dir) 201 0 R (hbase.mapreduce.classpath) 1122 0 R (hbase.master.balancer.maxRitPercent) 291 0 R (hbase.master.fileSplitTimeout) 213 0 R (hbase.master.hfilecleaner.plugins) 211 0 R (hbase.master.info.bindAddress) 205 0 R (hbase.master.info.port) 204 0 R (hbase.master.infoserver.redirect) 212 0 R (hbase.master.kerberos.principal) 373 0 R (hbase.master.keytab.file) 372 0 R (hbase.master.loadbalance.bytable) 457 0 R (hbase.master.loadbalancer.class) 453 0 R (hbase.master.logcleaner.plugins) 208 0 R]
 >>
 endobj
 455 0 obj
@@ -54281,7 +54326,7 @@ endobj
 /F4.0 35 0 R
 /F6.0 466 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [462 0 R 463 0 R]
@@ -54319,11 +54364,11 @@ endobj
 << /Type /Font
 /BaseFont /066905+mplus1mn-bold
 /Subtype /TrueType
-/FontDescriptor 4764 0 R
+/FontDescriptor 4763 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4766 0 R
-/ToUnicode 4765 0 R
+/Widths 4765 0 R
+/ToUnicode 4764 0 R
 >>
 endobj
 467 0 obj
@@ -54885,7 +54930,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -54898,7 +54943,7 @@ endobj
 endobj
 473 0 obj
 << /Limits [(hbase.defaults.for.version.skip) (hbase.hregion.percolumnfamilyflush.size.lower.bound.min)]
-/Names [(hbase.defaults.for.version.skip) 402 0 R (hbase.dfs.client.read.shortcircuit.buffer.size) 434 0 R (hbase.display.keys) 386 0 R (hbase.dynamic.jars.dir) 450 0 R (hbase.encryption.server) 1374 0 R (hbase.env.sh) 506 0 R (hbase.fix.version.in.jira) 3709 0 R (hbase.history) 4002 0 R (hbase.hregion.majorcompaction) 309 0 R (hbase.hregion.majorcompaction.jitter) 310 0 R (hbase.hregion.max.filesize) 306 0 R (hbase.hregion.memstore.block.multiplier) 304 0 R (hbase.hregion.memstore.flush.size) 299 0 R (hbase.hregion.memstore.mslab.enabled) 305 0 R (hbase.hregion.percolumnfamilyflush.size.lower.bound.min) 302 0 R]
+/Names [(hbase.defaults.for.version.skip) 402 0 R (hbase.dfs.client.read.shortcircuit.buffer.size) 434 0 R (hbase.display.keys) 386 0 R (hbase.dynamic.jars.dir) 450 0 R (hbase.encryption.server) 1373 0 R (hbase.env.sh) 506 0 R (hbase.fix.version.in.jira) 3707 0 R (hbase.history) 4001 0 R (hbase.hregion.majorcompaction) 309 0 R (hbase.hregion.majorcompaction.jitter) 310 0 R (hbase.hregion.max.filesize) 306 0 R (hbase.hregion.memstore.block.multiplier) 304 0 R (hbase.hregion.memstore.flush.size) 299 0 R (hbase.hregion.memstore.mslab.enabled) 305 0 R (hbase.hregion.percolumnfamilyflush.size.lower.bound.min) 302 0 R]
 >>
 endobj
 474 0 obj
@@ -55429,7 +55474,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -55940,7 +55985,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -56443,7 +56488,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -56459,7 +56504,7 @@ endobj
 endobj
 497 0 obj
 << /Limits [(hbase.mob.compaction.threads.max) (hbase.org)]
-/Names [(hbase.mob.compaction.threads.max) 499 0 R (hbase.mob.compactor.class) 498 0 R (hbase.mob.delfile.max.count) 494 0 R (hbase.mob.file.cache.size) 487 0 R (hbase.moduletest.run) 3430 0 R (hbase.moduletest.shell) 3425 0 R (hbase.moduletests) 3423 0 R (hbase.normalizer.period) 295 0 R (hbase.offpeak.end.hour) 330 0 R (hbase.offpeak.start.hour) 329 0 R (hbase.org) 3412 0 R]
+/Names [(hbase.mob.compaction.threads.max) 499 0 R (hbase.mob.compactor.class) 498 0 R (hbase.mob.delfile.max.count) 494 0 R (hbase.mob.file.cache.size) 487 0 R (hbase.moduletest.run) 3428 0 R (hbase.moduletest.shell) 3423 0 R (hbase.moduletests) 3421 0 R (hbase.normalizer.period) 295 0 R (hbase.offpeak.end.hour) 330 0 R (hbase.offpeak.start.hour) 329 0 R (hbase.org) 3410 0 R]
 >>
 endobj
 498 0 obj
@@ -56945,7 +56990,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -58098,7 +58143,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [512 0 R]
@@ -58877,7 +58922,7 @@ endobj
 /F3.0 33 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [515 0 R]
@@ -60334,7 +60379,7 @@ endobj
 /F3.0 33 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -60858,7 +60903,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -61511,7 +61556,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [530 0 R 531 0 R 533 0 R 534 0 R 535 0 R 540 0 R]
@@ -62266,7 +62311,7 @@ endobj
 /F2.0 29 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [546 0 R 549 0 R 552 0 R]
@@ -62305,7 +62350,7 @@ endobj
 endobj
 551 0 obj
 << /Limits [(configuration) (coprocessor-overview)]
-/Names [(configuration) 102 0 R (configuration-2) 3033 0 R (configuration-3) 3797 0 R (configuration-files) 108 0 R (configuration-from-scratch) 3690 0 R (configuration-properties) 1851 0 R (configuring-columns-for-mob) 1886 0 R (configuring-server-wide-behavior-of-bloom-filters) 2424 0 R (configuring-the-rest-server-and-client) 2073 0 R (confirm) 186 0 R (connection-setup) 4053 0 R (constraints) 1030 0 R (contributing-to-documentation-or-other-strings) 3732 0 R (coprocessor-implementation-overview) 2229 0 R (coprocessor-overview) 2226 0 R]
+/Names [(configuration) 102 0 R (configuration-2) 3032 0 R (configuration-3) 3794 0 R (configuration-files) 108 0 R (configuration-from-scratch) 3688 0 R (configuration-properties) 1849 0 R (configuring-columns-for-mob) 1884 0 R (configuring-server-wide-behavior-of-bloom-filters) 2423 0 R (configuring-the-rest-server-and-client) 2071 0 R (confirm) 186 0 R (connection-setup) 4052 0 R (constraints) 1029 0 R (contributing-to-documentation-or-other-strings) 3730 0 R (coprocessor-implementation-overview) 2228 0 R (coprocessor-overview) 2225 0 R]
 >>
 endobj
 552 0 obj
@@ -63167,7 +63212,7 @@ endobj
 /F4.0 35 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [556 0 R]
@@ -63981,7 +64026,7 @@ endobj
 /F5.1 45 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [560 0 R 561 0 R 562 0 R 566 0 R 569 0 R 570 0 R 571 0 R]
@@ -64723,7 +64768,7 @@ endobj
 /F1.1 38 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [575 0 R 576 0 R]
@@ -66155,7 +66200,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [580 0 R 581 0 R]
@@ -66932,7 +66977,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -67633,7 +67678,7 @@ endobj
 /F3.0 33 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -68964,7 +69009,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -70459,7 +70504,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -70625,7 +70670,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -70823,7 +70868,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [596 0 R 597 0 R 598 0 R 599 0 R 600 0 R]
@@ -71577,7 +71622,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [605 0 R]
@@ -72520,7 +72565,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [609 0 R 610 0 R 611 0 R]
@@ -74908,7 +74953,7 @@ endobj
 /F1.1 38 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [615 0 R 616 0 R]
@@ -75793,7 +75838,7 @@ endobj
 /F2.0 29 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [619 0 R]
@@ -76267,7 +76312,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [627 0 R 628 0 R 629 0 R 631 0 R 632 0 R 633 0 R]
@@ -77059,7 +77104,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [641 0 R]
@@ -77069,18 +77114,18 @@ endobj
 [635 0 R /XYZ 0 841.89 null]
 endobj
 637 0 obj
-<< /Limits [(standalone.over.hdfs) (table-variables)]
-/Names [(standalone.over.hdfs) 165 0 R (standalone_dist) 160 0 R (starting-and-stopping-the-rest-server) 2072 0 R (static-loading) 2263 0 R (static-unloading) 2266 0 R (store) 1693 0 R (store-file-ttl) 1843 0 R (store.file.dir) 1708 0 R (store.memstore) 1694 0 R (storefile-refresher) 1839 0 R (submit_doc_patch_procedure) 3733 0 R (submitting.patches) 3550 0 R (submitting.patches.create) 3555 0 R (submitting.patches.tests) 3561 0 R (supported.datatypes) 982 0 R (table) 801 0 R (table-variables) 751 0 R]
+<< /Limits [(standalone.over.hdfs) (table)]
+/Names [(standalone.over.hdfs) 165 0 R (standalone_dist) 160 0 R (starting-and-stopping-the-rest-server) 2070 0 R (static-loading) 2262 0 R (static-unloading) 2265 0 R (store) 1692 0 R (store-file-ttl) 1842 0 R (store.file.dir) 1707 0 R (store.memstore) 1693 0 R (storefile-refresher) 1838 0 R (submit_doc_patch_procedure) 3731 0 R (submitting.patches) 3548 0 R (submitting.patches.create) 3553 0 R (submitting.patches.tests) 3559 0 R (supported.datatypes) 981 0 R (table) 800 0 R]
 >>
 endobj
 638 0 obj
 << /Limits [(__anchor-top) (build.thrift)]
-/Kids [153 0 R 3251 0 R 1452 0 R 1933 0 R 1405 0 R 2512 0 R 1952 0 R 1990 0 R 1973 0 R 1910 0 R]
+/Kids [153 0 R 3249 0 R 1451 0 R 1931 0 R 1404 0 R 2511 0 R 1950 0 R 1988 0 R 1971 0 R 1908 0 R]
 >>
 endobj
 639 0 obj
 << /Limits [(hbase.mob.compaction.threads.max) (hbase.zookeeper.property.initLimit)]
-/Kids [497 0 R 3426 0 R 459 0 R 235 0 R 361 0 R 417 0 R 4042 0 R 447 0 R 264 0 R 3462 0 R 3433 0 R]
+/Kids [497 0 R 3424 0 R 459 0 R 235 0 R 361 0 R 417 0 R 4041 0 R 447 0 R 264 0 R 3460 0 R 3431 0 R]
 >>
 endobj
 640 0 obj
@@ -77744,7 +77789,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -78459,7 +78504,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [649 0 R]
@@ -78926,7 +78971,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -79650,7 +79695,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -80553,7 +80598,7 @@ endobj
 /Font << /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -81268,7 +81313,7 @@ endobj
 /Font << /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 /Annots [677 0 R 682 0 R]
@@ -82239,7 +82284,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 /Annots [693 0 R]
@@ -82282,7 +82327,7 @@ endobj
 endobj
 696 0 obj
 << /Limits [(upgrade2.0.rolling.upgrades) (user-interface)]
-/Names [(upgrade2.0.rolling.upgrades) 709 0 R (upgrade2.0.shaded.client.preferred) 704 0 R (upgrade2.0.shaded.client.preferred) 701 0 R (upgrade2.0.ui.splitmerge.by.row) 688 0 R (upgrade2.0.zkconfig) 680 0 R (upgrade2.0.zkconfig) 661 0 R (upgrading) 595 0 R (upgrading-2) 3790 0 R (use-cases-for-observer-coprocessors) 2241 0 R (user-interface) 1863 0 R]
+/Names [(upgrade2.0.rolling.upgrades) 709 0 R (upgrade2.0.shaded.client.preferred) 704 0 R (upgrade2.0.shaded.client.preferred) 701 0 R (upgrade2.0.ui.splitmerge.by.row) 688 0 R (upgrade2.0.zkconfig) 680 0 R (upgrade2.0.zkconfig) 661 0 R (upgrading) 595 0 R (upgrading-2) 3788 0 R (use-cases-for-observer-coprocessors) 2240 0 R (user-interface) 1861 0 R]
 >>
 endobj
 697 0 obj
@@ -83018,7 +83063,7 @@ endobj
 /F3.0 33 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -83643,7 +83688,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
@@ -83669,7 +83714,7 @@ endobj
 [708 0 R /XYZ 0 352.29 null]
 endobj
 715 0 obj
-<< /Length 2817
+<< /Length 2520
 >>
 stream
 q
@@ -83790,28 +83835,6 @@ ET
 
 0.0 0.0 0.0 SCN
 0.0 0.0 0.0 scn
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
-
-BT
-48.24 577.826 Td
-/F2.0 18 Tf
-[<31332e342e2055706772> 20.0195 <6164696e6720746f20322e78>] TJ
-ET
-
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
-0.2 0.2 0.2 scn
-0.2 0.2 0.2 SCN
-
-BT
-48.24 549.806 Td
-/F1.0 10.5 Tf
-<436f6d696e6720736f6f6ec9> Tj
-ET
-
-0.0 0.0 0.0 SCN
-0.0 0.0 0.0 scn
 q
 0.0 0.0 0.0 scn
 0.0 0.0 0.0 SCN
@@ -83849,7 +83872,7 @@ endobj
 /Font << /F1.0 10 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
@@ -83861,9 +83884,6 @@ endobj
 [716 0 R /XYZ 0 685.49 null]
 endobj
 719 0 obj
-[716 0 R /XYZ 0 601.85 null]
-endobj
-720 0 obj
 << /Length 4804
 >>
 stream
@@ -84192,7 +84212,7 @@ Q
 
 endstream
 endobj
-721 0 obj
+720 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -84200,22 +84220,22 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 720 0 R
+/Contents 719 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
-/Annots [723 0 R 724 0 R 725 0 R]
+/Annots [722 0 R 723 0 R 724 0 R]
 >>
 endobj
-722 0 obj
-[721 0 R /XYZ 0 841.89 null]
+721 0 obj
+[720 0 R /XYZ 0 841.89 null]
 endobj
-723 0 obj
+722 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -84226,7 +84246,7 @@ endobj
 /Type /Annot
 >>
 endobj
-724 0 obj
+723 0 obj
 << /Border [0 0 0]
 /Dest (shell_exercises)
 /Subtype /Link
@@ -84234,7 +84254,7 @@ endobj
 /Type /Annot
 >>
 endobj
-725 0 obj
+724 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -84245,7 +84265,7 @@ endobj
 /Type /Annot
 >>
 endobj
-726 0 obj
+725 0 obj
 << /Length 2127
 >>
 stream
@@ -84392,7 +84412,7 @@ Q
 
 endstream
 endobj
-727 0 obj
+726 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -84400,22 +84420,22 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 726 0 R
+/Contents 725 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
 endobj
-728 0 obj
-[727 0 R /XYZ 0 841.89 null]
+727 0 obj
+[726 0 R /XYZ 0 841.89 null]
 endobj
-729 0 obj
+728 0 obj
 << /Length 3143
 >>
 stream
@@ -84631,7 +84651,7 @@ Q
 
 endstream
 endobj
-730 0 obj
+729 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -84639,22 +84659,22 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 729 0 R
+/Contents 728 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
-/Annots [732 0 R]
+/Annots [731 0 R]
 >>
 endobj
-731 0 obj
-[730 0 R /XYZ 0 841.89 null]
+730 0 obj
+[729 0 R /XYZ 0 841.89 null]
 endobj
-732 0 obj
+731 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -84665,7 +84685,7 @@ endobj
 /Type /Annot
 >>
 endobj
-733 0 obj
+732 0 obj
 << /Length 9676
 >>
 stream
@@ -85225,7 +85245,7 @@ Q
 
 endstream
 endobj
-734 0 obj
+733 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -85233,7 +85253,7 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 733 0 R
+/Contents 732 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
@@ -85241,16 +85261,16 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
-/Annots [736 0 R]
+/Annots [735 0 R]
 >>
 endobj
-735 0 obj
-[734 0 R /XYZ 0 841.89 null]
+734 0 obj
+[733 0 R /XYZ 0 841.89 null]
 endobj
-736 0 obj
+735 0 obj
 << /Border [0 0 0]
 /Dest (hbase.shell.noninteractive)
 /Subtype /Link
@@ -85258,7 +85278,7 @@ endobj
 /Type /Annot
 >>
 endobj
-737 0 obj
+736 0 obj
 << /Length 8349
 >>
 stream
@@ -85763,7 +85783,7 @@ Q
 
 endstream
 endobj
-738 0 obj
+737 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -85771,22 +85791,22 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 737 0 R
+/Contents 736 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 33 0 R
 /F1.0 10 0 R
 /F4.0 35 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
 endobj
-739 0 obj
-[738 0 R /XYZ 0 416.519 null]
+738 0 obj
+[737 0 R /XYZ 0 416.519 null]
 endobj
-740 0 obj
+739 0 obj
 << /Length 3937
 >>
 stream
@@ -86040,7 +86060,7 @@ Q
 
 endstream
 endobj
-741 0 obj
+740 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -86048,22 +86068,22 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 740 0 R
+/Contents 739 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
 endobj
-742 0 obj
-[741 0 R /XYZ 0 841.89 null]
+741 0 obj
+[740 0 R /XYZ 0 841.89 null]
 endobj
-743 0 obj
+742 0 obj
 << /Length 7519
 >>
 stream
@@ -86525,7 +86545,7 @@ Q
 
 endstream
 endobj
-744 0 obj
+743 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -86533,18 +86553,18 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 743 0 R
+/Contents 742 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 33 0 R
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
 endobj
-745 0 obj
+744 0 obj
 << /Length 4042
 >>
 stream
@@ -86799,7 +86819,7 @@ Q
 
 endstream
 endobj
-746 0 obj
+745 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -86807,22 +86827,22 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 745 0 R
+/Contents 744 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
 endobj
-747 0 obj
-[746 0 R /XYZ 0 841.89 null]
+746 0 obj
+[745 0 R /XYZ 0 841.89 null]
 endobj
-748 0 obj
+747 0 obj
 << /Length 8003
 >>
 stream
@@ -87314,7 +87334,7 @@ Q
 
 endstream
 endobj
-749 0 obj
+748 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -87322,36 +87342,36 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 748 0 R
+/Contents 747 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 /F4.0 35 0 R
-/F7.0 752 0 R
+/F7.0 751 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
 endobj
+749 0 obj
+[748 0 R /XYZ 0 841.89 null]
+endobj
 750 0 obj
-[749 0 R /XYZ 0 841.89 null]
+[748 0 R /XYZ 0 765.17 null]
 endobj
 751 0 obj
-[749 0 R /XYZ 0 765.17 null]
-endobj
-752 0 obj
 << /Type /Font
 /BaseFont /9a0a42+mplus-1p-regular
 /Subtype /TrueType
-/FontDescriptor 4768 0 R
+/FontDescriptor 4767 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4770 0 R
-/ToUnicode 4769 0 R
+/Widths 4769 0 R
+/ToUnicode 4768 0 R
 >>
 endobj
-753 0 obj
+752 0 obj
 << /Length 10055
 >>
 stream
@@ -88011,7 +88031,7 @@ Q
 
 endstream
 endobj
-754 0 obj
+753 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -88019,18 +88039,18 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 753 0 R
+/Contents 752 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
-/F7.0 752 0 R
+/F7.0 751 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
 endobj
-755 0 obj
+754 0 obj
 << /Length 9661
 >>
 stream
@@ -88638,7 +88658,7 @@ Q
 
 endstream
 endobj
-756 0 obj
+755 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -88646,27 +88666,27 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 755 0 R
+/Contents 754 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F4.0 35 0 R
-/F7.0 752 0 R
+/F7.0 751 0 R
 /F2.0 29 0 R
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
-/Annots [759 0 R]
+/Annots [758 0 R]
 >>
 endobj
+756 0 obj
+[755 0 R /XYZ 0 609.75 null]
+endobj
 757 0 obj
-[756 0 R /XYZ 0 609.75 null]
+[755 0 R /XYZ 0 405.37 null]
 endobj
 758 0 obj
-[756 0 R /XYZ 0 405.37 null]
-endobj
-759 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -88677,7 +88697,7 @@ endobj
 /Type /Annot
 >>
 endobj
-760 0 obj
+759 0 obj
 << /Length 16310
 >>
 stream
@@ -89796,7 +89816,7 @@ Q
 
 endstream
 endobj
-761 0 obj
+760 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -89804,24 +89824,24 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 760 0 R
+/Contents 759 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
 endobj
+761 0 obj
+[760 0 R /XYZ 0 841.89 null]
+endobj
 762 0 obj
-[761 0 R /XYZ 0 841.89 null]
+[760 0 R /XYZ 0 601.13 null]
 endobj
 763 0 obj
-[761 0 R /XYZ 0 601.13 null]
-endobj
-764 0 obj
 << /Length 55646
 >>
 stream
@@ -95055,7 +95075,7 @@ Q
 
 endstream
 endobj
-765 0 obj
+764 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -95063,28 +95083,28 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 764 0 R
+/Contents 763 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 /F2.0 29 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
 endobj
+765 0 obj
+[764 0 R /XYZ 0 295.97 null]
+endobj
 766 0 obj
-[765 0 R /XYZ 0 295.97 null]
+[764 0 R /XYZ 0 255.89 null]
 endobj
 767 0 obj
-[765 0 R /XYZ 0 255.89 null]
+[764 0 R /XYZ 0 130.31 null]
 endobj
 768 0 obj
-[765 0 R /XYZ 0 130.31 null]
-endobj
-769 0 obj
 << /Length 4582
 >>
 stream
@@ -95432,7 +95452,7 @@ Q
 
 endstream
 endobj
-770 0 obj
+769 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -95440,24 +95460,24 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 769 0 R
+/Contents 768 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F4.0 35 0 R
 /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
 endobj
+770 0 obj
+[769 0 R /XYZ 0 757.15 null]
+endobj
 771 0 obj
-[770 0 R /XYZ 0 757.15 null]
+[769 0 R /XYZ 0 717.07 null]
 endobj
 772 0 obj
-[770 0 R /XYZ 0 717.07 null]
-endobj
-773 0 obj
 << /Length 10134
 >>
 stream
@@ -96046,7 +96066,7 @@ Q
 
 endstream
 endobj
-774 0 obj
+773 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -96054,22 +96074,22 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 773 0 R
+/Contents 772 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
 endobj
-775 0 obj
-[774 0 R /XYZ 0 841.89 null]
+774 0 obj
+[773 0 R /XYZ 0 841.89 null]
 endobj
-776 0 obj
+775 0 obj
 << /Length 31784
 >>
 stream
@@ -98586,7 +98606,7 @@ Q
 
 endstream
 endobj
-777 0 obj
+776 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -98594,7 +98614,7 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 776 0 R
+/Contents 775 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
@@ -98602,16 +98622,16 @@ endobj
 /F5.1 45 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
-/Annots [779 0 R 780 0 R 781 0 R]
+/Annots [778 0 R 779 0 R 780 0 R]
 >>
 endobj
-778 0 obj
-[777 0 R /XYZ 0 841.89 null]
+777 0 obj
+[776 0 R /XYZ 0 841.89 null]
 endobj
-779 0 obj
+778 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -98622,7 +98642,7 @@ endobj
 /Type /Annot
 >>
 endobj
-780 0 obj
+779 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -98633,7 +98653,7 @@ endobj
 /Type /Annot
 >>
 endobj
-781 0 obj
+780 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -98644,7 +98664,7 @@ endobj
 /Type /Annot
 >>
 endobj
-782 0 obj
+781 0 obj
 << /Length 30072
 >>
 stream
@@ -101608,7 +101628,7 @@ Q
 
 endstream
 endobj
-783 0 obj
+782 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -101616,17 +101636,17 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 782 0 R
+/Contents 781 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
 endobj
-784 0 obj
+783 0 obj
 << /Length 18673
 >>
 stream
@@ -103040,7 +103060,7 @@ Q
 
 endstream
 endobj
-785 0 obj
+784 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -103048,28 +103068,28 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 784 0 R
+/Contents 783 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
-/Annots [788 0 R]
+/Annots [787 0 R]
 >>
 endobj
-786 0 obj
-[785 0 R /XYZ 0 841.89 null]
+785 0 obj
+[784 0 R /XYZ 0 841.89 null]
 endobj
-787 0 obj
+786 0 obj
 << /Limits [(namespace) (number.of.cfs.card)]
-/Names [(namespace) 791 0 R (namespace_creation) 795 0 R (namespace_quotas) 3114 0 R (namespace_special) 796 0 R (network-saturation-the-winner) 2854 0 R (new-committers) 3572 0 R (new.version.behavior) 869 0 R (no.permanent.state.in.zk) 3713 0 R (node.management) 2976 0 R (non-root-block-index-format-in-version-2) 3948 0 R (normalizer) 3254 0 R (nosuchmethoderror-java-util-concurrent-concurrenthashmap-keyset) 2824 0 R (notes) 4067 0 R (number.of.cfs) 923 0 R (number.of.cfs.card) 925 0 R]
+/Names [(namespace) 790 0 R (namespace_creation) 794 0 R (namespace_quotas) 3113 0 R (namespace_special) 795 0 R (network-saturation-the-winner) 2853 0 R (new-committers) 3570 0 R (new.version.behavior) 868 0 R (no.permanent.state.in.zk) 3711 0 R (node.management) 2975 0 R (non-root-block-index-format-in-version-2) 3947 0 R (normalizer) 3252 0 R (nosuchmethoderror-java-util-concurrent-concurrenthashmap-keyset) 2823 0 R (notes) 4066 0 R (number.of.cfs) 922 0 R (number.of.cfs.card) 924 0 R]
 >>
 endobj
-788 0 obj
+787 0 obj
 << /Border [0 0 0]
 /Dest (regions.arch)
 /Subtype /Link
@@ -103077,7 +103097,7 @@ endobj
 /Type /Annot
 >>
 endobj
-789 0 obj
+788 0 obj
 << /Length 11890
 >>
 stream
@@ -103829,7 +103849,7 @@ Q
 
 endstream
 endobj
-790 0 obj
+789 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -103837,23 +103857,23 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 789 0 R
+/Contents 788 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
-/Annots [792 0 R 793 0 R 794 0 R]
+/Annots [791 0 R 792 0 R 793 0 R]
 >>
 endobj
-791 0 obj
-[790 0 R /XYZ 0 841.89 null]
+790 0 obj
+[789 0 R /XYZ 0 841.89 null]
 endobj
-792 0 obj
+791 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -103864,7 +103884,7 @@ endobj
 /Type /Annot
 >>
 endobj
-793 0 obj
+792 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -103875,7 +103895,7 @@ endobj
 /Type /Annot
 >>
 endobj
-794 0 obj
+793 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -103886,13 +103906,13 @@ endobj
 /Type /Annot
 >>
 endobj
+794 0 obj
+[789 0 R /XYZ 0 602.93 null]
+endobj
 795 0 obj
-[790 0 R /XYZ 0 602.93 null]
+[789 0 R /XYZ 0 173.639 null]
 endobj
 796 0 obj
-[790 0 R /XYZ 0 173.639 null]
-endobj
-797 0 obj
 << /Length 2258
 >>
 stream
@@ -104032,7 +104052,7 @@ Q
 
 endstream
 endobj
-798 0 obj
+797 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -104040,18 +104060,18 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 797 0 R
+/Contents 796 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 33 0 R
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
 endobj
-799 0 obj
+798 0 obj
 << /Length 595
 >>
 stream
@@ -104104,7 +104124,7 @@ Q
 
 endstream
 endobj
-800 0 obj
+799 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -104112,20 +104132,20 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 799 0 R
+/Contents 798 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
 endobj
-801 0 obj
-[800 0 R /XYZ 0 841.89 null]
+800 0 obj
+[799 0 R /XYZ 0 841.89 null]
 endobj
-802 0 obj
+801 0 obj
 << /Length 1185
 >>
 stream
@@ -104208,7 +104228,7 @@ Q
 
 endstream
 endobj
-803 0 obj
+802 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -104216,20 +104236,20 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 802 0 R
+/Contents 801 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
 endobj
-804 0 obj
-[803 0 R /XYZ 0 841.89 null]
+803 0 obj
+[802 0 R /XYZ 0 841.89 null]
 endobj
-805 0 obj
+804 0 obj
 << /Length 5433
 >>
 stream
@@ -104623,7 +104643,7 @@ Q
 
 endstream
 endobj
-806 0 obj
+805 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -104631,27 +104651,27 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 805 0 R
+/Contents 804 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
 >>
 endobj
-807 0 obj
-[806 0 R /XYZ 0 841.89 null]
+806 0 obj
+[805 0 R /XYZ 0 841.89 null]
 endobj
-808 0 obj
+807 0 obj
 << /Limits [(changing.compression) (client.external)]
-/Names [(changing.compression) 3902 0 R (changing.rowkeys) 967 0 R (chaos.monkey.properties) 3494 0 R (checking-for-success-or-failure-in-scripts) 739 0 R (choosing-region-servers-to-replicate-to) 3080 0 R (cleaning-logs) 3086 0 R (client) 4054 0 R (client-side-configuration-for-secure-operation) 1232 0 R (client-side-configuration-for-secure-operation-rest-gateway) 1257 0 R (client-side-configuration-for-simple-user-access-operation) 1278 0 R (client-side-configuration-for-simple-user-access-operation-rest-gateway) 1283 0 R (client-side-configuration-for-simple-user-access-operation-thrift-gateway) 1281 0 R (client-side-properties) 1860 0 R (client.connection.pooling) 1438 0 R (client.connections) 1427 0 R (client.external) 1455 0 R]
+/Names [(changing.compression) 3899 0 R (changing.rowkeys) 966 0 R (chaos.monkey.properties) 3492 0 R (checking-for-success-or-failure-in-scripts) 738 0 R (choosing-region-servers-to-replicate-to) 3079 0 R (cleaning-logs) 3085 0 R (client) 4053 0 R (client-side-configuration-for-secure-operation) 1231 0 R (client-side-configuration-for-secure-operation-rest-gateway) 1256 0 R (client-side-configuration-for-simple-user-access-operation) 1277 0 R (client-side-configuration-for-simple-user-access-operation-rest-gateway) 1282 0 R (client-side-configuration-for-simple-user-access-operation-thrift-gateway) 1280 0 R (client-side-properties) 1858 0 R (client.connection.pooling) 1437 0 R (client.connections) 1426 0 R (client.external) 1454 0 R]
 >>
 endobj
-809 0 obj
+808 0 obj
 << /Length 1153
 >>
 stream
@@ -104748,7 +104768,7 @@ Q
 
 endstream
 endobj
-810 0 obj
+809 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -104756,22 +104776,22 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 809 0 R
+/Contents 808 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4513 0 R
+/XObject << /Stamp1 4512 0 R
 >>
 >>
 >>
 endobj
-811 0 obj
-[810 0 R /XYZ 0 841.89 null]
+810 0 obj
+[809 0 R /XYZ 0 841.89 null]
 endobj
-812 0 obj
+811 0 obj
 << /Length 24493
 >>
 stream
@@ -106936,7 +106956,7 @@ Q
 
 endstream
 endobj
-813 0 obj
+812 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 595.28 841.89]
@@ -106944,27 +106964,27 @@ endobj
 /BleedBox [0 0 595.28 841.89]
 /TrimBox [0 0 595.28 841.89]
 /ArtBox [0 0 595.28 841.89]
-/Contents 812 0 R
+/Contents 811 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4514 0 R
+/XObject << /Stamp2 4513 0 R
 >>
 >>
-/Annots [816 0 R 818 0 R 819 0 R 821 0 R 822 0 R 823 0 R 825 0 R 826 0 R]
+/Annots [815 0 R 817 0 R 818 0 R 820 0 R 821 0 R 822 0 R 824 0 R 825 0 R]
 >>
 endobj
-814 0 obj
-[813 0 R /XYZ 0 841.89 null]
+813 0 obj
+[812 0 R /XYZ 0 841.89 null]
 endobj
-815 0 obj
+814 0 obj
 << /Limits [(dfs.datanode.max.transfer.threads) (dyn_config)]
-/Names [(dfs.datanode.max.transfer.threads) 152 0 R (dfs.domain.socket.path) 431 0 R (dialog) 3600 0 R (direct.memory) 1576 0 R (disable-nagle-for-rpc) 1092 0 R (disable.splitting) 555 0 R (disabling-metrics) 3011 0 R (disabling.blockcache) 567 0 R (discovering.available.metrics) 3012 0 R (distributed) 166 0 R (distributed.log.replay.failure.reasons) 1633 0 R (distributed.log.splitting) 1622 0 R (dm.column.metadata) 886 0 R (dm.sort) 883 0 R (do-not-edit-jira-comments) 3601 0 R (document-the-backup-and-restore-strategy-and-ideally-log-information-about-each-backup) 2008 0 R (documentation) 3407 0 R (draining.servers) 2982 0 R (driver) 2903 0 R (dyn_config) 588 0 R]
+/Names [(dfs.datanode.max.transfer.threads) 152 0 R (dfs.domain.socket.path) 431 0 R (dialog) 3598 0 R (direct.memory) 1575 0 R (disable-nagle-for-rpc) 1091 0 R (disable.splitting) 555 0 R (disabling-metrics) 3010 0 R (disabling.blockcache) 567 0 R (discovering.available.metrics) 3011 0 R (distributed) 166 0 R (distributed.log.replay.failure.reasons) 1632 0 R (distributed.log.splitting) 1621 0 R (dm.column.metadata) 885 0 R (dm.sort) 882 0 R (do-not-edit-jira-comments) 3599 0 R (document-the-backup-and-restore-strategy-and-ideally-log-information-about-each-backup) 2006 0 R (documentation) 3405 0 R (draining.servers) 2981 0 R (driver) 2902 0 R (dyn_config) 588 0 R]
 >>
 endobj
-816 0 obj
+815 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -106975,10 +106995,10 @@ endobj
 /Type /Annot
 >>
 endobj
-817 0 obj
-[813 0 R /XYZ 0 721.61 null]
+816 0 obj
+[812 0 R /XYZ 0 721.61 null]
 endobj
-818 0 obj
+817 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -106989,7 +107009,7 @@ endobj
 /Type /Annot
 >>
 endobj
-819 0 obj
+818 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -107000,10 +107020,10 @@ endobj
 /Type /Annot
 >>
 endobj
-820 0 obj
-[813 0 R /XYZ 0 653.75 null]
+819 0 obj
+[812 0 R /XYZ 0 653.75 null]
 endobj
-821 0 obj
+820 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -107014,7 +107034,7 @@ endobj
 /Type /Annot
 >>
 endobj
-822 0 obj
+821 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -107025,7 +107045,7 @@ endobj
 /Type /Annot
 >>
 endobj
-823 0 obj
+822 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -107036,10 +107056,10 @@ endobj
 /Type /Annot
 >>
 endobj
-824 0 obj
-[813 0 R /XYZ 0 570.11 null]
+823 0 obj
+[812 0 R /XYZ 0 570.11 null]
 endobj
-825 0 obj
+824 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -107050,7 +107070,7 @@ endobj
 /Type /Annot
 >>
 endobj
-826 0 obj
+825 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -107061,7 +107081,7 @@ endobj
 /Type /Annot
 >>
 endobj
-827 0 obj
+826 0 obj
 << /Length 2778
 >>
 stream
@@ -107270,7 +1072

<TRUNCATED>

[22/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index ba8ce97..2359974 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@ under the License.
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
       <title>File: 3595,
-             Errors: 15918,
+             Errors: 15919,
              Warnings: 0,
              Infos: 0
       </title>
@@ -31784,6 +31784,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.java">org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.CompressionTest.java">org/apache/hadoop/hbase/util/CompressionTest.java</a>
                 </td>
                 <td>
@@ -38308,20 +38322,6 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.java">org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.java</a>
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  0
-                </td>
-                <td>
-                  0
-                </td>
-              </tr>
-                          <tr>
-                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestReversibleScanners.java">org/apache/hadoop/hbase/regionserver/TestReversibleScanners.java</a>
                 </td>
                 <td>
@@ -46675,7 +46675,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  7
+                  8
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index bbd2f25..77f8b3c 100644
--- a/coc.html
+++ b/coc.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -178,9 +178,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -368,7 +365,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 982e932..8b07515 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -433,7 +430,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 625156f..102c74b 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -1098,7 +1095,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 15a9c7b..b302ef8 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -306,7 +303,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index bef8066..a0bc28e 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -962,7 +959,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 6278415..0c09a5e 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3740,21 +3740,21 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Tue Mar 27 14:41:06 UTC 2018"</code></td>
+<td class="colLast"><code>"Wed Mar 28 14:41:56 UTC 2018"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"2a2258656b2fcd92b967131b6c1f037363553bc4"</code></td>
+<td class="colLast"><code>"3b6199a27a944f9f05ca6512c59766ed0f590f48"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"0ac27d9622b43e6640dae3b6098bf95f"</code></td>
+<td class="colLast"><code>"20863c5ee3226f9f8eadc881825e7019"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html
index 0c6da25..4d6ff6b 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static interface <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.291">FileIOEngine.FileAccessor</a></pre>
+<pre>private static interface <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.294">FileIOEngine.FileAccessor</a></pre>
 </li>
 </ul>
 </div>
@@ -155,7 +155,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>access</h4>
-<pre>int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html#line.292">access</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/channels/FileChannel.html?is-external=true" title="class or interface in java.nio.channels">FileChannel</a>&nbsp;fileChannel,
+<pre>int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html#line.295">access</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/channels/FileChannel.html?is-external=true" title="class or interface in java.nio.channels">FileChannel</a>&nbsp;fileChannel,
            <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;byteBuffer,
            long&nbsp;accessOffset)
     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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html
index 5a12b22..101aabf 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.296">FileIOEngine.FileReadAccessor</a>
+<pre>private static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.299">FileIOEngine.FileReadAccessor</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine.FileAccessor</a></pre>
 </li>
@@ -191,7 +191,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FileReadAccessor</h4>
-<pre>private&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html#line.296">FileReadAccessor</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html#line.299">FileReadAccessor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -208,7 +208,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockListLast">
 <li class="blockList">
 <h4>access</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html#line.298">access</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/channels/FileChannel.html?is-external=true" title="class or interface in java.nio.channels">FileChannel</a>&nbsp;fileChannel,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html#line.301">access</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/channels/FileChannel.html?is-external=true" title="class or interface in java.nio.channels">FileChannel</a>&nbsp;fileChannel,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;byteBuffer,
                   long&nbsp;accessOffset)
            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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html
index e94e4c4..a773db5 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.304">FileIOEngine.FileWriteAccessor</a>
+<pre>private static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.307">FileIOEngine.FileWriteAccessor</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine.FileAccessor</a></pre>
 </li>
@@ -191,7 +191,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FileWriteAccessor</h4>
-<pre>private&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html#line.304">FileWriteAccessor</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html#line.307">FileWriteAccessor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -208,7 +208,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockListLast">
 <li class="blockList">
 <h4>access</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html#line.306">access</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/channels/FileChannel.html?is-external=true" title="class or interface in java.nio.channels">FileChannel</a>&nbsp;fileChannel,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html#line.309">access</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/channels/FileChannel.html?is-external=true" title="class or interface in java.nio.channels">FileChannel</a>&nbsp;fileChannel,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;byteBuffer,
                   long&nbsp;accessOffset)
            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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html
index d04c779..ee219d8 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.45">FileIOEngine</a>
+public class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.46">FileIOEngine</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a></pre>
 <div class="block">IO engine that stores data to a file on the local file system.</div>
@@ -341,7 +341,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <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/io/hfile/bucket/FileIOEngine.html#line.46">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.47">LOG</a></pre>
 </li>
 </ul>
 <a name="FILE_DELIMITER">
@@ -350,7 +350,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>FILE_DELIMITER</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/io/hfile/bucket/FileIOEngine.html#line.47">FILE_DELIMITER</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/io/hfile/bucket/FileIOEngine.html#line.48">FILE_DELIMITER</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.bucket.FileIOEngine.FILE_DELIMITER">Constant Field Values</a></dd>
@@ -363,7 +363,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>filePaths</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.48">filePaths</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.49">filePaths</a></pre>
 </li>
 </ul>
 <a name="fileChannels">
@@ -372,7 +372,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>fileChannels</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/channels/FileChannel.html?is-external=true" title="class or interface in java.nio.channels">FileChannel</a>[] <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.49">fileChannels</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/channels/FileChannel.html?is-external=true" title="class or interface in java.nio.channels">FileChannel</a>[] <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.50">fileChannels</a></pre>
 </li>
 </ul>
 <a name="rafs">
@@ -381,7 +381,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>rafs</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/RandomAccessFile.html?is-external=true" title="class or interface in java.io">RandomAccessFile</a>[] <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.50">rafs</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/RandomAccessFile.html?is-external=true" title="class or interface in java.io">RandomAccessFile</a>[] <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.51">rafs</a></pre>
 </li>
 </ul>
 <a name="sizePerFile">
@@ -390,7 +390,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>sizePerFile</h4>
-<pre>private final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.52">sizePerFile</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.53">sizePerFile</a></pre>
 </li>
 </ul>
 <a name="capacity">
@@ -399,7 +399,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>capacity</h4>
-<pre>private final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.53">capacity</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.54">capacity</a></pre>
 </li>
 </ul>
 <a name="readAccessor">
@@ -408,7 +408,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>readAccessor</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine.FileReadAccessor</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.55">readAccessor</a></pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine.FileReadAccessor</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.56">readAccessor</a></pre>
 </li>
 </ul>
 <a name="writeAccessor">
@@ -417,7 +417,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockListLast">
 <li class="blockList">
 <h4>writeAccessor</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine.FileWriteAccessor</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.56">writeAccessor</a></pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine.FileWriteAccessor</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.57">writeAccessor</a></pre>
 </li>
 </ul>
 </li>
@@ -434,7 +434,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FileIOEngine</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.58">FileIOEngine</a>(long&nbsp;capacity,
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.59">FileIOEngine</a>(long&nbsp;capacity,
                     boolean&nbsp;maintainPersistence,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;filePaths)
              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>
@@ -458,7 +458,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <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/io/hfile/bucket/FileIOEngine.html#line.103">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/io/hfile/bucket/FileIOEngine.html#line.104">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -471,7 +471,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>isPersistent</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.113">isPersistent</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.114">isPersistent</a>()</pre>
 <div class="block">File IO engine is always able to support persistent storage for the cache</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -487,7 +487,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>read</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.126">read</a>(long&nbsp;offset,
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.127">read</a>(long&nbsp;offset,
                       int&nbsp;length,
                       <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;deserializer)
                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>
@@ -513,7 +513,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>closeFileChannels</h4>
-<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.145">closeFileChannels</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.146">closeFileChannels</a>()</pre>
 </li>
 </ul>
 <a name="write-java.nio.ByteBuffer-long-">
@@ -522,7 +522,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>write</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.162">write</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;srcBuffer,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.163">write</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;srcBuffer,
                   long&nbsp;offset)
            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">Transfers data from the given byte buffer to file</div>
@@ -543,7 +543,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>sync</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.174">sync</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.175">sync</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">Sync the data to file after writing</div>
 <dl>
@@ -560,7 +560,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.191">shutdown</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.192">shutdown</a>()</pre>
 <div class="block">Close the file</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -574,7 +574,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>write</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.207">write</a>(<a href="../../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;srcBuffer,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.208">write</a>(<a href="../../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;srcBuffer,
                   long&nbsp;offset)
            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/io/hfile/bucket/IOEngine.html#write-org.apache.hadoop.hbase.nio.ByteBuff-long-">IOEngine</a></code></span></div>
@@ -596,7 +596,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>accessFile</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.214">accessFile</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine.FileAccessor</a>&nbsp;accessor,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.215">accessFile</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine.FileAccessor</a>&nbsp;accessor,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer,
                         long&nbsp;globalOffset)
                  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>
@@ -612,7 +612,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>getAbsoluteOffsetInFile</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.260">getAbsoluteOffsetInFile</a>(int&nbsp;fileNum,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.263">getAbsoluteOffsetInFile</a>(int&nbsp;fileNum,
                                      long&nbsp;globalOffset)</pre>
 <div class="block">Get the absolute offset in given file with the relative global offset.</div>
 <dl>
@@ -630,7 +630,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileNum</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.264">getFileNum</a>(long&nbsp;offset)</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.267">getFileNum</a>(long&nbsp;offset)</pre>
 </li>
 </ul>
 <a name="getFileChannels--">
@@ -639,7 +639,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileChannels</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/nio/channels/FileChannel.html?is-external=true" title="class or interface in java.nio.channels">FileChannel</a>[]&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.277">getFileChannels</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/nio/channels/FileChannel.html?is-external=true" title="class or interface in java.nio.channels">FileChannel</a>[]&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.280">getFileChannels</a>()</pre>
 </li>
 </ul>
 <a name="refreshFileConnection-int-">
@@ -648,7 +648,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockListLast">
 <li class="blockList">
 <h4>refreshFileConnection</h4>
-<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.282">refreshFileConnection</a>(int&nbsp;accessFileNum)
+<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#line.285">refreshFileConnection</a>(int&nbsp;accessFileNum)
                     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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
index df71231..bf38432 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
@@ -1277,7 +1277,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <li class="blockList">
 <h4>SCANNER_ALREADY_CLOSED</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>
-private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2913">SCANNER_ALREADY_CLOSED</a></pre>
+private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2916">SCANNER_ALREADY_CLOSED</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -2122,7 +2122,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionLoad</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1770">getRegionLoad</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1773">getRegionLoad</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest&nbsp;request)
                                                                                                   throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2139,7 +2139,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>clearCompactionQueues</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1798">clearCompactionQueues</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1801">clearCompactionQueues</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest&nbsp;request)
                                                                                                                   throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2156,7 +2156,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerInfo</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1843">getServerInfo</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1846">getServerInfo</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest&nbsp;request)
                                                                                                   throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Get some information of the region server.</div>
@@ -2177,7 +2177,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFile</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1857">getStoreFile</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1860">getStoreFile</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                        org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest&nbsp;request)
                                                                                                 throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2194,7 +2194,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>openRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1908">openRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1911">openRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                    org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest&nbsp;request)
                                                                                             throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Open asynchronously a region or a set of regions on the region server.
@@ -2232,7 +2232,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>warmupRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2062">warmupRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2065">warmupRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                        org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest&nbsp;request)
                                                                                                 throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Wamrmup a region on this server.
@@ -2257,7 +2257,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>replay</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2112">replay</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2115">replay</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                       org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest&nbsp;request)
                                                                                                throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Replay the given changes when distributedLogReplay WAL edits from a failed RS. The guarantee is
@@ -2280,7 +2280,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>replicateWALEntry</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2211">replicateWALEntry</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2214">replicateWALEntry</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                  org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest&nbsp;request)
                                                                                                           throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Replicate WAL entries on the region server.</div>
@@ -2301,7 +2301,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWALWriter</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2240">rollWALWriter</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2243">rollWALWriter</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest&nbsp;request)
                                                                                                   throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Roll the WAL writer of the region server.</div>
@@ -2322,7 +2322,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>stopServer</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2265">stopServer</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2268">stopServer</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                    org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest&nbsp;request)
                                                                                             throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Stop the region server.</div>
@@ -2343,7 +2343,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>updateFavoredNodes</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2274">updateFavoredNodes</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2277">updateFavoredNodes</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                    org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest&nbsp;request)
                                                                                                             throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2360,7 +2360,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>bulkLoadHFile</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2295">bulkLoadHFile</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2298">bulkLoadHFile</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                           org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest&nbsp;request)
                                                                                                    throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Atomically bulk load several HFiles into an open region</div>
@@ -2380,7 +2380,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareBulkLoad</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2369">prepareBulkLoad</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2372">prepareBulkLoad</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                               org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest&nbsp;request)
                                                                                                        throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2397,7 +2397,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupBulkLoad</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2387">cleanupBulkLoad</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2390">cleanupBulkLoad</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                               org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest&nbsp;request)
                                                                                                        throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2414,7 +2414,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>execService</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2404">execService</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2407">execService</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                              org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest&nbsp;request)
                                                                                                       throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2431,7 +2431,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>execServiceOnRegion</h4>
-<pre>private&nbsp;com.google.protobuf.Message&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2424">execServiceOnRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>private&nbsp;com.google.protobuf.Message&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2427">execServiceOnRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                                                         org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceCall&nbsp;serviceCall)
                                                  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>
@@ -2446,7 +2446,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2439">get</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2442">get</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                       org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest&nbsp;request)
                                                                                throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Get data from a table.</div>
@@ -2467,7 +2467,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2522">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2525">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
                    <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                    <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannersCloseCallBack</a>&nbsp;closeCallBack,
                    <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context)
@@ -2484,7 +2484,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>checkBatchSizeAndLogLargeSize</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2573">checkBatchSizeAndLogLargeSize</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest&nbsp;request)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2576">checkBatchSizeAndLogLargeSize</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest&nbsp;request)</pre>
 </li>
 </ul>
 <a name="multi-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest-">
@@ -2493,7 +2493,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>multi</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2595">multi</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;rpcc,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2598">multi</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;rpcc,
                                                                                           org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest&nbsp;request)
                                                                                    throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Execute multiple actions on a table: get, mutate, and/or execCoprocessor</div>
@@ -2514,7 +2514,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>skipCellsForMutations</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2714">skipCellsForMutations</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&gt;&nbsp;actions,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2717">skipCellsForMutations</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&gt;&nbsp;actions,
                                    <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner)</pre>
 </li>
 </ul>
@@ -2524,7 +2524,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>skipCellsForMutation</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2723">skipCellsForMutation</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&nbsp;action,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2726">skipCellsForMutation</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&nbsp;action,
                                   <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner)</pre>
 </li>
 </ul>
@@ -2534,7 +2534,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>mutate</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2751">mutate</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;rpcc,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2754">mutate</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;rpcc,
                                                                                             org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest&nbsp;request)
                                                                                      throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Mutate data in a table.</div>
@@ -2555,7 +2555,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionScanner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2923">getRegionScanner</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2926">getRegionScanner</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request)
                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2569,7 +2569,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>newRegionScanner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2964">newRegionScanner</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2967">newRegionScanner</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request,
                                                            org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse.Builder&nbsp;builder)
                                                     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>
@@ -2584,7 +2584,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>checkScanNextCallSeq</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3000">checkScanNextCallSeq</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3003">checkScanNextCallSeq</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request,
                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;rsh)
                            throws <a href="../../../../../org/apache/hadoop/hbase/exceptions/OutOfOrderScannerNextException.html" title="class in org.apache.hadoop.hbase.exceptions">OutOfOrderScannerNextException</a></pre>
 <dl>
@@ -2599,7 +2599,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>addScannerLeaseBack</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3015">addScannerLeaseBack</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.Lease.html" title="class in org.apache.hadoop.hbase.regionserver">Leases.Lease</a>&nbsp;lease)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3018">addScannerLeaseBack</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.Lease.html" title="class in org.apache.hadoop.hbase.regionserver">Leases.Lease</a>&nbsp;lease)</pre>
 </li>
 </ul>
 <a name="getTimeLimit-org.apache.hadoop.hbase.ipc.HBaseRpcController-boolean-">
@@ -2608,7 +2608,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeLimit</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3024">getTimeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;controller,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3027">getTimeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;controller,
                           boolean&nbsp;allowHeartbeatMessages)</pre>
 </li>
 </ul>
@@ -2618,7 +2618,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>checkLimitOfRows</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3051">checkLimitOfRows</a>(int&nbsp;numOfCompleteRows,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3054">checkLimitOfRows</a>(int&nbsp;numOfCompleteRows,
                               int&nbsp;limitOfRows,
                               boolean&nbsp;moreRows,
                               <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext,
@@ -2631,7 +2631,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>scan</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3063">scan</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;controller,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3066">scan</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;controller,
                   org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request,
                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;rsh,
                   long&nbsp;maxQuotaResultSize,
@@ -2654,7 +2654,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>scan</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3248">scan</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3251">scan</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                         org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest&nbsp;request)
                                                                                  throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Scan data in a table.</div>
@@ -2675,7 +2675,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>closeScanner</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3482">closeScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3485">closeScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                           <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;scanner,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;scannerName,
                           <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context)
@@ -2692,7 +2692,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>execRegionServerService</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3505">execRegionServerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3508">execRegionServerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest&nbsp;request)
                                                                                                                   throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2709,7 +2709,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>updateConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3512">updateConfiguration</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3515">updateConfiguration</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                      org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest&nbsp;request)
                                                                                                               throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2726,7 +2726,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>getSpaceQuotaSnapshots</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3524">getSpaceQuotaSnapshots</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3527">getSpaceQuotaSnapshots</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                            org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest&nbsp;request)
                                                                                                                     throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -2743,7 +2743,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>clearRegionBlockCache</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3547">clearRegionBlockCache</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3550">clearRegionBlockCache</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest&nbsp;request)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -2757,7 +2757,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockListLast">
 <li class="blockList">
 <h4>executeProcedures</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3566">executeProcedures</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.3569">executeProcedures</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                  org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest&nbsp;request)
                                                                                                           throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index b0c1751..ffa3b9b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,11 +16,11 @@
 <span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
 <span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
-<span class="sourceLineNo">011</span>  public static final String revision = "2a2258656b2fcd92b967131b6c1f037363553bc4";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "3b6199a27a944f9f05ca6512c59766ed0f590f48";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Tue Mar 27 14:41:06 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Wed Mar 28 14:41:56 UTC 2018";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://jenkins-websites1.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String srcChecksum = "0ac27d9622b43e6640dae3b6098bf95f";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "20863c5ee3226f9f8eadc881825e7019";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 


[11/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
index eccc4a3..ebbde54 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
@@ -1744,1869 +1744,1872 @@
 <span class="sourceLineNo">1736</span>      HRegion region = getRegion(request.getRegion());<a name="line.1736"></a>
 <span class="sourceLineNo">1737</span>      RegionInfo info = region.getRegionInfo();<a name="line.1737"></a>
 <span class="sourceLineNo">1738</span>      byte[] bestSplitRow = null;<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>        HRegion r = region;<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        r.forceSplit(null);<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>        bestSplitRow = r.checkSplit();<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        // try to flush region first<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        if(bestSplitRow == null) {<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>          r.flush(true);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>          bestSplitRow = r.checkSplit();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        r.clearSplit();<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      }<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      }<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      builder.setSplittable(region.isSplittable());<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      builder.setMergeable(region.isMergeable());<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      return builder.build();<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>    } catch (IOException ie) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      throw new ServiceException(ie);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span><a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  @Override<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span><a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    List&lt;HRegion&gt; regions;<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    if (request.hasTableName()) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      regions = regionServer.getRegions(tableName);<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>    } else {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>      regions = regionServer.getRegions();<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    }<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span><a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    try {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      for (HRegion region : regions) {<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      }<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    } catch (IOException e) {<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      throw new ServiceException(e);<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    }<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>    builder.addAllRegionLoads(rLoads);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    return builder.build();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>  }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>  @Override<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>    requestCount.increment();<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      try {<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>        checkOpen();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>          switch (queueName) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            case "long":<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>              break;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            case "short":<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1815"></a>
+<span class="sourceLineNo">1739</span>      boolean shouldSplit = true;<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        HRegion r = region;<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        r.forceSplit(null);<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // Even after setting force split if split policy says no to split then we should not split.<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        shouldSplit = region.getSplitPolicy().shouldSplit() &amp;&amp; !info.isMetaRegion();<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>        bestSplitRow = r.checkSplit();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        // try to flush region first<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>        if(bestSplitRow == null) {<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>          r.flush(true);<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>          bestSplitRow = r.checkSplit();<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        }<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        r.clearSplit();<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      }<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      builder.setSplittable(region.isSplittable() &amp;&amp; shouldSplit);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      builder.setMergeable(region.isMergeable());<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>      }<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      return builder.build();<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>    } catch (IOException ie) {<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      throw new ServiceException(ie);<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    }<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>  }<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span><a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>  @Override<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span><a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>    List&lt;HRegion&gt; regions;<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    if (request.hasTableName()) {<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>      regions = regionServer.getRegions(tableName);<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>    } else {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>      regions = regionServer.getRegions();<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>    }<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    try {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      for (HRegion region : regions) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    } catch (IOException e) {<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>      throw new ServiceException(e);<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>    builder.addAllRegionLoads(rLoads);<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    return builder.build();<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  }<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span><a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>  @Override<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>    requestCount.increment();<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>      try {<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        checkOpen();<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>          switch (queueName) {<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            case "long":<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1815"></a>
 <span class="sourceLineNo">1816</span>              break;<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            default:<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>              throw new IOException("Unknown queue name " + queueName);<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>          }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>      } catch (IOException ie) {<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>        throw new ServiceException(ie);<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      } finally {<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        clearCompactionQueues.set(false);<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      }<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    } else {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>    }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    return respBuilder.build();<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>  }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>  /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>   * Get some information of the region server.<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>   *<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>   * @param controller the RPC controller<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>   * @param request the request<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>   * @throws ServiceException<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>   */<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>  @Override<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    try {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>      checkOpen();<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    } catch (IOException ie) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>      throw new ServiceException(ie);<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>    }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>    requestCount.increment();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>  }<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span><a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>  @Override<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    try {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>      checkOpen();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      HRegion region = getRegion(request.getRegion());<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      requestCount.increment();<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (request.getFamilyCount() == 0) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>      } else {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>          columnFamilies.add(cf.toByteArray());<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        }<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      int nCF = columnFamilies.size();<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      builder.addAllStoreFile(fileList);<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>      return builder.build();<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>    } catch (IOException ie) {<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>      throw new ServiceException(ie);<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>  }<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span><a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>  /**<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>   *<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>   * &lt;p&gt;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>   * Different manages states for the region are:<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>   *  &lt;/ul&gt;<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>   * &lt;p&gt;<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>   * &lt;/p&gt;<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>   * @param controller the RPC controller<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>   * @param request the request<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>   * @throws ServiceException<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>   */<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>  @Override<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>    requestCount.increment();<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>    if (request.hasServerStartCode()) {<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      // check that we are the same server that this RPC is intended for.<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long serverStartCode = request.getServerStartCode();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      if (regionServer.serverName.getStartcode() !=  serverStartCode) {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        throw new ServiceException(new DoNotRetryIOException("This RPC was intended for a " +<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>            "different server with startCode: " + serverStartCode + ", this server is: "<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>            + regionServer.serverName));<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>    }<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span><a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    try {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      checkOpen();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    } catch (IOException ie) {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      TableName tableName = null;<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      if (regionCount == 1) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>        if (ri != null) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>        throw new ServiceException(ie);<a name="line.1936"></a>
+<span class="sourceLineNo">1817</span>            case "short":<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>              break;<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            default:<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              throw new IOException("Unknown queue name " + queueName);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>          }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>        }<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>      } catch (IOException ie) {<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>        throw new ServiceException(ie);<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      } finally {<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        clearCompactionQueues.set(false);<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>      }<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    } else {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>    }<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    return respBuilder.build();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>  }<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span><a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>  /**<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>   * Get some information of the region server.<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>   *<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>   * @param controller the RPC controller<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>   * @param request the request<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>   * @throws ServiceException<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>   */<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>  @Override<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    try {<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>      checkOpen();<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>    } catch (IOException ie) {<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>      throw new ServiceException(ie);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>    }<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    requestCount.increment();<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>  }<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span><a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>  @Override<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>    try {<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      checkOpen();<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      HRegion region = getRegion(request.getRegion());<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      requestCount.increment();<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>      if (request.getFamilyCount() == 0) {<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      } else {<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>          columnFamilies.add(cf.toByteArray());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        }<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      int nCF = columnFamilies.size();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      builder.addAllStoreFile(fileList);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      return builder.build();<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    } catch (IOException ie) {<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>      throw new ServiceException(ie);<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>    }<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  }<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span><a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>  /**<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>   *<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>   * &lt;p&gt;<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>   * Different manages states for the region are:<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>   *  &lt;/ul&gt;<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>   * &lt;p&gt;<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>   * &lt;/p&gt;<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>   * @param controller the RPC controller<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>   * @param request the request<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>   * @throws ServiceException<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>   */<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>  @Override<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    requestCount.increment();<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>    if (request.hasServerStartCode()) {<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      // check that we are the same server that this RPC is intended for.<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      long serverStartCode = request.getServerStartCode();<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (regionServer.serverName.getStartcode() !=  serverStartCode) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        throw new ServiceException(new DoNotRetryIOException("This RPC was intended for a " +<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>            "different server with startCode: " + serverStartCode + ", this server is: "<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>            + regionServer.serverName));<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>    }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>    try {<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>      checkOpen();<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    } catch (IOException ie) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>      TableName tableName = null;<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      if (regionCount == 1) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        if (ri != null) {<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>        }<a name="line.1936"></a>
 <span class="sourceLineNo">1937</span>      }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>      synchronized (regionServer.online) {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>        try {<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>          }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>          checkOpen();<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>        } catch (InterruptedException t) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          Thread.currentThread().interrupt();<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          throw new ServiceException(t);<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>        } catch (IOException e) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          throw new ServiceException(e);<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>        }<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>      }<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    }<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span><a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      TableDescriptor htd;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      try {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        String encodedName = region.getEncodedName();<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>        if (onlineRegion != null) {<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>          // The region is already online. This should not happen any more.<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>          String error = "Received OPEN for the region:"<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          LOG.warn(error);<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>          //regionServer.abort(error);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>          //throw new IOException(error);<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          continue;<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        }<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span><a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>          encodedNameBytes, Boolean.TRUE);<a name="line.1980"></a>
+<span class="sourceLineNo">1938</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>        throw new ServiceException(ie);<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      }<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      synchronized (regionServer.online) {<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>        try {<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          }<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>          checkOpen();<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>        } catch (InterruptedException t) {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>          Thread.currentThread().interrupt();<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>          throw new ServiceException(t);<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>        } catch (IOException e) {<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>          throw new ServiceException(e);<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>        }<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      }<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      TableDescriptor htd;<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        String encodedName = region.getEncodedName();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        if (onlineRegion != null) {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>          // The region is already online. This should not happen any more.<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>          String error = "Received OPEN for the region:"<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          LOG.warn(error);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>          //regionServer.abort(error);<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>          //throw new IOException(error);<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>          continue;<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>        }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.1980"></a>
 <span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>            // There is a close in progress. This should not happen any more.<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>            String error = "Received OPEN for the region:"<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>            regionServer.abort(error);<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>            throw new IOException(error);<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>          }<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>        }<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span><a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>          // An open is in progress. This is supported, but let's log this.<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>              + " - ignoring this new request for this region.");<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>        }<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span><a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span><a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>          htd = htds.get(region.getTable());<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>          if (htd == null) {<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>            htds.put(region.getTable(), htd);<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>          }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>          if (htd == null) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2011"></a>
+<span class="sourceLineNo">1982</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>          encodedNameBytes, Boolean.TRUE);<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span><a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>            // There is a close in progress. This should not happen any more.<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>            String error = "Received OPEN for the region:"<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>            regionServer.abort(error);<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>            throw new IOException(error);<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>          }<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>        }<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>          // An open is in progress. This is supported, but let's log this.<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>              + " - ignoring this new request for this region.");<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>        }<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span><a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span><a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>          htd = htds.get(region.getTable());<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>          if (htd == null) {<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>            htds.put(region.getTable(), htd);<a name="line.2011"></a>
 <span class="sourceLineNo">2012</span>          }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>          // Need to pass the expected version in the constructor.<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>          if (regionServer.executorService == null) {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>          } else {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>            if (region.isMetaRegion()) {<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>            } else {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>              }<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>              } else {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2030"></a>
+<span class="sourceLineNo">2013</span>          if (htd == null) {<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>          }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>          // Need to pass the expected version in the constructor.<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>          if (regionServer.executorService == null) {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>          } else {<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>            if (region.isMetaRegion()) {<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>            } else {<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>              }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2030"></a>
 <span class="sourceLineNo">2031</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>              }<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>            }<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          }<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        }<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span><a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      } catch (IOException ie) {<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>        if (isBulkAssign) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>          throw new ServiceException(ie);<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>    return builder.build();<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>  }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span><a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>  /**<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   *  Wamrmup a region on this server.<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   *<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>   * closes the region bringing the most important pages in cache.<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>   * &lt;p&gt;<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>   *<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>   * @param controller the RPC controller<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>   * @param request the request<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>   * @throws ServiceException<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>   */<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>  @Override<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span><a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    TableDescriptor htd;<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span><a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    try {<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      checkOpen();<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>      String encodedName = region.getEncodedName();<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span><a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      if (onlineRegion != null) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>        return response;<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>      if (LOG.isDebugEnabled()) {<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        LOG.debug("Warming up Region " + region.getRegionNameAsString());<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span><a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span><a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>        return response;<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      }<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span><a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2092"></a>
+<span class="sourceLineNo">2032</span>              } else {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>              }<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>            }<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          }<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        }<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span><a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>      } catch (IOException ie) {<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>        if (isBulkAssign) {<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>        } else {<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>          throw new ServiceException(ie);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>        }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      }<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>    }<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    return builder.build();<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>  }<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span><a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>  /**<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>   *  Wamrmup a region on this server.<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>   *<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>   * closes the region bringing the most important pages in cache.<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>   * &lt;p&gt;<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>   *<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>   * @param controller the RPC controller<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>   * @param request the request<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>   * @throws ServiceException<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>   */<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>  @Override<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span><a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    TableDescriptor htd;<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span><a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    try {<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      checkOpen();<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>      String encodedName = region.getEncodedName();<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span><a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      if (onlineRegion != null) {<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>        return response;<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>      }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span><a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>      if (LOG.isDebugEnabled()) {<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        LOG.debug("Warming up Region " + region.getRegionNameAsString());<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>      }<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span><a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span><a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>        return response;<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>      }<a name="line.2092"></a>
 <span class="sourceLineNo">2093</span><a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>    } catch (IOException ie) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      throw new ServiceException(ie);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span><a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>    return response;<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  }<a name="line.2100"></a>
+<span class="sourceLineNo">2094</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span><a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    } catch (IOException ie) {<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>      throw new ServiceException(ie);<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    }<a name="line.2100"></a>
 <span class="sourceLineNo">2101</span><a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>  /**<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>   * Replay the given changes when distributedLogReplay WAL edits from a failed RS. The guarantee is<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>   * that the given mutations will be durable on the receiving RS if this method returns without any<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>   * exception.<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>   * @param controller the RPC controller<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>   * @param request the request<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>   * @throws ServiceException<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>   */<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>  @Override<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  @QosPriority(priority = HConstants.REPLAY_QOS)<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>  public ReplicateWALEntryResponse replay(final RpcController controller,<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    CellScanner cells = ((HBaseRpcController) controller).cellScanner();<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    try {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>      checkOpen();<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>      if (entries == null || entries.isEmpty()) {<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>        // empty input<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>      ByteString regionName = entries.get(0).getKey().getEncodedRegionName();<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      HRegion region = regionServer.getRegionByEncodedName(regionName.toStringUtf8());<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>      RegionCoprocessorHost coprocessorHost =<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>          ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>            ? region.getCoprocessorHost()<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>            : null; // do not invoke coprocessors if this is a secondary region replica<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>      List&lt;Pair&lt;WALKey, WALEdit&gt;&gt; walEntries = new ArrayList&lt;&gt;();<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      // Skip adding the edits to WAL if this is a secondary region replica<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>      boolean isPrimary = RegionReplicaUtil.isDefaultReplica(region.getRegionInfo());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>      Durability durability = isPrimary ? Durability.USE_DEFAULT : Durability.SKIP_WAL;<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span><a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      for (WALEntry entry : entries) {<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>        if (!regionName.equals(entry.getKey().getEncodedRegionName())) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>          throw new NotServingRegionException("Replay request contains entries from multiple " +<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>              "regions. First region:" + regionName.toStringUtf8() + " , other region:"<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>              + entry.getKey().getEncodedRegionName());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        }<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        if (regionServer.nonceManager != null &amp;&amp; isPrimary) {<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          long nonceGroup = entry.getKey().hasNonceGroup()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>            ? entry.getKey().getNonceGroup() : HConstants.NO_NONCE;<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>          long nonce = entry.getKey().hasNonce() ? entry.getKey().getNonce() : HConstants.NO_NONCE;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>          regionServer.nonceManager.reportOperationFromWal(<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>              nonceGroup,<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>              nonce,<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>              entry.getKey().getWriteTime());<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>        }<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        Pair&lt;WALKey, WALEdit&gt; walEntry = (coprocessorHost == null) ? null : new Pair&lt;&gt;();<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>        List&lt;WALSplitter.MutationReplay&gt; edits = WALSplitter.getMutationsFromWALEntry(entry,<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>          cells, walEntry, durability);<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>        if (coprocessorHost != null) {<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>          // Start coprocessor replay here. The coprocessor is for each WALEdit instead of a<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>          // KeyValue.<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>          if (coprocessorHost.preWALRestore(region.getRegionInfo(), walEntry.getFirst(),<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>            walEntry.getSecond())) {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>            // if bypass this log entry, ignore it ...<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>            continue;<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>          }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>          walEntries.add(walEntry);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>        }<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>        if(edits!=null &amp;&amp; !edits.isEmpty()) {<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>          // HBASE-17924<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>          // sort to improve lock efficiency<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>          Collections.sort(edits, (v1, v2) -&gt; Row.COMPARATOR.compare(v1.mutation, v2.mutation));<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          long replaySeqId = (entry.getKey().hasOrigSequenceNumber()) ?<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>            entry.getKey().getOrigSequenceNumber() : entry.getKey().getLogSequenceNumber();<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>          OperationStatus[] result = doReplayBatchOp(region, edits, replaySeqId);<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>          // check if it's a partial success<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>          for (int i = 0; result != null &amp;&amp; i &lt; result.length; i++) {<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>            if (result[i] != OperationStatus.SUCCESS) {<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>              throw new IOException(result[i].getExceptionMsg());<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>            }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>          }<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        }<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>      }<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span><a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      //sync wal at the end because ASYNC_WAL is used above<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>      WAL wal = region.getWAL();<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>      if (wal != null) {<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        wal.sync();<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>      }<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span><a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>      if (coprocessorHost != null) {<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>        for (Pair&lt;WALKey, WALEdit&gt; entry : walEntries) {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>          coprocessorHost.postWALRestore(region.getRegionInfo(), entry.getFirst(),<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>            entry.getSecond());<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        }<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>      }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>    } catch (IOException ie) {<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>      throw new ServiceException(ie);<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    } finally {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>      if (regionServer.metricsRegionServer != null) {<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>        regionServer.metricsRegionServer.updateReplay(<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>          EnvironmentEdgeManager.currentTime() - before);<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      }<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>    }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span><a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>  /**<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>   * Replicate WAL entries on the region server.<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>   *<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>   * @param controller the RPC controller<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>   * @param request the request<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>   * @throws ServiceException<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>   */<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>  @Override<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>  @QosPriority(priority=HConstants.REPLICATION_QOS)<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>  public ReplicateWALEntryResponse replicateWALEntry(final RpcController controller,<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>      checkOpen();<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      if (regionServer.replicationSinkHandler != null) {<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        requestCount.increment();<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        CellScanner cellScanner = ((HBaseRpcController)controller).cellScanner();<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>        regionServer.getRegionServerCoprocessorHost().preReplicateLogEntries();<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>        r

<TRUNCATED>

[09/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 5275f49..153f794 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -5869,8 +5869,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController3.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController3.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController3</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestCellACLs.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestCellACLs.html" title="class in org.apache.hadoop.hbase.security.access">TestCellACLs</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.html" title="class in org.apache.hadoop.hbase.security.access">TestCellACLWithMultipleVersions</a></dt>
@@ -5879,6 +5877,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html" title="class in org.apache.hadoop.hbase.security.access">TestNamespaceCommands</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html" title="class in org.apache.hadoop.hbase.security.access">TestScanEarlyTermination</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestTablePermissions.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestTablePermissions.html" title="class in org.apache.hadoop.hbase.security.access">TestTablePermissions</a></dt>
@@ -8022,14 +8022,14 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController3.html#conf">conf</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController3.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController3</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#conf">conf</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestCellACLs.html#conf">conf</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestCellACLs.html" title="class in org.apache.hadoop.hbase.security.access">TestCellACLs</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.html#conf">conf</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.html" title="class in org.apache.hadoop.hbase.security.access">TestCellACLWithMultipleVersions</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#conf">conf</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html" title="class in org.apache.hadoop.hbase.security.access">TestNamespaceCommands</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#conf">conf</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html#conf">conf</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html" title="class in org.apache.hadoop.hbase.security.access">TestScanEarlyTermination</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/token/TestTokenAuthentication.TokenServer.html#conf">conf</a></span> - Variable in class org.apache.hadoop.hbase.security.token.<a href="org/apache/hadoop/hbase/security/token/TestTokenAuthentication.TokenServer.html" title="class in org.apache.hadoop.hbase.security.token">TestTokenAuthentication.TokenServer</a></dt>
@@ -12239,7 +12239,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestCoprocessorServiceBackwardCompatibility.DummyCoprocessorService.html#DummyCoprocessorService--">DummyCoprocessorService()</a></span> - Constructor for class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestCoprocessorServiceBackwardCompatibility.DummyCoprocessorService.html" title="class in org.apache.hadoop.hbase.coprocessor">TestCoprocessorServiceBackwardCompatibility.DummyCoprocessorService</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html#DummyCpService--">DummyCpService()</a></span> - Constructor for class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.DummyCpService</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html#DummyCpService--">DummyCpService()</a></span> - Constructor for class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.DummyCpService</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/rest/DummyFilter.html" title="class in org.apache.hadoop.hbase.rest"><span class="typeNameLink">DummyFilter</span></a> - Class in <a href="org/apache/hadoop/hbase/rest/package-summary.html">org.apache.hadoop.hbase.rest</a></dt>
 <dd>&nbsp;</dd>
@@ -12429,7 +12429,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/SecureTestUtil.html#enableSecurity-org.apache.hadoop.conf.Configuration-">enableSecurity(Configuration)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/SecureTestUtil.html" title="class in org.apache.hadoop.hbase.security.access">SecureTestUtil</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#enableSecurity-org.apache.hadoop.conf.Configuration-">enableSecurity(Configuration)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#enableSecurity-org.apache.hadoop.conf.Configuration-">enableSecurity(Configuration)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseTestingUtility.html#enableShortCircuit--">enableShortCircuit()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></dt>
 <dd>
@@ -17980,7 +17980,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html#getServices--">getServices()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController.PingCoprocessor.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController.PingCoprocessor</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html#getServices--">getServices()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.DummyCpService</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html#getServices--">getServices()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.DummyCpService</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseClusterManager.html#getServiceUser-org.apache.hadoop.hbase.ClusterManager.ServiceType-">getServiceUser(ClusterManager.ServiceType)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseClusterManager.html" title="class in org.apache.hadoop.hbase">HBaseClusterManager</a></dt>
 <dd>&nbsp;</dd>
@@ -18800,10 +18800,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController3.html#GROUP_ADMIN">GROUP_ADMIN</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController3.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController3</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#GROUP_ADMIN">GROUP_ADMIN</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#GROUP_ADMIN">GROUP_ADMIN</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html" title="class in org.apache.hadoop.hbase.security.access">TestNamespaceCommands</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#GROUP_ADMIN">GROUP_ADMIN</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsWithACL.html#GROUP_CREATE">GROUP_CREATE</a></span> - Static variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsWithACL.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroupsWithACL</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController.html#GROUP_CREATE">GROUP_CREATE</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController</a></dt>
@@ -33717,7 +33717,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/PerformanceEvaluation.html#run-java.lang.String:A-">run(String[])</a></span> - Method in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/PerformanceEvaluation.html" title="class in org.apache.hadoop.hbase.rest">PerformanceEvaluation</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html#run-org.apache.hadoop.hbase.client.Admin-">run(Admin)</a></span> - Method in interface org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html#run-org.apache.hadoop.hbase.client.Admin-">run(Admin)</a></span> - Method in interface org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/TestSecureIPC.TestThread.html#run--">run()</a></span> - Method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/TestSecureIPC.TestThread.html" title="class in org.apache.hadoop.hbase.security">TestSecureIPC.TestThread</a></dt>
 <dd>&nbsp;</dd>
@@ -36108,12 +36108,12 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController2.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController2.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController2</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#setup--">setup()</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestCellACLs.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestCellACLs.html" title="class in org.apache.hadoop.hbase.security.access">TestCellACLs</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.html" title="class in org.apache.hadoop.hbase.security.access">TestCellACLWithMultipleVersions</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#setup--">setup()</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html" title="class in org.apache.hadoop.hbase.security.access">TestScanEarlyTermination</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.html" title="class in org.apache.hadoop.hbase.security.access">TestWithDisabledAuthorization</a></dt>
@@ -41882,6 +41882,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestTags.html#TEST_NAME">TEST_NAME</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestTags.html" title="class in org.apache.hadoop.hbase.regionserver">TestTags</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#TEST_NAME">TEST_NAME</a></span> - Variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/visibility/TestDefaultScanLabelGeneratorStack.html#TEST_NAME">TEST_NAME</a></span> - Variable in class org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/TestDefaultScanLabelGeneratorStack.html" title="class in org.apache.hadoop.hbase.security.visibility">TestDefaultScanLabelGeneratorStack</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/visibility/TestEnforcingScanLabelGenerator.html#TEST_NAME">TEST_NAME</a></span> - Variable in class org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/TestEnforcingScanLabelGenerator.html" title="class in org.apache.hadoop.hbase.security.visibility">TestEnforcingScanLabelGenerator</a></dt>
@@ -42616,12 +42618,12 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController3.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController3.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController3</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestCellACLs.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestCellACLs.html" title="class in org.apache.hadoop.hbase.security.access">TestCellACLs</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.html" title="class in org.apache.hadoop.hbase.security.access">TestCellACLWithMultipleVersions</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html" title="class in org.apache.hadoop.hbase.security.access">TestScanEarlyTermination</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.html" title="class in org.apache.hadoop.hbase.security.access">TestWithDisabledAuthorization</a></dt>
@@ -43074,16 +43076,6 @@
 <dd>
 <div class="block">Naive test to check that Connection#getAdmin returns a properly constructed HBaseAdmin object</div>
 </dd>
-<dt><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestAdminOnlyOperations</span></a> - Class in <a href="org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></dt>
-<dd>
-<div class="block">This class tests operations in MasterRpcServices which require ADMIN access.</div>
-</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#TestAdminOnlyOperations--">TestAdminOnlyOperations()</a></span> - Constructor for class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestAdminOnlyOperations.Action</span></a> - Interface in <a href="org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestAdminOnlyOperations.DummyCpService</span></a> - Class in <a href="org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></dt>
-<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/client/TestAdminShell.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestAdminShell</span></a> - Class in <a href="org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAdminShell.html#TestAdminShell--">TestAdminShell()</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAdminShell.html" title="class in org.apache.hadoop.hbase.client">TestAdminShell</a></dt>
@@ -45321,7 +45313,7 @@
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/cleaner/TestCleanerChore.NeverDelete.html" title="class in org.apache.hadoop.hbase.master.cleaner"><span class="typeNameLink">TestCleanerChore.NeverDelete</span></a> - Class in <a href="org/apache/hadoop/hbase/master/cleaner/package-summary.html">org.apache.hadoop.hbase.master.cleaner</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testCleanerChoreRunning--">testCleanerChoreRunning()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testCleanerChoreRunning--">testCleanerChoreRunning()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/cleaner/TestCleanerChore.html#testCleanerDoesNotDeleteDirectoryWithLateAddedFiles--">testCleanerDoesNotDeleteDirectoryWithLateAddedFiles()</a></span> - Method in class org.apache.hadoop.hbase.master.cleaner.<a href="org/apache/hadoop/hbase/master/cleaner/TestCleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">TestCleanerChore</a></dt>
 <dd>
@@ -47896,7 +47888,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncReplicationAdminApiWithClusters.html#testEnableAndDisableTableReplication--">testEnableAndDisableTableReplication()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncReplicationAdminApiWithClusters.html" title="class in org.apache.hadoop.hbase.client">TestAsyncReplicationAdminApiWithClusters</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testEnableCatalogJanitor--">testEnableCatalogJanitor()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testEnableCatalogJanitor--">testEnableCatalogJanitor()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.html#testEnableDisable--">testEnableDisable()</a></span> - Method in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.html" title="class in org.apache.hadoop.hbase.client.replication">TestReplicationAdmin</a></dt>
 <dd>
@@ -48197,15 +48189,15 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncProcedureAdminApi.html#testExecProcedure--">testExecProcedure()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncProcedureAdminApi.html" title="class in org.apache.hadoop.hbase.client">TestAsyncProcedureAdminApi</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testExecProcedure--">testExecProcedure()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testExecProcedure--">testExecProcedure()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncProcedureAdminApi.html#testExecProcedureWithRet--">testExecProcedureWithRet()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncProcedureAdminApi.html" title="class in org.apache.hadoop.hbase.client">TestAsyncProcedureAdminApi</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testExecProcedureWithRet--">testExecProcedureWithRet()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testExecProcedureWithRet--">testExecProcedureWithRet()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testExecRegionServerService--">testExecRegionServerService()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testExecRegionServerService--">testExecRegionServerService()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testExecService--">testExecService()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testExecService--">testExecService()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController.html#testExecuteProcedures--">testExecuteProcedures()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController</a></dt>
 <dd>&nbsp;</dd>
@@ -54253,7 +54245,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestClientScanner.html#testNoResultsHint--">testNoResultsHint()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestClientScanner.html" title="class in org.apache.hadoop.hbase.client">TestClientScanner</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testNormalize--">testNormalize()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testNormalize--">testNormalize()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncToolAdminApi.html#testNormalizer--">testNormalizer()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncToolAdminApi.html" title="class in org.apache.hadoop.hbase.client">TestAsyncToolAdminApi</a></dt>
 <dd>&nbsp;</dd>
@@ -58054,6 +58046,16 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRowTooBig.html#TestRowTooBig--">TestRowTooBig()</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRowTooBig.html" title="class in org.apache.hadoop.hbase.regionserver">TestRowTooBig</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestRpcAccessChecks</span></a> - Class in <a href="org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></dt>
+<dd>
+<div class="block">This class tests operations in MasterRpcServices which require ADMIN access.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#TestRpcAccessChecks--">TestRpcAccessChecks()</a></span> - Constructor for class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestRpcAccessChecks.Action</span></a> - Interface in <a href="org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestRpcAccessChecks.DummyCpService</span></a> - Class in <a href="org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/TestSecureIPC.html#testRpcCallWithEnabledKerberosSaslAuth--">testRpcCallWithEnabledKerberosSaslAuth()</a></span> - Method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/TestSecureIPC.html" title="class in org.apache.hadoop.hbase.security">TestSecureIPC</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/ipc/TestRpcClientDeprecatedNameMapping.html" title="class in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">TestRpcClientDeprecatedNameMapping</span></a> - Class in <a href="org/apache/hadoop/hbase/ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a></dt>
@@ -58212,9 +58214,9 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/TestUser.html#testRunAs--">testRunAs()</a></span> - Method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/TestUser.html" title="class in org.apache.hadoop.hbase.security">TestUser</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testRunCatalogJanitor--">testRunCatalogJanitor()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testRunCatalogJanitor--">testRunCatalogJanitor()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testRunCleanerChore--">testRunCleanerChore()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testRunCleanerChore--">testRunCleanerChore()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHStore.html#testRunDoubleMemStoreCompactors--">testRunDoubleMemStoreCompactors()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHStore.html" title="class in org.apache.hadoop.hbase.regionserver">TestHStore</a></dt>
 <dd>
@@ -59291,7 +59293,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/model/TestTableRegionModel.html#testSetName--">testSetName()</a></span> - Method in class org.apache.hadoop.hbase.rest.model.<a href="org/apache/hadoop/hbase/rest/model/TestTableRegionModel.html" title="class in org.apache.hadoop.hbase.rest.model">TestTableRegionModel</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testSetNormalizerRunning--">testSetNormalizerRunning()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testSetNormalizerRunning--">testSetNormalizerRunning()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/compactions/TestOffPeakHours.html#testSetPeakHourOutsideCurrentSelection--">testSetPeakHourOutsideCurrentSelection()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.compactions.<a href="org/apache/hadoop/hbase/regionserver/compactions/TestOffPeakHours.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">TestOffPeakHours</a></dt>
 <dd>&nbsp;</dd>
@@ -60159,6 +60161,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.html#testSplitRollbackOnRegionClosing--">testSplitRollbackOnRegionClosing()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransactionOnCluster</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAdmin1.html#testSplitShouldNotHappenIfSplitIsDisabledForTable--">testSplitShouldNotHappenIfSplitIsDisabledForTable()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAdmin1.html" title="class in org.apache.hadoop.hbase.client">TestAdmin1</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.html#testSplitShouldNotThrowNPEEvenARegionHasEmptySplitFiles--">testSplitShouldNotThrowNPEEvenARegionHasEmptySplitFiles()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransactionOnCluster</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/TestLoadIncrementalHFiles.html#testSplitStoreFile--">testSplitStoreFile()</a></span> - Method in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/TestLoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.tool">TestLoadIncrementalHFiles</a></dt>
@@ -60821,6 +60825,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestTableFavoredNodes.html#TestTableFavoredNodes--">TestTableFavoredNodes()</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestTableFavoredNodes.html" title="class in org.apache.hadoop.hbase.client">TestTableFavoredNodes</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testTableFlush--">testTableFlush()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testTableFlushAndSnapshot--">testTableFlushAndSnapshot()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/TestQuotaThrottle.html#testTableGlobalReadAndWriteThrottle--">testTableGlobalReadAndWriteThrottle()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestQuotaThrottle.html" title="class in org.apache.hadoop.hbase.quotas">TestQuotaThrottle</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/TestQuotaThrottle.html#testTableGlobalThrottle--">testTableGlobalThrottle()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestQuotaThrottle.html" title="class in org.apache.hadoop.hbase.quotas">TestQuotaThrottle</a></dt>
@@ -64053,7 +64061,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController3.html#USER_ADMIN">USER_ADMIN</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController3.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController3</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#USER_ADMIN">USER_ADMIN</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#USER_ADMIN">USER_ADMIN</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.html#USER_ADMIN">USER_ADMIN</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.html" title="class in org.apache.hadoop.hbase.security.access">TestWithDisabledAuthorization</a></dt>
 <dd>&nbsp;</dd>
@@ -64085,10 +64093,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController3.html#USER_GROUP_ADMIN">USER_GROUP_ADMIN</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController3.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController3</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#USER_GROUP_ADMIN">USER_GROUP_ADMIN</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#USER_GROUP_ADMIN">USER_GROUP_ADMIN</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html" title="class in org.apache.hadoop.hbase.security.access">TestNamespaceCommands</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#USER_GROUP_ADMIN">USER_GROUP_ADMIN</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsWithACL.html#USER_GROUP_CREATE">USER_GROUP_CREATE</a></span> - Static variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsWithACL.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroupsWithACL</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController.html#USER_GROUP_CREATE">USER_GROUP_CREATE</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController</a></dt>
@@ -64115,7 +64123,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html#USER_GROUP_WRITE">USER_GROUP_WRITE</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html" title="class in org.apache.hadoop.hbase.security.access">TestNamespaceCommands</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#USER_NON_ADMIN">USER_NON_ADMIN</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#USER_NON_ADMIN">USER_NON_ADMIN</a></span> - Static variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSnapshotWithAcl.html#USER_NONE">USER_NONE</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSnapshotWithAcl.html" title="class in org.apache.hadoop.hbase.client">TestSnapshotWithAcl</a></dt>
 <dd>&nbsp;</dd>
@@ -65476,7 +65484,7 @@ the order they are declared.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/MultiThreadedAction.html#verbose">verbose</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/MultiThreadedAction.html" title="class in org.apache.hadoop.hbase.util">MultiThreadedAction</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#verifiedDeniedServiceException-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">verifiedDeniedServiceException(User, TestAdminOnlyOperations.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#verifiedDeniedServiceException-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">verifiedDeniedServiceException(User, TestRpcAccessChecks.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestHBaseAdminNoCluster.MethodCaller.html#verify-org.apache.hadoop.hbase.client.MasterKeepAliveConnection-int-">verify(MasterKeepAliveConnection, int)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestHBaseAdminNoCluster.MethodCaller.html" title="interface in org.apache.hadoop.hbase.client">TestHBaseAdminNoCluster.MethodCaller</a></dt>
 <dd>&nbsp;</dd>
@@ -65539,7 +65547,7 @@ the order they are declared.</div>
 <dd>
 <div class="block">Verify the content of the WAL file.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#verifyAdminCheckForAction-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">verifyAdminCheckForAction(TestAdminOnlyOperations.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#verifyAdminCheckForAction-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">verifyAdminCheckForAction(TestRpcAccessChecks.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/encoding/TestChangingEncoding.html#verifyAllData--">verifyAllData()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="org/apache/hadoop/hbase/io/encoding/TestChangingEncoding.html" title="class in org.apache.hadoop.hbase.io.encoding">TestChangingEncoding</a></dt>
 <dd>&nbsp;</dd>
@@ -65557,7 +65565,7 @@ the order they are declared.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/SecureTestUtil.html#verifyAllowed-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.SecureTestUtil.AccessTestAction-int-">verifyAllowed(User, SecureTestUtil.AccessTestAction, int)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/SecureTestUtil.html" title="class in org.apache.hadoop.hbase.security.access">SecureTestUtil</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#verifyAllowed-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">verifyAllowed(User, TestAdminOnlyOperations.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#verifyAllowed-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">verifyAllowed(User, TestRpcAccessChecks.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController.html#verifyAnyCreate-org.apache.hadoop.hbase.security.access.SecureTestUtil.AccessTestAction-">verifyAnyCreate(SecureTestUtil.AccessTestAction)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController</a></dt>
 <dd>&nbsp;</dd>
@@ -65639,7 +65647,7 @@ the order they are declared.</div>
 <dd>
 <div class="block">This passes only in case of ADE for all actions.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#verifyDenied-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">verifyDenied(User, TestAdminOnlyOperations.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#verifyDenied-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">verifyDenied(User, TestRpcAccessChecks.Action)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestPerColumnFamilyFlush.html#verifyEdit-int-int-org.apache.hadoop.hbase.client.Table-">verifyEdit(int, int, Table)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestPerColumnFamilyFlush.html" title="class in org.apache.hadoop.hbase.regionserver">TestPerColumnFamilyFlush</a></dt>
 <dd>&nbsp;</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
index 9d438ed..c90ebc9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -5575,23 +5575,23 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestAdminOnlyOperations.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestCellACLs.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestCellACLs.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestCellACLs.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestCellACLs.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestAccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestAccessController.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestAccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestAccessController.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestWithDisabledAuthorization.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestWithDisabledAuthorization.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestZKPermissionWatcher.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestZKPermissionWatcher.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestRpcAccessChecks.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
index eef2fd8..6db3baa 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
@@ -3539,19 +3539,19 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestAdminOnlyOperations.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestCellACLs.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestCellACLs.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestCellACLs.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestCellACLs.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestAccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestAccessController.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestAccessController.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestAccessController.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestWithDisabledAuthorization.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestWithDisabledAuthorization.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestRpcAccessChecks.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>


[23/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 77b9919..17d273e 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -277,7 +274,7 @@
 <td>3595</td>
 <td>0</td>
 <td>0</td>
-<td>15918</td></tr></table></div>
+<td>15919</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -5025,7 +5022,7 @@
 <td><a href="#org.apache.hadoop.hbase.master.assignment.SplitTableRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>7</td></tr>
+<td>8</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.assignment.TestAssignmentManager.java">org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.java</a></td>
 <td>0</td>
@@ -10320,12 +10317,12 @@
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>784</td>
+<td>798</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3849</td>
+<td>3835</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td>misc</td>
@@ -10343,7 +10340,7 @@
 <ul>
 <li>max: <tt>&quot;100&quot;</tt></li>
 <li>ignorePattern: <tt>&quot;^package.*|^import.*|a href|href|http://|https://|ftp://|org.apache.thrift.|com.google.protobuf.|hbase.protobuf.generated&quot;</tt></li></ul></td>
-<td>1619</td>
+<td>1620</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td></td>
@@ -14534,7 +14531,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 26 has parse error. Missed HTML close tag 'arg'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>44</td></tr></table></div>
 <div class="section">
@@ -15170,7 +15167,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 4 has parse error. Missed HTML close tag 'pre'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>59</td></tr></table></div>
 <div class="section">
@@ -16937,7 +16934,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 19 has parse error. Details: no viable alternative at input '&lt;code&gt;\n   *   List&lt;Future&lt;' while parsing HTML_TAG</td>
 <td>167</td></tr></table></div>
 <div class="section">
@@ -19859,7 +19856,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 2 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>83</td></tr>
 <tr class="b">
@@ -28582,229 +28579,229 @@
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>211</td></tr>
+<td>213</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 have incorrect indentation level 7, expected level should be 4.</td>
-<td>491</td></tr>
+<td>493</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' have incorrect indentation level 7, expected level should be 4.</td>
-<td>492</td></tr>
+<td>494</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child have incorrect indentation level 9, expected level should be 6.</td>
-<td>493</td></tr>
+<td>495</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' have incorrect indentation level 7, expected level should be 4.</td>
-<td>494</td></tr>
+<td>496</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child have incorrect indentation level 11, expected level should be 6.</td>
-<td>495</td></tr>
+<td>497</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child have incorrect indentation level 11, expected level should be 6.</td>
-<td>496</td></tr>
+<td>498</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' have incorrect indentation level 7, expected level should be 4.</td>
-<td>497</td></tr>
+<td>499</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' have incorrect indentation level 3, expected level should be 2.</td>
-<td>498</td></tr>
+<td>500</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>502</td></tr>
+<td>504</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>503</td></tr>
+<td>505</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'regionList' have incorrect indentation level 6, expected level should be 8.</td>
-<td>617</td></tr>
+<td>619</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 174 lines (max allowed is 150).</td>
-<td>671</td></tr>
+<td>673</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
-<td>676</td></tr>
+<td>678</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
-<td>677</td></tr>
+<td>679</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
-<td>678</td></tr>
+<td>680</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
-<td>679</td></tr>
+<td>681</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
-<td>680</td></tr>
+<td>682</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
-<td>681</td></tr>
+<td>683</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
-<td>682</td></tr>
+<td>684</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
-<td>683</td></tr>
+<td>685</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
-<td>684</td></tr>
+<td>686</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
-<td>829</td></tr>
+<td>831</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
-<td>830</td></tr>
+<td>832</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
-<td>831</td></tr>
+<td>833</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
-<td>832</td></tr>
+<td>834</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
-<td>854</td></tr>
+<td>856</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
-<td>855</td></tr>
+<td>857</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>906</td></tr>
+<td>908</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>907</td></tr>
+<td>909</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>926</td></tr>
+<td>928</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be one of the following: 6, 27.</td>
-<td>932</td></tr>
+<td>934</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be one of the following: 6, 27.</td>
-<td>933</td></tr>
+<td>935</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be one of the following: 6, 27.</td>
-<td>934</td></tr>
+<td>936</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>961</td></tr>
+<td>963</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>962</td></tr>
+<td>964</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>1065</td></tr>
+<td>1067</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 have incorrect indentation level 5, expected level should be 4.</td>
-<td>1239</td></tr></table></div>
+<td>1241</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TestAdmin2.java">org/apache/hadoop/hbase/client/TestAdmin2.java</h3>
 <table border="0" class="table table-striped">
@@ -33872,7 +33869,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 37 has parse error. Details: no viable alternative at input '&lt;ColumnFamily,' while parsing HTML_ELEMENT</td>
 <td>29</td></tr></table></div>
 <div class="section">
@@ -50189,7 +50186,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 24 has parse error. Details: no viable alternative at input '&lt;key,' while parsing HTML_ELEMENT</td>
 <td>25</td></tr>
 <tr class="a">
@@ -52051,37 +52048,37 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>123</td></tr>
+<td>124</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
-<td>133</td></tr>
+<td>134</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>159</td></tr>
+<td>160</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>171</td></tr>
+<td>172</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>256</td></tr>
+<td>259</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>257</td></tr></table></div>
+<td>260</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.io.hfile.bucket.FileMmapEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.java</h3>
 <table border="0" class="table table-striped">
@@ -53777,7 +53774,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 2 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>587</td></tr>
 <tr class="b">
@@ -66673,11 +66670,17 @@
 <td>169</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 103).</td>
+<td>182</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>183</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -66686,97 +66689,97 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.TestAssignmentManager.java">org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>165</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>638</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>722</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>723</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>724</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>725</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>726</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>727</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>728</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>735</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>736</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>737</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>MissingSwitchDefault</td>
 <td>switch without &quot;default&quot; clause.</td>
 <td>748</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>MissingSwitchDefault</td>
 <td>switch without &quot;default&quot; clause.</td>
 <td>759</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -66785,13 +66788,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.TestAssignmentOnRSCrash.java">org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -66800,13 +66803,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.TestRegionStates.java">org/apache/hadoop/hbase/master/assignment/TestRegionStates.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -66815,19 +66818,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.TestSplitTableRegionProcedure.java">org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 0, expected level should be 2.</td>
 <td>172</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -66836,31 +66839,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.UnassignProcedure.java">org/apache/hadoop/hbase/master/assignment/UnassignProcedure.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>175</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>200</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>228</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -66869,13 +66872,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.Util.java">org/apache/hadoop/hbase/master/assignment/Util.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -66884,13 +66887,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.BalancerChore.java">org/apache/hadoop/hbase/master/balancer/BalancerChore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -66899,457 +66902,457 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.BalancerTestBase.java">org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>80</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>81</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>82</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>84</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>85</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>86</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>87</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>88</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>89</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>90</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>91</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be one of the following: 4, 45.</td>
 <td>92</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>97</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>98</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>99</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>101</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>102</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>103</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>104</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>105</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>106</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>107</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>108</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>109</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>110</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>111</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>113</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>114</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>115</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>116</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>117</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>118</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>120</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>121</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>122</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>123</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>124</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>125</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>126</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>127</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>128</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>129</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>131</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>133</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>134</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>136</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>137</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>138</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>139</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>140</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>141</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>142</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>143</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>144</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>145</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>146</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>147</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>148</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>149</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>150</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>151</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>152</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>153</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>237</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 118).</td>
 <td>237</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
 <td>246</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>329</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>330</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>331</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>363</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>377</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 150).</td>
 <td>401</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>422</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -67358,373 +67361,373 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>127</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>144</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>145</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>146</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 259 lines (max allowed is 150).</td>
 <td>191</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
 <td>301</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'type' must be private and have accessor methods.</td>
 <td>626</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
 <td>627</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 33 should have line break after.</td>
 <td>627</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 34 should have line break after.</td>
 <td>629</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 32 should have line break after.</td>
 <td>631</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'region' must be private and have accessor methods.</td>
 <td>635</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'server' must be private and have accessor methods.</td>
 <td>636</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'region' must be private and have accessor methods.</td>
 <td>655</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'fromServer' must be private and have accessor methods.</td>
 <td>656</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'toServer' must be private and have accessor methods.</td>
 <td>657</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
 <td>667</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'fromServer' must be private and have accessor methods.</td>
 <td>676</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'fromRegion' must be private and have accessor methods.</td>
 <td>677</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'toServer' must be private and have accessor methods.</td>
 <td>678</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'toRegion' must be private and have accessor methods.</td>
 <td>679</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
 <td>689</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>703</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>704</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>707</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>708</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>709</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>710</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>711</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>713</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>714</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>714</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>715</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>716</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>717</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>718</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>720</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>721</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>721</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>722</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>722</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>723</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>724</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>725</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>726</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>727</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>738</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>759</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>839</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>854</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1021</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1022</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1024</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1025</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1060</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1066</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1089</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1091</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1167</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>1375</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -67733,13 +67736,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.ClusterLoadState.java">org/apache/hadoop/hbase/master/balancer/ClusterLoadState.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -67748,13 +67751,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.ClusterStatusChore.java">org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -67763,19 +67766,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.FavoredStochasticBalancer.java">org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'segregateRegionsAndAssignRegionsWithFavoredNodes' have incorrect indentation level 2, expected level should be 4.</td>
 <td>201</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -67784,25 +67787,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory.java">org/apache/hadoop/hbase/master/balancer/LoadBalancerFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -67811,13 +67814,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.LoadBalancerPerformanceEvaluation.java">org/apache/hadoop/hbase/master/balancer/LoadBalancerPerformanceEvaluation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -67826,19 +67829,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.MetricsBalancerSourceImpl.java">org/apache/hadoop/hbase/master/balancer/MetricsBalancerSourceImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.metrics.BaseSourceImpl' import.</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -67847,49 +67850,49 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.MetricsStochasticBalancerSourceImpl.java">org/apache/hadoop/hbase/master/balancer/MetricsStochasticBalancerSourceImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.metrics.Interns' import.</td>
 <td>26</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def' child have incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
 <td>42</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
 <td>44</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
 <td>46</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
 <td>47</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' have incorrect indentation level 6, expected level should be one of the following: 2, 4.</td>
 <td>48</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -67898,19 +67901,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.RegionInfoComparator.java">org/apache/hadoop/hbase/master/balancer/RegionInfoComparator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>34</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -67919,25 +67922,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.RegionLocationFinder.java">org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>64</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>214</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -67946,13 +67949,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.ServerAndLoad.java">org/apache/hadoop/hbase/master/balancer/ServerAndLoad.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -67961,205 +67964,205 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.SimpleLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>113</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>115</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
 <td>115</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 112).</td>
 <td>134</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 206 lines (max allowed is 150).</td>
 <td>246</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>266</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>316</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>320</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>335</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>354</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>357</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>366</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>387</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>389</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>408</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>438</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>456</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>461</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>462</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>462</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 112).</td>
 <td>464</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>499</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 120).</td>
 <td>500</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>501</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>513</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>514</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>530</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>537</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>558</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>559</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>565</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>582</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -68168,199 +68171,199 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 8, expected level should be 6.</td>
 <td>252</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>267</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>269</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>456</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>564</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>797</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>813</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 116).</td>
 <td>827</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
 <td>831</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>862</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>1003</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>1004</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>1005</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>1006</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>1007</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>1008</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>1009</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>1010</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>1011</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>1012</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>1013</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>1014</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>1015</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>1016</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>1017</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>1018</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 119).</td>
 <td>1028</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1089</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>1296</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>1297</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>1301</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -68369,103 +68372,103 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.TestBaseLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>84</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>85</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>86</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>87</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>133</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>134</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>135</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>150</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>191</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>256</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>337</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>432</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>433</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>434</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>444</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -68474,295 +68477,295 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.TestDefaultLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/TestDefaultLoadBalancer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>74</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>75</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>76</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>78</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>79</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>80</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>81</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>82</td></tr>
-<tr clas

<TRUNCATED>

[08/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/client/TestAdmin1.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestAdmin1.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestAdmin1.html
index 9cd8a90..798637d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestAdmin1.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestAdmin1.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":9,"i3":10,"i4":10,"i5":9,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10};
+var methods = {"i0":10,"i1":10,"i2":9,"i3":10,"i4":10,"i5":9,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.78">TestAdmin1</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.80">TestAdmin1</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Class to test HBaseAdmin.
  Spins up the minicluster once at test start and then takes it down afterward.
@@ -311,26 +311,30 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i28" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin1.html#testTableAvailableWithRandomSplitKeys--">testTableAvailableWithRandomSplitKeys</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin1.html#testSplitShouldNotHappenIfSplitIsDisabledForTable--">testSplitShouldNotHappenIfSplitIsDisabledForTable</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i29" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin1.html#testTableExist--">testTableExist</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin1.html#testTableAvailableWithRandomSplitKeys--">testTableAvailableWithRandomSplitKeys</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i30" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin1.html#testTruncateTable--">testTruncateTable</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin1.html#testTableExist--">testTableExist</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i31" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin1.html#testTruncateTable--">testTruncateTable</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin1.html#testTruncateTable-org.apache.hadoop.hbase.TableName-boolean-">testTruncateTable</a></span>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                  boolean&nbsp;preserveSplits)</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin1.html#testTruncateTablePreservingSplits--">testTruncateTablePreservingSplits</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin1.html#verifyRoundRobinDistribution-org.apache.hadoop.hbase.client.ClusterConnection-org.apache.hadoop.hbase.client.RegionLocator-int-">verifyRoundRobinDistribution</a></span>(org.apache.hadoop.hbase.client.ClusterConnection&nbsp;c,
                             org.apache.hadoop.hbase.client.RegionLocator&nbsp;regionLocator,
@@ -364,7 +368,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.81">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.83">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -373,7 +377,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <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/client/TestAdmin1.html#line.84">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.86">LOG</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -382,7 +386,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_UTIL</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.85">TEST_UTIL</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.87">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="admin">
@@ -391,7 +395,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>admin</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.Admin <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.86">admin</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.client.Admin <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.88">admin</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -400,7 +404,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.89">name</a></pre>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.91">name</a></pre>
 </li>
 </ul>
 </li>
@@ -417,7 +421,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestAdmin1</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.78">TestAdmin1</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.80">TestAdmin1</a>()</pre>
 </li>
 </ul>
 </li>
@@ -434,7 +438,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setUpBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.92">setUpBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.94">setUpBeforeClass</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -448,7 +452,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.101">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.103">tearDownAfterClass</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -462,7 +466,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setUp</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.106">setUp</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.108">setUp</a>()
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -476,7 +480,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.111">tearDown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.113">tearDown</a>()
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -490,7 +494,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSplitFlushCompactUnknownTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.118">testSplitFlushCompactUnknownTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.120">testSplitFlushCompactUnknownTable</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>
@@ -504,7 +508,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteEditUnknownColumnFamilyAndOrTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.146">testDeleteEditUnknownColumnFamilyAndOrTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.148">testDeleteEditUnknownColumnFamilyAndOrTable</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>
@@ -518,7 +522,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testDisableAndEnableTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.240">testDisableAndEnableTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.242">testDisableAndEnableTable</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>
@@ -532,7 +536,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getStateFromMeta</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.TableState.State&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.297">getStateFromMeta</a>(org.apache.hadoop.hbase.TableName&nbsp;table)
+<pre>private&nbsp;org.apache.hadoop.hbase.client.TableState.State&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.299">getStateFromMeta</a>(org.apache.hadoop.hbase.TableName&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="throwsLabel">Throws:</span></dt>
@@ -546,7 +550,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testDisableAndEnableTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.305">testDisableAndEnableTables</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.307">testDisableAndEnableTables</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>
@@ -560,7 +564,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testCreateTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.363">testCreateTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.365">testCreateTable</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>
@@ -574,7 +578,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testTruncateTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.377">testTruncateTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.379">testTruncateTable</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>
@@ -588,7 +592,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testTruncateTablePreservingSplits</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.382">testTruncateTablePreservingSplits</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.384">testTruncateTablePreservingSplits</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>
@@ -602,7 +606,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testTruncateTable</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.386">testTruncateTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.388">testTruncateTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                boolean&nbsp;preserveSplits)
                         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>
@@ -617,7 +621,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testGetTableDescriptor</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.419">testGetTableDescriptor</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.421">testGetTableDescriptor</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>
@@ -631,7 +635,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testCompactionTimestamps</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.436">testCompactionTimestamps</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.438">testCompactionTimestamps</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -645,7 +649,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testHColumnValidName</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.490">testHColumnValidName</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.492">testHColumnValidName</a>()</pre>
 </li>
 </ul>
 <a name="testOnlineChangeTableSchema--">
@@ -654,7 +658,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testOnlineChangeTableSchema</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.506">testOnlineChangeTableSchema</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.508">testOnlineChangeTableSchema</a>()
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Verify schema modification takes.</div>
@@ -671,7 +675,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyRoundRobinDistribution</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.591">verifyRoundRobinDistribution</a>(org.apache.hadoop.hbase.client.ClusterConnection&nbsp;c,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.593">verifyRoundRobinDistribution</a>(org.apache.hadoop.hbase.client.ClusterConnection&nbsp;c,
                                             org.apache.hadoop.hbase.client.RegionLocator&nbsp;regionLocator,
                                             int&nbsp;expectedRegions)
                                      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>
@@ -687,7 +691,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testCreateTableNumberOfRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.622">testCreateTableNumberOfRegions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.624">testCreateTableNumberOfRegions</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>
@@ -703,7 +707,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testCreateTableWithRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.672">testCreateTableWithRegions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.674">testCreateTableWithRegions</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>
@@ -719,7 +723,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testTableAvailableWithRandomSplitKeys</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.848">testTableAvailableWithRandomSplitKeys</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.850">testTableAvailableWithRandomSplitKeys</a>()
                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -733,7 +737,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testCreateTableWithOnlyEmptyStartRow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.863">testCreateTableWithOnlyEmptyStartRow</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.865">testCreateTableWithOnlyEmptyStartRow</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>
@@ -747,7 +751,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testCreateTableWithEmptyRowInTheSplitKeys</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.877">testCreateTableWithEmptyRowInTheSplitKeys</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.879">testCreateTableWithEmptyRowInTheSplitKeys</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>
@@ -761,7 +765,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testTableExist</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.894">testTableExist</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.896">testTableExist</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>
@@ -775,7 +779,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testForceSplit</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.910">testForceSplit</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.912">testForceSplit</a>()
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Tests forcing split from client and having scanners successfully ride over split.</div>
 <dl>
@@ -791,7 +795,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testEnableTableRetainAssignment</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.929">testEnableTableRetainAssignment</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.931">testEnableTableRetainAssignment</a>()
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Test retain assignment on enableTable.</div>
 <dl>
@@ -806,7 +810,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testForceSplitMultiFamily</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.965">testForceSplitMultiFamily</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.967">testForceSplitMultiFamily</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">Multi-family scenario. Tests forcing split from client and
  having scanners successfully ride over split.</div>
@@ -823,7 +827,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>splitTest</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.992">splitTest</a>(byte[]&nbsp;splitPoint,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.994">splitTest</a>(byte[]&nbsp;splitPoint,
                byte[][]&nbsp;familyNames,
                int[]&nbsp;rowCounts,
                int&nbsp;numVersions,
@@ -842,7 +846,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSplitAndMergeWithReplicaTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.1132">testSplitAndMergeWithReplicaTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.1134">testSplitAndMergeWithReplicaTable</a>()
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -856,7 +860,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testInvalidHColumnDescriptor</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.1238">testInvalidHColumnDescriptor</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.1240">testInvalidHColumnDescriptor</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>
@@ -870,7 +874,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testEnableDisableAddColumnDeleteColumn</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.1243">testEnableDisableAddColumnDeleteColumn</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.1245">testEnableDisableAddColumnDeleteColumn</a>()
                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -884,7 +888,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testDeleteLastColumnFamily</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.1268">testDeleteLastColumnFamily</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.1270">testDeleteLastColumnFamily</a>()
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -898,7 +902,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testHFileReplication</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.1301">testHFileReplication</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.1303">testHFileReplication</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -909,10 +913,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="testMergeRegions--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testMergeRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.1352">testMergeRegions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.1354">testMergeRegions</a>()
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -920,6 +924,20 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="testSplitShouldNotHappenIfSplitIsDisabledForTable--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testSplitShouldNotHappenIfSplitIsDisabledForTable</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestAdmin1.html#line.1398">testSplitShouldNotHappenIfSplitIsDisabledForTable</a>()
+                                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
index a580c9e..d7cad80 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -568,15 +568,15 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
index a1c9b1d..28973e0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
@@ -81,14 +81,14 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
+<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&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;)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
 </ul>
 </li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&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;)
+<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.procedure.ProcedureManager

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index e9c1d93..19002f2 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -205,9 +205,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 12af5f9..6ea028e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -657,9 +657,9 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController3.FaultyAccessController.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController3.FaultyAccessController.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController3.FaultyAccessController.html
index 3a2c845..3ccfe0a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController3.FaultyAccessController.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAccessController3.FaultyAccessController.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAccessController3.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestCellACLs.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestAccessController3.FaultyAccessController.html" target="_top">Frames</a></li>
@@ -311,7 +311,7 @@ extends org.apache.hadoop.hbase.security.access.AccessController</pre>
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAccessController3.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestCellACLs.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestAccessController3.FaultyAccessController.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html
deleted file mode 100644
index a05ba37..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html
+++ /dev/null
@@ -1,231 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TestAdminOnlyOperations.Action (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="TestAdminOnlyOperations.Action (Apache HBase 3.0.0-SNAPSHOT Test API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":6};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestAdminOnlyOperations.Action.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" target="_top">Frames</a></li>
-<li><a href="TestAdminOnlyOperations.Action.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li>Constr&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li>Constr&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.security.access</div>
-<h2 title="Interface TestAdminOnlyOperations.Action" class="title">Interface TestAdminOnlyOperations.Action</h2>
-</div>
-<div class="contentContainer">
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>Enclosing class:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dd>
-</dl>
-<hr>
-<br>
-<pre>static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.138">TestAdminOnlyOperations.Action</a></pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html#run-org.apache.hadoop.hbase.client.Admin-">run</a></span>(org.apache.hadoop.hbase.client.Admin&nbsp;admin)</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="run-org.apache.hadoop.hbase.client.Admin-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>run</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html#line.139">run</a>(org.apache.hadoop.hbase.client.Admin&nbsp;admin)
-  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestAdminOnlyOperations.Action.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" target="_top">Frames</a></li>
-<li><a href="TestAdminOnlyOperations.Action.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li>Constr&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li>Constr&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html
deleted file mode 100644
index 62e3036..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html
+++ /dev/null
@@ -1,336 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TestAdminOnlyOperations.DummyCpService (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="TestAdminOnlyOperations.DummyCpService (Apache HBase 3.0.0-SNAPSHOT Test API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestAdminOnlyOperations.DummyCpService.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestCellACLs.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" target="_top">Frames</a></li>
-<li><a href="TestAdminOnlyOperations.DummyCpService.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.security.access</div>
-<h2 title="Class TestAdminOnlyOperations.DummyCpService" class="title">Class TestAdminOnlyOperations.DummyCpService</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.DummyCpService</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>All Implemented Interfaces:</dt>
-<dd>org.apache.hadoop.hbase.Coprocessor, org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor</dd>
-</dl>
-<dl>
-<dt>Enclosing class:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></dd>
-</dl>
-<hr>
-<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.94">TestAdminOnlyOperations.DummyCpService</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 org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor</pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="nested.class.summary">
-<!--   -->
-</a>
-<h3>Nested Class Summary</h3>
-<ul class="blockList">
-<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.Coprocessor">
-<!--   -->
-</a>
-<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.hadoop.hbase.Coprocessor</h3>
-<code>org.apache.hadoop.hbase.Coprocessor.State</code></li>
-</ul>
-</li>
-</ul>
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<ul class="blockList">
-<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.Coprocessor">
-<!--   -->
-</a>
-<h3>Fields inherited from interface&nbsp;org.apache.hadoop.hbase.Coprocessor</h3>
-<code>PRIORITY_HIGHEST, PRIORITY_LOWEST, PRIORITY_SYSTEM, PRIORITY_USER, VERSION</code></li>
-</ul>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html#DummyCpService--">DummyCpService</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;com.google.protobuf.Service&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html#getServices--">getServices</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.coprocessor.MasterCoprocessor">
-<!--   -->
-</a>
-<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.coprocessor.MasterCoprocessor</h3>
-<code>getMasterObserver</code></li>
-</ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor">
-<!--   -->
-</a>
-<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor</h3>
-<code>getRegionServerObserver</code></li>
-</ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Coprocessor">
-<!--   -->
-</a>
-<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.Coprocessor</h3>
-<code>start, stop</code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="DummyCpService--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>DummyCpService</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html#line.95">DummyCpService</a>()</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="getServices--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>getServices</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;com.google.protobuf.Service&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html#line.98">getServices</a>()</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>getServices</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Coprocessor</code></dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestAdminOnlyOperations.DummyCpService.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestCellACLs.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" target="_top">Frames</a></li>
-<li><a href="TestAdminOnlyOperations.DummyCpService.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>


[10/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 01931b7..6d39492 100644
--- a/export_control.html
+++ b/export_control.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -178,9 +178,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -324,7 +321,7 @@ for more details.</p>
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index d57637f..6329e26 100644
--- a/index.html
+++ b/index.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -428,7 +425,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index c937ff0..b1323d5 100644
--- a/integration.html
+++ b/integration.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -284,7 +281,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 6b7569b..8a00cfc 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -281,7 +278,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index c53089f..8f16188 100644
--- a/license.html
+++ b/license.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -484,7 +481,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index b5e4b0f..15c4e8a 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -334,7 +331,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index ae69ac4..12fca30 100644
--- a/metrics.html
+++ b/metrics.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -178,9 +178,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -452,7 +449,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 3532ba5..a705db6 100644
--- a/old_news.html
+++ b/old_news.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -178,9 +178,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -407,7 +404,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index aa27da6..624859d 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -433,7 +430,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 3a53a91..9590250 100644
--- a/plugins.html
+++ b/plugins.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -368,7 +365,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 6857fe9..a78e405 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Powered By Apache HBase™</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -762,7 +759,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index db122fd..bbebaca 100644
--- a/project-info.html
+++ b/project-info.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -328,7 +325,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 69848d7..f621d56 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -298,7 +295,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 70d23f2..b4be39e 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -324,7 +321,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 3afae33..6f3de15 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -178,9 +178,6 @@ Running Apache HBase (TM) in pseudo-distributed mode
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -301,7 +298,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 1ba66fe..5c04a70 100644
--- a/replication.html
+++ b/replication.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -178,9 +178,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -296,7 +293,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 6ed5179..16bbb2f 100644
--- a/resources.html
+++ b/resources.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Other Apache HBase (TM) Resources</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -324,7 +321,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 8faf1b8..f533814b 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -292,7 +289,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index e7f3386..1aa48e8 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -326,7 +323,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index fd00ddd..af1d026 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -513,7 +510,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index cf4b42b..4556151 100644
--- a/team-list.html
+++ b/team-list.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,9 +176,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -723,7 +720,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index 057a91c..813fbda 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -560,9 +560,6 @@
 <li><a href="org/apache/hadoop/hbase/replication/TestAddToSerialReplicationPeer.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">TestAddToSerialReplicationPeer</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestAdmin1.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestAdmin1</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestAdmin2.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestAdmin2</a></li>
-<li><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestAdminOnlyOperations</a></li>
-<li><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access" target="classFrame"><span class="interfaceName">TestAdminOnlyOperations.Action</span></a></li>
-<li><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestAdminOnlyOperations.DummyCpService</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestAdminShell.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestAdminShell</a></li>
 <li><a href="org/apache/hadoop/hbase/io/crypto/aes/TestAES.html" title="class in org.apache.hadoop.hbase.io.crypto.aes" target="classFrame">TestAES</a></li>
 <li><a href="org/apache/hadoop/hbase/io/crypto/aes/TestAES.TestProvider.html" title="class in org.apache.hadoop.hbase.io.crypto.aes" target="classFrame">TestAES.TestProvider</a></li>
@@ -1878,6 +1875,9 @@
 <li><a href="org/apache/hadoop/hbase/coprocessor/TestRowProcessorEndpoint.RowProcessorEndpoint.RowSwapProcessor.html" title="class in org.apache.hadoop.hbase.coprocessor" target="classFrame">TestRowProcessorEndpoint.RowProcessorEndpoint.RowSwapProcessor</a></li>
 <li><a href="org/apache/hadoop/hbase/coprocessor/TestRowProcessorEndpoint.RowProcessorEndpoint.TimeoutProcessor.html" title="class in org.apache.hadoop.hbase.coprocessor" target="classFrame">TestRowProcessorEndpoint.RowProcessorEndpoint.TimeoutProcessor</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestRowTooBig.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestRowTooBig</a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestRpcAccessChecks</a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access" target="classFrame"><span class="interfaceName">TestRpcAccessChecks.Action</span></a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestRpcAccessChecks.DummyCpService</a></li>
 <li><a href="org/apache/hadoop/hbase/ipc/TestRpcClientDeprecatedNameMapping.html" title="class in org.apache.hadoop.hbase.ipc" target="classFrame">TestRpcClientDeprecatedNameMapping</a></li>
 <li><a href="org/apache/hadoop/hbase/ipc/TestRpcClientLeaks.html" title="class in org.apache.hadoop.hbase.ipc" target="classFrame">TestRpcClientLeaks</a></li>
 <li><a href="org/apache/hadoop/hbase/ipc/TestRpcClientLeaks.MyRpcClientImpl.html" title="class in org.apache.hadoop.hbase.ipc" target="classFrame">TestRpcClientLeaks.MyRpcClientImpl</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 0cbe7e6..3332e61 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -560,9 +560,6 @@
 <li><a href="org/apache/hadoop/hbase/replication/TestAddToSerialReplicationPeer.html" title="class in org.apache.hadoop.hbase.replication">TestAddToSerialReplicationPeer</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestAdmin1.html" title="class in org.apache.hadoop.hbase.client">TestAdmin1</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestAdmin2.html" title="class in org.apache.hadoop.hbase.client">TestAdmin2</a></li>
-<li><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></li>
-<li><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="interfaceName">TestAdminOnlyOperations.Action</span></a></li>
-<li><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.DummyCpService</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestAdminShell.html" title="class in org.apache.hadoop.hbase.client">TestAdminShell</a></li>
 <li><a href="org/apache/hadoop/hbase/io/crypto/aes/TestAES.html" title="class in org.apache.hadoop.hbase.io.crypto.aes">TestAES</a></li>
 <li><a href="org/apache/hadoop/hbase/io/crypto/aes/TestAES.TestProvider.html" title="class in org.apache.hadoop.hbase.io.crypto.aes">TestAES.TestProvider</a></li>
@@ -1878,6 +1875,9 @@
 <li><a href="org/apache/hadoop/hbase/coprocessor/TestRowProcessorEndpoint.RowProcessorEndpoint.RowSwapProcessor.html" title="class in org.apache.hadoop.hbase.coprocessor">TestRowProcessorEndpoint.RowProcessorEndpoint.RowSwapProcessor</a></li>
 <li><a href="org/apache/hadoop/hbase/coprocessor/TestRowProcessorEndpoint.RowProcessorEndpoint.TimeoutProcessor.html" title="class in org.apache.hadoop.hbase.coprocessor">TestRowProcessorEndpoint.RowProcessorEndpoint.TimeoutProcessor</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestRowTooBig.html" title="class in org.apache.hadoop.hbase.regionserver">TestRowTooBig</a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="interfaceName">TestRpcAccessChecks.Action</span></a></li>
+<li><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.DummyCpService</a></li>
 <li><a href="org/apache/hadoop/hbase/ipc/TestRpcClientDeprecatedNameMapping.html" title="class in org.apache.hadoop.hbase.ipc">TestRpcClientDeprecatedNameMapping</a></li>
 <li><a href="org/apache/hadoop/hbase/ipc/TestRpcClientLeaks.html" title="class in org.apache.hadoop.hbase.ipc">TestRpcClientLeaks</a></li>
 <li><a href="org/apache/hadoop/hbase/ipc/TestRpcClientLeaks.MyRpcClientImpl.html" title="class in org.apache.hadoop.hbase.ipc">TestRpcClientLeaks.MyRpcClientImpl</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/constant-values.html b/testdevapidocs/constant-values.html
index a8d4ef3..0c635fd 100644
--- a/testdevapidocs/constant-values.html
+++ b/testdevapidocs/constant-values.html
@@ -12317,25 +12317,6 @@
 </li>
 <li class="blockList">
 <table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
-<caption><span>org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th scope="col">Constant Field</th>
-<th class="colLast" scope="col">Value</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.GROUP_ADMIN">
-<!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td><code><a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#GROUP_ADMIN">GROUP_ADMIN</a></code></td>
-<td class="colLast"><code>"admin_group"</code></td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestCellACLs.html" title="class in org.apache.hadoop.hbase.security.access">TestCellACLs</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
@@ -12419,6 +12400,25 @@
 </tbody>
 </table>
 </li>
+<li class="blockList">
+<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.GROUP_ADMIN">
+<!--   -->
+</a><code>private&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#GROUP_ADMIN">GROUP_ADMIN</a></code></td>
+<td class="colLast"><code>"admin_group"</code></td>
+</tr>
+</tbody>
+</table>
+</li>
 </ul>
 <ul class="blockList">
 <li class="blockList">


[03/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html
deleted file mode 100644
index af4dcf4..0000000
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html
+++ /dev/null
@@ -1,340 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span><a name="line.1"></a>
-<span class="sourceLineNo">002</span>/**<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
-<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
-<span class="sourceLineNo">012</span> *<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
-<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
-<span class="sourceLineNo">018</span> */<a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.security.access;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.AuthUtil.toGroupEntry;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.junit.Assert.assertTrue;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.junit.Assert.fail;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.mockito.Mockito.mock;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import com.google.protobuf.Service;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import com.google.protobuf.ServiceException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.io.IOException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.security.PrivilegedExceptionAction;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.Collections;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.HashMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.ServerName;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.TableName;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessor;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.ipc.protobuf.generated.TestRpcServiceProtos;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.security.User;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.testclassification.SecurityTests;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.junit.BeforeClass;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.junit.ClassRule;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.junit.Test;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.junit.experimental.categories.Category;<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>/**<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * This class tests operations in MasterRpcServices which require ADMIN access.<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * It doesn't test all operations which require ADMIN access, only those which get vetted within<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * MasterRpcServices at the point of entry itself (unlike old approach of using<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * hooks in AccessController).<a name="line.58"></a>
-<span class="sourceLineNo">059</span> *<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * Sidenote:<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * There is one big difference between how security tests for AccessController hooks work, and how<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * the tests in this class for security in MasterRpcServices work.<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * The difference arises because of the way AC &amp; MasterRpcServices get the user.<a name="line.63"></a>
-<span class="sourceLineNo">064</span> *<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * In AccessController, it first checks if there is an active rpc user in ObserverContext. If not,<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * it uses UserProvider for current user. This *might* make sense in the context of coprocessors,<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * because they can be called outside the context of RPCs.<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * But in the context of MasterRpcServices, only one way makes sense - RPCServer.getRequestUser().<a name="line.68"></a>
-<span class="sourceLineNo">069</span> *<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * In AC tests, when we do FooUser.runAs on AccessController instance directly, it bypasses<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * the rpc framework completely, but works because UserProvider provides the correct user, i.e.<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * FooUser in this case.<a name="line.72"></a>
-<span class="sourceLineNo">073</span> *<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * But this doesn't work for the tests here, so we go around by doing complete RPCs.<a name="line.74"></a>
-<span class="sourceLineNo">075</span> */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>@Category({SecurityTests.class, MediumTests.class})<a name="line.76"></a>
-<span class="sourceLineNo">077</span>public class TestAdminOnlyOperations {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  @ClassRule<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      HBaseClassTestRule.forClass(TestAdminOnlyOperations.class);<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private static Configuration conf;<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  // user granted with all global permission<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private static User USER_ADMIN;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  // user without admin permissions<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private static User USER_NON_ADMIN;<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static final String GROUP_ADMIN = "admin_group";<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private static User USER_GROUP_ADMIN;<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  // Dummy service to test execService calls. Needs to be public so can be loaded as Coprocessor.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  public static class DummyCpService implements MasterCoprocessor, RegionServerCoprocessor {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    public DummyCpService() {}<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>    @Override<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    public Iterable&lt;Service&gt; getServices() {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      return Collections.singleton(mock(TestRpcServiceProtos.TestProtobufRpcProto.class));<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  private static void enableSecurity(Configuration conf) throws IOException {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    conf.set("hadoop.security.authorization", "false");<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    conf.set("hadoop.security.authentication", "simple");<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    conf.set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, AccessController.class.getName() +<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      "," + DummyCpService.class.getName());<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    conf.set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, AccessController.class.getName());<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    conf.set(CoprocessorHost.REGIONSERVER_COPROCESSOR_CONF_KEY, AccessController.class.getName() +<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      "," + DummyCpService.class.getName());<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    conf.set(User.HBASE_SECURITY_AUTHORIZATION_CONF_KEY, "true");<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    SecureTestUtil.configureSuperuser(conf);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  @BeforeClass<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  public static void setup() throws Exception {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    conf = TEST_UTIL.getConfiguration();<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    // Enable security<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    enableSecurity(conf);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    TEST_UTIL.startMiniCluster();<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // Wait for the ACL table to become available<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    TEST_UTIL.waitUntilAllRegionsAssigned(AccessControlLists.ACL_TABLE_NAME);<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>    // Create users<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    USER_ADMIN = User.createUserForTesting(conf, "admin", new String[0]);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    USER_NON_ADMIN = User.createUserForTesting(conf, "non_admin", new String[0]);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    USER_GROUP_ADMIN =<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        User.createUserForTesting(conf, "user_group_admin", new String[] { GROUP_ADMIN });<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>    // Assign permissions to users and groups<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    SecureTestUtil.grantGlobal(TEST_UTIL, USER_ADMIN.getShortName(), Permission.Action.ADMIN);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    SecureTestUtil.grantGlobal(TEST_UTIL, toGroupEntry(GROUP_ADMIN), Permission.Action.ADMIN);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    // No permissions to USER_NON_ADMIN<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  interface Action {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    void run(Admin admin) throws Exception;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private void verifyAllowed(User user, Action action) throws Exception {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>          Admin admin = conn.getAdmin()) {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        action.run(admin);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      } catch (IOException e) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        fail(e.toString());<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return null;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    });<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  }<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private void verifyDenied(User user, Action action) throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      boolean accessDenied = false;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>          Admin admin = conn.getAdmin()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        action.run(admin);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      } catch (AccessDeniedException e) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        accessDenied = true;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      assertTrue("Expected access to be denied", accessDenied);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      return null;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    });<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  private void verifiedDeniedServiceException(User user, Action action) throws Exception {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      boolean accessDenied = false;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>          Admin admin = conn.getAdmin()) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        action.run(admin);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      } catch (ServiceException e) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        // For MasterRpcServices.execService.<a name="line.175"></a>
-<span class="sourceLineNo">176</span>        if (e.getCause() instanceof AccessDeniedException) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          accessDenied = true;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        }<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      assertTrue("Expected access to be denied", accessDenied);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      return null;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    });<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  private void verifyAdminCheckForAction(Action action) throws Exception {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    verifyAllowed(USER_ADMIN, action);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    verifyDenied(USER_NON_ADMIN, action);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  @Test<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  public void testEnableCatalogJanitor() throws Exception {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    verifyAdminCheckForAction((admin) -&gt; admin.enableCatalogJanitor(true));<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>  @Test<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  public void testRunCatalogJanitor() throws Exception {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    verifyAdminCheckForAction((admin) -&gt; admin.runCatalogJanitor());<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  @Test<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  public void testCleanerChoreRunning() throws Exception {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    verifyAdminCheckForAction((admin) -&gt; admin.cleanerChoreSwitch(true));<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  @Test<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  public void testRunCleanerChore() throws Exception {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    verifyAdminCheckForAction((admin) -&gt; admin.runCleanerChore());<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  @Test<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  public void testExecProcedure() throws Exception {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    verifyAdminCheckForAction((admin) -&gt; {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      // Using existing table instead of creating a new one.<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      admin.execProcedure("flush-table-proc", TableName.META_TABLE_NAME.getNameAsString(),<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          new HashMap&lt;&gt;());<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    });<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>  @Test<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  public void testExecService() throws Exception {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    Action action = (admin) -&gt; {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface service =<a name="line.224"></a>
-<span class="sourceLineNo">225</span>          TestRpcServiceProtos.TestProtobufRpcProto.newBlockingStub(admin.coprocessorService());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      service.ping(null, TestProtos.EmptyRequestProto.getDefaultInstance());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    };<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>    verifyAllowed(USER_ADMIN, action);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    // This is same as above verifyAccessDenied<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    verifiedDeniedServiceException(USER_NON_ADMIN, action);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>  @Test<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public void testExecProcedureWithRet() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    verifyAdminCheckForAction((admin) -&gt; {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      // Using existing table instead of creating a new one.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      admin.execProcedureWithReturn("flush-table-proc", TableName.META_TABLE_NAME.getNameAsString(),<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          new HashMap&lt;&gt;());<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    });<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  @Test<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  public void testNormalize() throws Exception {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    verifyAdminCheckForAction((admin) -&gt; admin.normalize());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>  @Test<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  public void testSetNormalizerRunning() throws Exception {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    verifyAdminCheckForAction((admin) -&gt; admin.normalizerSwitch(true));<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  @Test<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  public void testExecRegionServerService() throws Exception {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    Action action = (admin) -&gt; {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      ServerName serverName = TEST_UTIL.getHBaseCluster().getRegionServer(0).getServerName();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface service =<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          TestRpcServiceProtos.TestProtobufRpcProto.newBlockingStub(<a name="line.259"></a>
-<span class="sourceLineNo">260</span>              admin.coprocessorService(serverName));<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      service.ping(null, TestProtos.EmptyRequestProto.getDefaultInstance());<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    };<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>    verifyAllowed(USER_ADMIN, action);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    verifiedDeniedServiceException(USER_NON_ADMIN, action);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>}<a name="line.268"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html
deleted file mode 100644
index af4dcf4..0000000
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html
+++ /dev/null
@@ -1,340 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span><a name="line.1"></a>
-<span class="sourceLineNo">002</span>/**<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
-<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
-<span class="sourceLineNo">012</span> *<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
-<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
-<span class="sourceLineNo">018</span> */<a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.security.access;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.AuthUtil.toGroupEntry;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.junit.Assert.assertTrue;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.junit.Assert.fail;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.mockito.Mockito.mock;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import com.google.protobuf.Service;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import com.google.protobuf.ServiceException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.io.IOException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.security.PrivilegedExceptionAction;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.Collections;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.HashMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.ServerName;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.TableName;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessor;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.ipc.protobuf.generated.TestRpcServiceProtos;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.security.User;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.testclassification.SecurityTests;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.junit.BeforeClass;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.junit.ClassRule;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.junit.Test;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.junit.experimental.categories.Category;<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>/**<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * This class tests operations in MasterRpcServices which require ADMIN access.<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * It doesn't test all operations which require ADMIN access, only those which get vetted within<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * MasterRpcServices at the point of entry itself (unlike old approach of using<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * hooks in AccessController).<a name="line.58"></a>
-<span class="sourceLineNo">059</span> *<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * Sidenote:<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * There is one big difference between how security tests for AccessController hooks work, and how<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * the tests in this class for security in MasterRpcServices work.<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * The difference arises because of the way AC &amp; MasterRpcServices get the user.<a name="line.63"></a>
-<span class="sourceLineNo">064</span> *<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * In AccessController, it first checks if there is an active rpc user in ObserverContext. If not,<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * it uses UserProvider for current user. This *might* make sense in the context of coprocessors,<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * because they can be called outside the context of RPCs.<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * But in the context of MasterRpcServices, only one way makes sense - RPCServer.getRequestUser().<a name="line.68"></a>
-<span class="sourceLineNo">069</span> *<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * In AC tests, when we do FooUser.runAs on AccessController instance directly, it bypasses<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * the rpc framework completely, but works because UserProvider provides the correct user, i.e.<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * FooUser in this case.<a name="line.72"></a>
-<span class="sourceLineNo">073</span> *<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * But this doesn't work for the tests here, so we go around by doing complete RPCs.<a name="line.74"></a>
-<span class="sourceLineNo">075</span> */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>@Category({SecurityTests.class, MediumTests.class})<a name="line.76"></a>
-<span class="sourceLineNo">077</span>public class TestAdminOnlyOperations {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  @ClassRule<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      HBaseClassTestRule.forClass(TestAdminOnlyOperations.class);<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private static Configuration conf;<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  // user granted with all global permission<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private static User USER_ADMIN;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  // user without admin permissions<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private static User USER_NON_ADMIN;<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static final String GROUP_ADMIN = "admin_group";<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private static User USER_GROUP_ADMIN;<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  // Dummy service to test execService calls. Needs to be public so can be loaded as Coprocessor.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  public static class DummyCpService implements MasterCoprocessor, RegionServerCoprocessor {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    public DummyCpService() {}<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>    @Override<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    public Iterable&lt;Service&gt; getServices() {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      return Collections.singleton(mock(TestRpcServiceProtos.TestProtobufRpcProto.class));<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  private static void enableSecurity(Configuration conf) throws IOException {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    conf.set("hadoop.security.authorization", "false");<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    conf.set("hadoop.security.authentication", "simple");<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    conf.set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, AccessController.class.getName() +<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      "," + DummyCpService.class.getName());<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    conf.set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, AccessController.class.getName());<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    conf.set(CoprocessorHost.REGIONSERVER_COPROCESSOR_CONF_KEY, AccessController.class.getName() +<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      "," + DummyCpService.class.getName());<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    conf.set(User.HBASE_SECURITY_AUTHORIZATION_CONF_KEY, "true");<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    SecureTestUtil.configureSuperuser(conf);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  @BeforeClass<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  public static void setup() throws Exception {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    conf = TEST_UTIL.getConfiguration();<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    // Enable security<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    enableSecurity(conf);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    TEST_UTIL.startMiniCluster();<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // Wait for the ACL table to become available<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    TEST_UTIL.waitUntilAllRegionsAssigned(AccessControlLists.ACL_TABLE_NAME);<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>    // Create users<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    USER_ADMIN = User.createUserForTesting(conf, "admin", new String[0]);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    USER_NON_ADMIN = User.createUserForTesting(conf, "non_admin", new String[0]);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    USER_GROUP_ADMIN =<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        User.createUserForTesting(conf, "user_group_admin", new String[] { GROUP_ADMIN });<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>    // Assign permissions to users and groups<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    SecureTestUtil.grantGlobal(TEST_UTIL, USER_ADMIN.getShortName(), Permission.Action.ADMIN);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    SecureTestUtil.grantGlobal(TEST_UTIL, toGroupEntry(GROUP_ADMIN), Permission.Action.ADMIN);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    // No permissions to USER_NON_ADMIN<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  interface Action {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    void run(Admin admin) throws Exception;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private void verifyAllowed(User user, Action action) throws Exception {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>          Admin admin = conn.getAdmin()) {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        action.run(admin);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      } catch (IOException e) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        fail(e.toString());<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return null;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    });<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  }<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private void verifyDenied(User user, Action action) throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      boolean accessDenied = false;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>          Admin admin = conn.getAdmin()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        action.run(admin);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      } catch (AccessDeniedException e) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        accessDenied = true;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      assertTrue("Expected access to be denied", accessDenied);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      return null;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    });<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  private void verifiedDeniedServiceException(User user, Action action) throws Exception {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      boolean accessDenied = false;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>          Admin admin = conn.getAdmin()) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        action.run(admin);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      } catch (ServiceException e) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        // For MasterRpcServices.execService.<a name="line.175"></a>
-<span class="sourceLineNo">176</span>        if (e.getCause() instanceof AccessDeniedException) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          accessDenied = true;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        }<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      assertTrue("Expected access to be denied", accessDenied);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      return null;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    });<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  private void verifyAdminCheckForAction(Action action) throws Exception {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    verifyAllowed(USER_ADMIN, action);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    verifyDenied(USER_NON_ADMIN, action);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  @Test<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  public void testEnableCatalogJanitor() throws Exception {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    verifyAdminCheckForAction((admin) -&gt; admin.enableCatalogJanitor(true));<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>  @Test<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  public void testRunCatalogJanitor() throws Exception {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    verifyAdminCheckForAction((admin) -&gt; admin.runCatalogJanitor());<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  @Test<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  public void testCleanerChoreRunning() throws Exception {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    verifyAdminCheckForAction((admin) -&gt; admin.cleanerChoreSwitch(true));<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  @Test<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  public void testRunCleanerChore() throws Exception {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    verifyAdminCheckForAction((admin) -&gt; admin.runCleanerChore());<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  @Test<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  public void testExecProcedure() throws Exception {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    verifyAdminCheckForAction((admin) -&gt; {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      // Using existing table instead of creating a new one.<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      admin.execProcedure("flush-table-proc", TableName.META_TABLE_NAME.getNameAsString(),<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          new HashMap&lt;&gt;());<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    });<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>  @Test<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  public void testExecService() throws Exception {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    Action action = (admin) -&gt; {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface service =<a name="line.224"></a>
-<span class="sourceLineNo">225</span>          TestRpcServiceProtos.TestProtobufRpcProto.newBlockingStub(admin.coprocessorService());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      service.ping(null, TestProtos.EmptyRequestProto.getDefaultInstance());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    };<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>    verifyAllowed(USER_ADMIN, action);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    // This is same as above verifyAccessDenied<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    verifiedDeniedServiceException(USER_NON_ADMIN, action);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>  @Test<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public void testExecProcedureWithRet() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    verifyAdminCheckForAction((admin) -&gt; {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      // Using existing table instead of creating a new one.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      admin.execProcedureWithReturn("flush-table-proc", TableName.META_TABLE_NAME.getNameAsString(),<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          new HashMap&lt;&gt;());<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    });<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  @Test<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  public void testNormalize() throws Exception {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    verifyAdminCheckForAction((admin) -&gt; admin.normalize());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>  @Test<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  public void testSetNormalizerRunning() throws Exception {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    verifyAdminCheckForAction((admin) -&gt; admin.normalizerSwitch(true));<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  @Test<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  public void testExecRegionServerService() throws Exception {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    Action action = (admin) -&gt; {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      ServerName serverName = TEST_UTIL.getHBaseCluster().getRegionServer(0).getServerName();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface service =<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          TestRpcServiceProtos.TestProtobufRpcProto.newBlockingStub(<a name="line.259"></a>
-<span class="sourceLineNo">260</span>              admin.coprocessorService(serverName));<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      service.ping(null, TestProtos.EmptyRequestProto.getDefaultInstance());<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    };<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>    verifyAllowed(USER_ADMIN, action);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    verifiedDeniedServiceException(USER_NON_ADMIN, action);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>}<a name="line.268"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html
deleted file mode 100644
index af4dcf4..0000000
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html
+++ /dev/null
@@ -1,340 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span><a name="line.1"></a>
-<span class="sourceLineNo">002</span>/**<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
-<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
-<span class="sourceLineNo">012</span> *<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
-<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
-<span class="sourceLineNo">018</span> */<a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.security.access;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.AuthUtil.toGroupEntry;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.junit.Assert.assertTrue;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.junit.Assert.fail;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.mockito.Mockito.mock;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import com.google.protobuf.Service;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import com.google.protobuf.ServiceException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.io.IOException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.security.PrivilegedExceptionAction;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.Collections;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.HashMap;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.ServerName;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.TableName;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessor;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ipc.protobuf.generated.TestProtos;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.ipc.protobuf.generated.TestRpcServiceProtos;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.security.User;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.testclassification.SecurityTests;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.junit.BeforeClass;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.junit.ClassRule;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.junit.Test;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.junit.experimental.categories.Category;<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>/**<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * This class tests operations in MasterRpcServices which require ADMIN access.<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * It doesn't test all operations which require ADMIN access, only those which get vetted within<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * MasterRpcServices at the point of entry itself (unlike old approach of using<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * hooks in AccessController).<a name="line.58"></a>
-<span class="sourceLineNo">059</span> *<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * Sidenote:<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * There is one big difference between how security tests for AccessController hooks work, and how<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * the tests in this class for security in MasterRpcServices work.<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * The difference arises because of the way AC &amp; MasterRpcServices get the user.<a name="line.63"></a>
-<span class="sourceLineNo">064</span> *<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * In AccessController, it first checks if there is an active rpc user in ObserverContext. If not,<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * it uses UserProvider for current user. This *might* make sense in the context of coprocessors,<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * because they can be called outside the context of RPCs.<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * But in the context of MasterRpcServices, only one way makes sense - RPCServer.getRequestUser().<a name="line.68"></a>
-<span class="sourceLineNo">069</span> *<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * In AC tests, when we do FooUser.runAs on AccessController instance directly, it bypasses<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * the rpc framework completely, but works because UserProvider provides the correct user, i.e.<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * FooUser in this case.<a name="line.72"></a>
-<span class="sourceLineNo">073</span> *<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * But this doesn't work for the tests here, so we go around by doing complete RPCs.<a name="line.74"></a>
-<span class="sourceLineNo">075</span> */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>@Category({SecurityTests.class, MediumTests.class})<a name="line.76"></a>
-<span class="sourceLineNo">077</span>public class TestAdminOnlyOperations {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  @ClassRule<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      HBaseClassTestRule.forClass(TestAdminOnlyOperations.class);<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private static Configuration conf;<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  // user granted with all global permission<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private static User USER_ADMIN;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  // user without admin permissions<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private static User USER_NON_ADMIN;<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static final String GROUP_ADMIN = "admin_group";<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private static User USER_GROUP_ADMIN;<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  // Dummy service to test execService calls. Needs to be public so can be loaded as Coprocessor.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  public static class DummyCpService implements MasterCoprocessor, RegionServerCoprocessor {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    public DummyCpService() {}<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>    @Override<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    public Iterable&lt;Service&gt; getServices() {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      return Collections.singleton(mock(TestRpcServiceProtos.TestProtobufRpcProto.class));<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  private static void enableSecurity(Configuration conf) throws IOException {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    conf.set("hadoop.security.authorization", "false");<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    conf.set("hadoop.security.authentication", "simple");<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    conf.set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY, AccessController.class.getName() +<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      "," + DummyCpService.class.getName());<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    conf.set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, AccessController.class.getName());<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    conf.set(CoprocessorHost.REGIONSERVER_COPROCESSOR_CONF_KEY, AccessController.class.getName() +<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      "," + DummyCpService.class.getName());<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    conf.set(User.HBASE_SECURITY_AUTHORIZATION_CONF_KEY, "true");<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    SecureTestUtil.configureSuperuser(conf);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  @BeforeClass<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  public static void setup() throws Exception {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    conf = TEST_UTIL.getConfiguration();<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    // Enable security<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    enableSecurity(conf);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    TEST_UTIL.startMiniCluster();<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // Wait for the ACL table to become available<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    TEST_UTIL.waitUntilAllRegionsAssigned(AccessControlLists.ACL_TABLE_NAME);<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>    // Create users<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    USER_ADMIN = User.createUserForTesting(conf, "admin", new String[0]);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    USER_NON_ADMIN = User.createUserForTesting(conf, "non_admin", new String[0]);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    USER_GROUP_ADMIN =<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        User.createUserForTesting(conf, "user_group_admin", new String[] { GROUP_ADMIN });<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>    // Assign permissions to users and groups<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    SecureTestUtil.grantGlobal(TEST_UTIL, USER_ADMIN.getShortName(), Permission.Action.ADMIN);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    SecureTestUtil.grantGlobal(TEST_UTIL, toGroupEntry(GROUP_ADMIN), Permission.Action.ADMIN);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    // No permissions to USER_NON_ADMIN<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  interface Action {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    void run(Admin admin) throws Exception;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private void verifyAllowed(User user, Action action) throws Exception {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>          Admin admin = conn.getAdmin()) {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        action.run(admin);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      } catch (IOException e) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        fail(e.toString());<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return null;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    });<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  }<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private void verifyDenied(User user, Action action) throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      boolean accessDenied = false;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>          Admin admin = conn.getAdmin()) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        action.run(admin);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      } catch (AccessDeniedException e) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        accessDenied = true;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      assertTrue("Expected access to be denied", accessDenied);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      return null;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    });<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  private void verifiedDeniedServiceException(User user, Action action) throws Exception {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    user.runAs((PrivilegedExceptionAction&lt;?&gt;) () -&gt; {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      boolean accessDenied = false;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      try (Connection conn = ConnectionFactory.createConnection(conf);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>          Admin admin = conn.getAdmin()) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        action.run(admin);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      } catch (ServiceException e) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        // For MasterRpcServices.execService.<a name="line.175"></a>
-<span class="sourceLineNo">176</span>        if (e.getCause() instanceof AccessDeniedException) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          accessDenied = true;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        }<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      assertTrue("Expected access to be denied", accessDenied);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      return null;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    });<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  private void verifyAdminCheckForAction(Action action) throws Exception {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    verifyAllowed(USER_ADMIN, action);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    verifyDenied(USER_NON_ADMIN, action);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  @Test<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  public void testEnableCatalogJanitor() throws Exception {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    verifyAdminCheckForAction((admin) -&gt; admin.enableCatalogJanitor(true));<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>  @Test<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  public void testRunCatalogJanitor() throws Exception {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    verifyAdminCheckForAction((admin) -&gt; admin.runCatalogJanitor());<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  @Test<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  public void testCleanerChoreRunning() throws Exception {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    verifyAdminCheckForAction((admin) -&gt; admin.cleanerChoreSwitch(true));<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  @Test<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  public void testRunCleanerChore() throws Exception {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    verifyAdminCheckForAction((admin) -&gt; admin.runCleanerChore());<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  @Test<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  public void testExecProcedure() throws Exception {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    verifyAdminCheckForAction((admin) -&gt; {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      // Using existing table instead of creating a new one.<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      admin.execProcedure("flush-table-proc", TableName.META_TABLE_NAME.getNameAsString(),<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          new HashMap&lt;&gt;());<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    });<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>  @Test<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  public void testExecService() throws Exception {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    Action action = (admin) -&gt; {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface service =<a name="line.224"></a>
-<span class="sourceLineNo">225</span>          TestRpcServiceProtos.TestProtobufRpcProto.newBlockingStub(admin.coprocessorService());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      service.ping(null, TestProtos.EmptyRequestProto.getDefaultInstance());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    };<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>    verifyAllowed(USER_ADMIN, action);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    // This is same as above verifyAccessDenied<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    verifiedDeniedServiceException(USER_NON_ADMIN, action);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>  @Test<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public void testExecProcedureWithRet() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    verifyAdminCheckForAction((admin) -&gt; {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      // Using existing table instead of creating a new one.<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      admin.execProcedureWithReturn("flush-table-proc", TableName.META_TABLE_NAME.getNameAsString(),<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          new HashMap&lt;&gt;());<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    });<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  @Test<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  public void testNormalize() throws Exception {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    verifyAdminCheckForAction((admin) -&gt; admin.normalize());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>  @Test<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  public void testSetNormalizerRunning() throws Exception {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    verifyAdminCheckForAction((admin) -&gt; admin.normalizerSwitch(true));<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  @Test<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  public void testExecRegionServerService() throws Exception {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    Action action = (admin) -&gt; {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      ServerName serverName = TEST_UTIL.getHBaseCluster().getRegionServer(0).getServerName();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface service =<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          TestRpcServiceProtos.TestProtobufRpcProto.newBlockingStub(<a name="line.259"></a>
-<span class="sourceLineNo">260</span>              admin.coprocessorService(serverName));<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      service.ping(null, TestProtos.EmptyRequestProto.getDefaultInstance());<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    };<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>    verifyAllowed(USER_ADMIN, action);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    verifyAllowed(USER_GROUP_ADMIN, action);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    verifiedDeniedServiceException(USER_NON_ADMIN, action);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>}<a name="line.268"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>


[05/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.html
new file mode 100644
index 0000000..e00d0ac
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.security.access.TestRpcAccessChecks (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.security.access.TestRpcAccessChecks (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.html" target="_top">Frames</a></li>
+<li><a href="TestRpcAccessChecks.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.security.access.TestRpcAccessChecks" class="title">Uses of Class<br>org.apache.hadoop.hbase.security.access.TestRpcAccessChecks</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.security.access.TestRpcAccessChecks</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.html" target="_top">Frames</a></li>
+<li><a href="TestRpcAccessChecks.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/package-frame.html
index 6283257..6c01025 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/package-frame.html
@@ -14,7 +14,7 @@
 <h2 title="Interfaces">Interfaces</h2>
 <ul title="Interfaces">
 <li><a href="SecureTestUtil.AccessTestAction.html" title="interface in org.apache.hadoop.hbase.security.access" target="classFrame"><span class="interfaceName">SecureTestUtil.AccessTestAction</span></a></li>
-<li><a href="TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access" target="classFrame"><span class="interfaceName">TestAdminOnlyOperations.Action</span></a></li>
+<li><a href="TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access" target="classFrame"><span class="interfaceName">TestRpcAccessChecks.Action</span></a></li>
 </ul>
 <h2 title="Classes">Classes</h2>
 <ul title="Classes">
@@ -29,13 +29,13 @@
 <li><a href="TestAccessController2.MyAccessController.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestAccessController2.MyAccessController</a></li>
 <li><a href="TestAccessController3.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestAccessController3</a></li>
 <li><a href="TestAccessController3.FaultyAccessController.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestAccessController3.FaultyAccessController</a></li>
-<li><a href="TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestAdminOnlyOperations</a></li>
-<li><a href="TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestAdminOnlyOperations.DummyCpService</a></li>
 <li><a href="TestCellACLs.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestCellACLs</a></li>
 <li><a href="TestCellACLWithMultipleVersions.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestCellACLWithMultipleVersions</a></li>
 <li><a href="TestCoprocessorWhitelistMasterObserver.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestCoprocessorWhitelistMasterObserver</a></li>
 <li><a href="TestCoprocessorWhitelistMasterObserver.TestRegionObserver.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestCoprocessorWhitelistMasterObserver.TestRegionObserver</a></li>
 <li><a href="TestNamespaceCommands.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestNamespaceCommands</a></li>
+<li><a href="TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestRpcAccessChecks</a></li>
+<li><a href="TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestRpcAccessChecks.DummyCpService</a></li>
 <li><a href="TestScanEarlyTermination.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestScanEarlyTermination</a></li>
 <li><a href="TestTablePermissions.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestTablePermissions</a></li>
 <li><a href="TestWithDisabledAuthorization.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestWithDisabledAuthorization</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/package-summary.html
index fceea8c..61b08be 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/package-summary.html
@@ -90,7 +90,7 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 </tbody>
@@ -156,16 +156,6 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations</a></td>
-<td class="colLast">
-<div class="block">This class tests operations in MasterRpcServices which require ADMIN access.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.DummyCpService</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestCellACLs.html" title="class in org.apache.hadoop.hbase.security.access">TestCellACLs</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -188,6 +178,16 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></td>
+<td class="colLast">
+<div class="block">This class tests operations in MasterRpcServices which require ADMIN access.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.DummyCpService</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html" title="class in org.apache.hadoop.hbase.security.access">TestScanEarlyTermination</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index 82c29d5..cf1b6fe 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -113,9 +113,9 @@
 </li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SecureTestUtil.MasterSyncObserver.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SecureTestUtil.MasterSyncObserver</span></a> (implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.hadoop.hbase.coprocessor.MasterObserver)</li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAccessController.BulkLoadHelper.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestAccessController.BulkLoadHelper</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestAdminOnlyOperations</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestAdminOnlyOperations.DummyCpService</span></a> (implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor)</li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestCoprocessorWhitelistMasterObserver.TestRegionObserver.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestCoprocessorWhitelistMasterObserver.TestRegionObserver</span></a> (implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionObserver)</li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestRpcAccessChecks</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestRpcAccessChecks.DummyCpService</span></a> (implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor)</li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestTablePermissions.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestTablePermissions</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestZKPermissionWatcher</span></a></li>
 </ul>
@@ -128,7 +128,7 @@
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SecureTestUtil.AccessTestAction.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SecureTestUtil.AccessTestAction</span></a></li>
 </ul>
 </li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestAdminOnlyOperations.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestRpcAccessChecks.Action</span></a></li>
 </ul>
 </div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/package-use.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/package-use.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/package-use.html
index a398c7f..de31221 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/package-use.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/package-use.html
@@ -158,7 +158,7 @@
 </td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.Action.html#org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a>&nbsp;</td>
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.Action.html#org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;</td>
 </tr>
 </tbody>
 </table>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
index 77c24c6..ab7cd54 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -253,10 +253,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 84112c6..434a274 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -139,9 +139,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index d1e0012..8c40739 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -2147,8 +2147,6 @@
 <li type="circle">org.apache.hadoop.hbase.net.<a href="org/apache/hadoop/hbase/net/TestAddress.html" title="class in org.apache.hadoop.hbase.net"><span class="typeNameLink">TestAddress</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAdmin1.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestAdmin1</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAdmin2.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestAdmin2</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestAdminOnlyOperations</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestAdminOnlyOperations.DummyCpService</span></a> (implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor)</li>
 <li type="circle">org.apache.hadoop.hbase.io.crypto.aes.<a href="org/apache/hadoop/hbase/io/crypto/aes/TestAES.html" title="class in org.apache.hadoop.hbase.io.crypto.aes"><span class="typeNameLink">TestAES</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAllowPartialScanResultCache.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestAllowPartialScanResultCache</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAlwaysSetScannerId.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestAlwaysSetScannerId</span></a></li>
@@ -3329,6 +3327,8 @@
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestRowProcessorEndpoint.IncrementRunner.html" title="class in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">TestRowProcessorEndpoint.IncrementRunner</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestRowProcessorEndpoint.SwapRowsRunner.html" title="class in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">TestRowProcessorEndpoint.SwapRowsRunner</span></a> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRowTooBig.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRowTooBig</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestRpcAccessChecks</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestRpcAccessChecks.DummyCpService</span></a> (implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor)</li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestRpcClientDeprecatedNameMapping.html" title="class in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">TestRpcClientDeprecatedNameMapping</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestRpcClientLeaks.html" title="class in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">TestRpcClientLeaks</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRpcControllerFactory.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestRpcControllerFactory</span></a></li>
@@ -3916,7 +3916,6 @@
 <li type="circle">org.apache.hadoop.hbase.testclassification.<a href="org/apache/hadoop/hbase/testclassification/RPCTests.html" title="interface in org.apache.hadoop.hbase.testclassification"><span class="typeNameLink">RPCTests</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.testclassification.<a href="org/apache/hadoop/hbase/testclassification/SecurityTests.html" title="interface in org.apache.hadoop.hbase.testclassification"><span class="typeNameLink">SecurityTests</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.testclassification.<a href="org/apache/hadoop/hbase/testclassification/SmallTests.html" title="interface in org.apache.hadoop.hbase.testclassification"><span class="typeNameLink">SmallTests</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestAdminOnlyOperations.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.MockRSExecutor.html" title="interface in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestAssignmentManager.MockRSExecutor</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncProcess.ResponseGenerator.html" title="interface in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestAsyncProcess.ResponseGenerator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncTableScanMetrics.ScanWithMetrics.html" title="interface in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestAsyncTableScanMetrics.ScanWithMetrics</span></a></li>
@@ -3927,6 +3926,7 @@
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHStore.MyListHook.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestHStore.MyListHook</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.client.<a href="org/apache/hadoop/hbase/rest/client/TestRemoteAdminRetries.CallExecutor.html" title="interface in org.apache.hadoop.hbase.rest.client"><span class="typeNameLink">TestRemoteAdminRetries.CallExecutor</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.client.<a href="org/apache/hadoop/hbase/rest/client/TestRemoteHTableRetries.CallExecutor.html" title="interface in org.apache.hadoop.hbase.rest.client"><span class="typeNameLink">TestRemoteHTableRetries.CallExecutor</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">TestRpcAccessChecks.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestSplitLogManager.Expr.html" title="interface in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestSplitLogManager.Expr</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/TestTableScan.ClientSideCellSetModel.Listener.html" title="interface in org.apache.hadoop.hbase.rest"><span class="typeNameLink">TestTableScan.ClientSideCellSetModel.Listener</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TimestampTestBase.FlushCache.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">TimestampTestBase.FlushCache</span></a></li>


[12/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
index eccc4a3..ebbde54 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
@@ -1744,1869 +1744,1872 @@
 <span class="sourceLineNo">1736</span>      HRegion region = getRegion(request.getRegion());<a name="line.1736"></a>
 <span class="sourceLineNo">1737</span>      RegionInfo info = region.getRegionInfo();<a name="line.1737"></a>
 <span class="sourceLineNo">1738</span>      byte[] bestSplitRow = null;<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>        HRegion r = region;<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        r.forceSplit(null);<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>        bestSplitRow = r.checkSplit();<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        // try to flush region first<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        if(bestSplitRow == null) {<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>          r.flush(true);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>          bestSplitRow = r.checkSplit();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        r.clearSplit();<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      }<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      }<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      builder.setSplittable(region.isSplittable());<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      builder.setMergeable(region.isMergeable());<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      return builder.build();<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>    } catch (IOException ie) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      throw new ServiceException(ie);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span><a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  @Override<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span><a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    List&lt;HRegion&gt; regions;<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    if (request.hasTableName()) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      regions = regionServer.getRegions(tableName);<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>    } else {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>      regions = regionServer.getRegions();<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    }<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span><a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    try {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      for (HRegion region : regions) {<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      }<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    } catch (IOException e) {<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      throw new ServiceException(e);<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    }<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>    builder.addAllRegionLoads(rLoads);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    return builder.build();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>  }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>  @Override<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>    requestCount.increment();<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      try {<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>        checkOpen();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>          switch (queueName) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            case "long":<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>              break;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            case "short":<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1815"></a>
+<span class="sourceLineNo">1739</span>      boolean shouldSplit = true;<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        HRegion r = region;<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        r.forceSplit(null);<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // Even after setting force split if split policy says no to split then we should not split.<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        shouldSplit = region.getSplitPolicy().shouldSplit() &amp;&amp; !info.isMetaRegion();<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>        bestSplitRow = r.checkSplit();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        // try to flush region first<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>        if(bestSplitRow == null) {<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>          r.flush(true);<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>          bestSplitRow = r.checkSplit();<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        }<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        r.clearSplit();<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      }<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      builder.setSplittable(region.isSplittable() &amp;&amp; shouldSplit);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      builder.setMergeable(region.isMergeable());<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>      }<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      return builder.build();<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>    } catch (IOException ie) {<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      throw new ServiceException(ie);<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    }<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>  }<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span><a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>  @Override<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span><a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>    List&lt;HRegion&gt; regions;<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    if (request.hasTableName()) {<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>      regions = regionServer.getRegions(tableName);<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>    } else {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>      regions = regionServer.getRegions();<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>    }<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    try {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      for (HRegion region : regions) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    } catch (IOException e) {<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>      throw new ServiceException(e);<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>    builder.addAllRegionLoads(rLoads);<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    return builder.build();<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  }<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span><a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>  @Override<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>    requestCount.increment();<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>      try {<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        checkOpen();<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>          switch (queueName) {<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            case "long":<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1815"></a>
 <span class="sourceLineNo">1816</span>              break;<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            default:<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>              throw new IOException("Unknown queue name " + queueName);<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>          }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>      } catch (IOException ie) {<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>        throw new ServiceException(ie);<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      } finally {<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        clearCompactionQueues.set(false);<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      }<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    } else {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>    }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    return respBuilder.build();<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>  }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>  /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>   * Get some information of the region server.<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>   *<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>   * @param controller the RPC controller<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>   * @param request the request<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>   * @throws ServiceException<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>   */<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>  @Override<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    try {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>      checkOpen();<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    } catch (IOException ie) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>      throw new ServiceException(ie);<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>    }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>    requestCount.increment();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>  }<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span><a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>  @Override<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    try {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>      checkOpen();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      HRegion region = getRegion(request.getRegion());<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      requestCount.increment();<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (request.getFamilyCount() == 0) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>      } else {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>          columnFamilies.add(cf.toByteArray());<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        }<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      int nCF = columnFamilies.size();<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      builder.addAllStoreFile(fileList);<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>      return builder.build();<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>    } catch (IOException ie) {<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>      throw new ServiceException(ie);<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>  }<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span><a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>  /**<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>   *<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>   * &lt;p&gt;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>   * Different manages states for the region are:<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>   *  &lt;/ul&gt;<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>   * &lt;p&gt;<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>   * &lt;/p&gt;<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>   * @param controller the RPC controller<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>   * @param request the request<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>   * @throws ServiceException<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>   */<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>  @Override<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>    requestCount.increment();<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>    if (request.hasServerStartCode()) {<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      // check that we are the same server that this RPC is intended for.<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long serverStartCode = request.getServerStartCode();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      if (regionServer.serverName.getStartcode() !=  serverStartCode) {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        throw new ServiceException(new DoNotRetryIOException("This RPC was intended for a " +<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>            "different server with startCode: " + serverStartCode + ", this server is: "<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>            + regionServer.serverName));<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>    }<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span><a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    try {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      checkOpen();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    } catch (IOException ie) {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      TableName tableName = null;<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      if (regionCount == 1) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>        if (ri != null) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>        throw new ServiceException(ie);<a name="line.1936"></a>
+<span class="sourceLineNo">1817</span>            case "short":<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>              break;<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            default:<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              throw new IOException("Unknown queue name " + queueName);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>          }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>        }<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>      } catch (IOException ie) {<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>        throw new ServiceException(ie);<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      } finally {<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        clearCompactionQueues.set(false);<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>      }<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    } else {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>    }<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    return respBuilder.build();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>  }<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span><a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>  /**<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>   * Get some information of the region server.<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>   *<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>   * @param controller the RPC controller<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>   * @param request the request<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>   * @throws ServiceException<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>   */<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>  @Override<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    try {<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>      checkOpen();<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>    } catch (IOException ie) {<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>      throw new ServiceException(ie);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>    }<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    requestCount.increment();<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>  }<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span><a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>  @Override<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>    try {<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      checkOpen();<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      HRegion region = getRegion(request.getRegion());<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      requestCount.increment();<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>      if (request.getFamilyCount() == 0) {<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      } else {<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>          columnFamilies.add(cf.toByteArray());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        }<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      int nCF = columnFamilies.size();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      builder.addAllStoreFile(fileList);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      return builder.build();<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    } catch (IOException ie) {<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>      throw new ServiceException(ie);<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>    }<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  }<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span><a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>  /**<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>   *<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>   * &lt;p&gt;<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>   * Different manages states for the region are:<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>   *  &lt;/ul&gt;<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>   * &lt;p&gt;<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>   * &lt;/p&gt;<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>   * @param controller the RPC controller<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>   * @param request the request<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>   * @throws ServiceException<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>   */<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>  @Override<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    requestCount.increment();<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>    if (request.hasServerStartCode()) {<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      // check that we are the same server that this RPC is intended for.<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      long serverStartCode = request.getServerStartCode();<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (regionServer.serverName.getStartcode() !=  serverStartCode) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        throw new ServiceException(new DoNotRetryIOException("This RPC was intended for a " +<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>            "different server with startCode: " + serverStartCode + ", this server is: "<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>            + regionServer.serverName));<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>    }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>    try {<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>      checkOpen();<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    } catch (IOException ie) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>      TableName tableName = null;<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      if (regionCount == 1) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        if (ri != null) {<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>        }<a name="line.1936"></a>
 <span class="sourceLineNo">1937</span>      }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>      synchronized (regionServer.online) {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>        try {<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>          }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>          checkOpen();<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>        } catch (InterruptedException t) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          Thread.currentThread().interrupt();<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          throw new ServiceException(t);<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>        } catch (IOException e) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          throw new ServiceException(e);<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>        }<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>      }<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    }<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span><a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      TableDescriptor htd;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      try {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        String encodedName = region.getEncodedName();<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>        if (onlineRegion != null) {<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>          // The region is already online. This should not happen any more.<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>          String error = "Received OPEN for the region:"<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          LOG.warn(error);<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>          //regionServer.abort(error);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>          //throw new IOException(error);<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          continue;<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        }<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span><a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>          encodedNameBytes, Boolean.TRUE);<a name="line.1980"></a>
+<span class="sourceLineNo">1938</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>        throw new ServiceException(ie);<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      }<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      synchronized (regionServer.online) {<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>        try {<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          }<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>          checkOpen();<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>        } catch (InterruptedException t) {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>          Thread.currentThread().interrupt();<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>          throw new ServiceException(t);<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>        } catch (IOException e) {<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>          throw new ServiceException(e);<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>        }<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      }<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      TableDescriptor htd;<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        String encodedName = region.getEncodedName();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        if (onlineRegion != null) {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>          // The region is already online. This should not happen any more.<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>          String error = "Received OPEN for the region:"<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          LOG.warn(error);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>          //regionServer.abort(error);<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>          //throw new IOException(error);<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>          continue;<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>        }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.1980"></a>
 <span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>            // There is a close in progress. This should not happen any more.<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>            String error = "Received OPEN for the region:"<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>            regionServer.abort(error);<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>            throw new IOException(error);<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>          }<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>        }<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span><a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>          // An open is in progress. This is supported, but let's log this.<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>              + " - ignoring this new request for this region.");<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>        }<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span><a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span><a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>          htd = htds.get(region.getTable());<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>          if (htd == null) {<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>            htds.put(region.getTable(), htd);<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>          }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>          if (htd == null) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2011"></a>
+<span class="sourceLineNo">1982</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>          encodedNameBytes, Boolean.TRUE);<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span><a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>            // There is a close in progress. This should not happen any more.<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>            String error = "Received OPEN for the region:"<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>            regionServer.abort(error);<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>            throw new IOException(error);<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>          }<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>        }<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>          // An open is in progress. This is supported, but let's log this.<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>              + " - ignoring this new request for this region.");<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>        }<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span><a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span><a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>          htd = htds.get(region.getTable());<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>          if (htd == null) {<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>            htds.put(region.getTable(), htd);<a name="line.2011"></a>
 <span class="sourceLineNo">2012</span>          }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>          // Need to pass the expected version in the constructor.<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>          if (regionServer.executorService == null) {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>          } else {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>            if (region.isMetaRegion()) {<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>            } else {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>              }<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>              } else {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2030"></a>
+<span class="sourceLineNo">2013</span>          if (htd == null) {<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>          }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>          // Need to pass the expected version in the constructor.<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>          if (regionServer.executorService == null) {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>          } else {<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>            if (region.isMetaRegion()) {<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>            } else {<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>              }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2030"></a>
 <span class="sourceLineNo">2031</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>              }<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>            }<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          }<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        }<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span><a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      } catch (IOException ie) {<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>        if (isBulkAssign) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>          throw new ServiceException(ie);<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>    return builder.build();<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>  }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span><a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>  /**<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   *  Wamrmup a region on this server.<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   *<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>   * closes the region bringing the most important pages in cache.<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>   * &lt;p&gt;<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>   *<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>   * @param controller the RPC controller<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>   * @param request the request<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>   * @throws ServiceException<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>   */<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>  @Override<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span><a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    TableDescriptor htd;<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span><a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    try {<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      checkOpen();<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>      String encodedName = region.getEncodedName();<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span><a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      if (onlineRegion != null) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>        return response;<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>      if (LOG.isDebugEnabled()) {<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        LOG.debug("Warming up Region " + region.getRegionNameAsString());<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span><a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span><a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>        return response;<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      }<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span><a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2092"></a>
+<span class="sourceLineNo">2032</span>              } else {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>              }<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>            }<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          }<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        }<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span><a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>      } catch (IOException ie) {<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>        if (isBulkAssign) {<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>        } else {<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>          throw new ServiceException(ie);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>        }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      }<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>    }<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    return builder.build();<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>  }<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span><a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>  /**<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>   *  Wamrmup a region on this server.<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>   *<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>   * closes the region bringing the most important pages in cache.<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>   * &lt;p&gt;<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>   *<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>   * @param controller the RPC controller<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>   * @param request the request<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>   * @throws ServiceException<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>   */<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>  @Override<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span><a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    TableDescriptor htd;<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span><a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    try {<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      checkOpen();<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>      String encodedName = region.getEncodedName();<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span><a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      if (onlineRegion != null) {<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>        return response;<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>      }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span><a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>      if (LOG.isDebugEnabled()) {<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        LOG.debug("Warming up Region " + region.getRegionNameAsString());<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>      }<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span><a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span><a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>        return response;<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>      }<a name="line.2092"></a>
 <span class="sourceLineNo">2093</span><a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>    } catch (IOException ie) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      throw new ServiceException(ie);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span><a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>    return response;<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  }<a name="line.2100"></a>
+<span class="sourceLineNo">2094</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span><a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    } catch (IOException ie) {<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>      throw new ServiceException(ie);<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    }<a name="line.2100"></a>
 <span class="sourceLineNo">2101</span><a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>  /**<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>   * Replay the given changes when distributedLogReplay WAL edits from a failed RS. The guarantee is<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>   * that the given mutations will be durable on the receiving RS if this method returns without any<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>   * exception.<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>   * @param controller the RPC controller<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>   * @param request the request<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>   * @throws ServiceException<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>   */<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>  @Override<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  @QosPriority(priority = HConstants.REPLAY_QOS)<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>  public ReplicateWALEntryResponse replay(final RpcController controller,<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    CellScanner cells = ((HBaseRpcController) controller).cellScanner();<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    try {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>      checkOpen();<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>      if (entries == null || entries.isEmpty()) {<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>        // empty input<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>      ByteString regionName = entries.get(0).getKey().getEncodedRegionName();<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      HRegion region = regionServer.getRegionByEncodedName(regionName.toStringUtf8());<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>      RegionCoprocessorHost coprocessorHost =<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>          ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>            ? region.getCoprocessorHost()<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>            : null; // do not invoke coprocessors if this is a secondary region replica<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>      List&lt;Pair&lt;WALKey, WALEdit&gt;&gt; walEntries = new ArrayList&lt;&gt;();<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      // Skip adding the edits to WAL if this is a secondary region replica<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>      boolean isPrimary = RegionReplicaUtil.isDefaultReplica(region.getRegionInfo());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>      Durability durability = isPrimary ? Durability.USE_DEFAULT : Durability.SKIP_WAL;<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span><a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      for (WALEntry entry : entries) {<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>        if (!regionName.equals(entry.getKey().getEncodedRegionName())) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>          throw new NotServingRegionException("Replay request contains entries from multiple " +<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>              "regions. First region:" + regionName.toStringUtf8() + " , other region:"<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>              + entry.getKey().getEncodedRegionName());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        }<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        if (regionServer.nonceManager != null &amp;&amp; isPrimary) {<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          long nonceGroup = entry.getKey().hasNonceGroup()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>            ? entry.getKey().getNonceGroup() : HConstants.NO_NONCE;<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>          long nonce = entry.getKey().hasNonce() ? entry.getKey().getNonce() : HConstants.NO_NONCE;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>          regionServer.nonceManager.reportOperationFromWal(<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>              nonceGroup,<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>              nonce,<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>              entry.getKey().getWriteTime());<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>        }<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        Pair&lt;WALKey, WALEdit&gt; walEntry = (coprocessorHost == null) ? null : new Pair&lt;&gt;();<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>        List&lt;WALSplitter.MutationReplay&gt; edits = WALSplitter.getMutationsFromWALEntry(entry,<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>          cells, walEntry, durability);<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>        if (coprocessorHost != null) {<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>          // Start coprocessor replay here. The coprocessor is for each WALEdit instead of a<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>          // KeyValue.<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>          if (coprocessorHost.preWALRestore(region.getRegionInfo(), walEntry.getFirst(),<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>            walEntry.getSecond())) {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>            // if bypass this log entry, ignore it ...<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>            continue;<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>          }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>          walEntries.add(walEntry);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>        }<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>        if(edits!=null &amp;&amp; !edits.isEmpty()) {<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>          // HBASE-17924<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>          // sort to improve lock efficiency<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>          Collections.sort(edits, (v1, v2) -&gt; Row.COMPARATOR.compare(v1.mutation, v2.mutation));<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          long replaySeqId = (entry.getKey().hasOrigSequenceNumber()) ?<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>            entry.getKey().getOrigSequenceNumber() : entry.getKey().getLogSequenceNumber();<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>          OperationStatus[] result = doReplayBatchOp(region, edits, replaySeqId);<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>          // check if it's a partial success<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>          for (int i = 0; result != null &amp;&amp; i &lt; result.length; i++) {<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>            if (result[i] != OperationStatus.SUCCESS) {<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>              throw new IOException(result[i].getExceptionMsg());<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>            }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>          }<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        }<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>      }<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span><a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      //sync wal at the end because ASYNC_WAL is used above<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>      WAL wal = region.getWAL();<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>      if (wal != null) {<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        wal.sync();<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>      }<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span><a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>      if (coprocessorHost != null) {<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>        for (Pair&lt;WALKey, WALEdit&gt; entry : walEntries) {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>          coprocessorHost.postWALRestore(region.getRegionInfo(), entry.getFirst(),<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>            entry.getSecond());<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        }<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>      }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>    } catch (IOException ie) {<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>      throw new ServiceException(ie);<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    } finally {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>      if (regionServer.metricsRegionServer != null) {<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>        regionServer.metricsRegionServer.updateReplay(<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>          EnvironmentEdgeManager.currentTime() - before);<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      }<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>    }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span><a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>  /**<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>   * Replicate WAL entries on the region server.<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>   *<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>   * @param controller the RPC controller<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>   * @param request the request<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>   * @throws ServiceException<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>   */<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>  @Override<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>  @QosPriority(priority=HConstants.REPLICATION_QOS)<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>  public ReplicateWALEntryResponse replicateWALEntry(final RpcController controller,<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>      checkOpen();<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      if (regionServer.replicationSinkHandler != null) {<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        requestCount.increment();<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        CellScanner cellScanner = ((HBaseRpcController)controller).cellScanner();<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>        regionServer.getRegionServerCoprocessorHost().preReplicateLogEnt

<TRUNCATED>

[18/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html
index 33418d0..3647d12 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html
@@ -30,293 +30,296 @@
 <span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.RandomAccessFile;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.nio.ByteBuffer;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.nio.channels.ClosedChannelException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.nio.channels.FileChannel;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.io.hfile.Cacheable;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.io.hfile.CacheableDeserializer;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.util.StringUtils;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.slf4j.Logger;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.slf4j.LoggerFactory;<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * IO engine that stores data to a file on the local file system.<a name="line.42"></a>
-<span class="sourceLineNo">043</span> */<a name="line.43"></a>
-<span class="sourceLineNo">044</span>@InterfaceAudience.Private<a name="line.44"></a>
-<span class="sourceLineNo">045</span>public class FileIOEngine implements IOEngine {<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  private static final Logger LOG = LoggerFactory.getLogger(FileIOEngine.class);<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  public static final String FILE_DELIMITER = ",";<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private final String[] filePaths;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  private final FileChannel[] fileChannels;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private final RandomAccessFile[] rafs;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  private final long sizePerFile;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private final long capacity;<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private FileReadAccessor readAccessor = new FileReadAccessor();<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private FileWriteAccessor writeAccessor = new FileWriteAccessor();<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public FileIOEngine(long capacity, boolean maintainPersistence, String... filePaths)<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      throws IOException {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    this.sizePerFile = capacity / filePaths.length;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    this.capacity = this.sizePerFile * filePaths.length;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    this.filePaths = filePaths;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    this.fileChannels = new FileChannel[filePaths.length];<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    if (!maintainPersistence) {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      for (String filePath : filePaths) {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>        File file = new File(filePath);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>        if (file.exists()) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>          if (LOG.isDebugEnabled()) {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>            LOG.debug("File " + filePath + " already exists. Deleting!!");<a name="line.69"></a>
-<span class="sourceLineNo">070</span>          }<a name="line.70"></a>
-<span class="sourceLineNo">071</span>          file.delete();<a name="line.71"></a>
-<span class="sourceLineNo">072</span>          // If deletion fails still we can manage with the writes<a name="line.72"></a>
-<span class="sourceLineNo">073</span>        }<a name="line.73"></a>
-<span class="sourceLineNo">074</span>      }<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    }<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    this.rafs = new RandomAccessFile[filePaths.length];<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      String filePath = filePaths[i];<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      try {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>        rafs[i] = new RandomAccessFile(filePath, "rw");<a name="line.80"></a>
-<span class="sourceLineNo">081</span>        long totalSpace = new File(filePath).getTotalSpace();<a name="line.81"></a>
-<span class="sourceLineNo">082</span>        if (totalSpace &lt; sizePerFile) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>          // The next setting length will throw exception,logging this message<a name="line.83"></a>
-<span class="sourceLineNo">084</span>          // is just used for the detail reason of exception,<a name="line.84"></a>
-<span class="sourceLineNo">085</span>          String msg = "Only " + StringUtils.byteDesc(totalSpace)<a name="line.85"></a>
-<span class="sourceLineNo">086</span>              + " total space under " + filePath + ", not enough for requested "<a name="line.86"></a>
-<span class="sourceLineNo">087</span>              + StringUtils.byteDesc(sizePerFile);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>          LOG.warn(msg);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        rafs[i].setLength(sizePerFile);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>        fileChannels[i] = rafs[i].getChannel();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>        LOG.info("Allocating cache " + StringUtils.byteDesc(sizePerFile)<a name="line.92"></a>
-<span class="sourceLineNo">093</span>            + ", on the path:" + filePath);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      } catch (IOException fex) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        LOG.error("Failed allocating cache on " + filePath, fex);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        shutdown();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>        throw fex;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  @Override<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  public String toString() {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    return "ioengine=" + this.getClass().getSimpleName() + ", paths="<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        + Arrays.asList(filePaths) + ", capacity=" + String.format("%,d", this.capacity);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * File IO engine is always able to support persistent storage for the cache<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @return true<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   */<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  @Override<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public boolean isPersistent() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    return true;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * Transfers data from file to the given byte buffer<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @param offset The offset in the file where the first byte to be read<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param length The length of buffer that should be allocated for reading<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   *               from the file channel<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * @return number of bytes read<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * @throws IOException<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   */<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public Cacheable read(long offset, int length, CacheableDeserializer&lt;Cacheable&gt; deserializer)<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      throws IOException {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    Preconditions.checkArgument(length &gt;= 0, "Length of read can not be less than 0.");<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    ByteBuffer dstBuffer = ByteBuffer.allocate(length);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    if (length != 0) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      accessFile(readAccessor, dstBuffer, offset);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      // The buffer created out of the fileChannel is formed by copying the data from the file<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      // Hence in this case there is no shared memory that we point to. Even if the BucketCache evicts<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      // this buffer from the file the data is already copied and there is no need to ensure that<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      // the results are not corrupted before consuming them.<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      if (dstBuffer.limit() != length) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        throw new RuntimeException("Only " + dstBuffer.limit() + " bytes read, " + length<a name="line.137"></a>
-<span class="sourceLineNo">138</span>            + " expected");<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      }<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return deserializer.deserialize(new SingleByteBuff(dstBuffer), true, MemoryType.EXCLUSIVE);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  @VisibleForTesting<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  void closeFileChannels() {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    for (FileChannel fileChannel: fileChannels) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      try {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        fileChannel.close();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      } catch (IOException e) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        LOG.warn("Failed to close FileChannel", e);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Transfers data from the given byte buffer to file<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * @param srcBuffer the given byte buffer from which bytes are to be read<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * @param offset The offset in the file where the first byte to be written<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @throws IOException<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void write(ByteBuffer srcBuffer, long offset) throws IOException {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    if (!srcBuffer.hasRemaining()) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      return;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    accessFile(writeAccessor, srcBuffer, offset);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Sync the data to file after writing<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * @throws IOException<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  @Override<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  public void sync() throws IOException {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    for (int i = 0; i &lt; fileChannels.length; i++) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      try {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        if (fileChannels[i] != null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          fileChannels[i].force(true);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      } catch (IOException ie) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        LOG.warn("Failed syncing data to " + this.filePaths[i]);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        throw ie;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>  /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * Close the file<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   */<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  @Override<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  public void shutdown() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      try {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        if (fileChannels[i] != null) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          fileChannels[i].close();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        if (rafs[i] != null) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          rafs[i].close();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      } catch (IOException ex) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        LOG.error("Failed closing " + filePaths[i] + " when shudown the IOEngine", ex);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>  @Override<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public void write(ByteBuff srcBuffer, long offset) throws IOException {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // When caching block into BucketCache there will be single buffer backing for this HFileBlock.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    assert srcBuffer.hasArray();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    write(ByteBuffer.wrap(srcBuffer.array(), srcBuffer.arrayOffset(),<a name="line.210"></a>
-<span class="sourceLineNo">211</span>            srcBuffer.remaining()), offset);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>  private void accessFile(FileAccessor accessor, ByteBuffer buffer,<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      long globalOffset) throws IOException {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    int startFileNum = getFileNum(globalOffset);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    int remainingAccessDataLen = buffer.remaining();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    int endFileNum = getFileNum(globalOffset + remainingAccessDataLen - 1);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    int accessFileNum = startFileNum;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    long accessOffset = getAbsoluteOffsetInFile(accessFileNum, globalOffset);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    int bufLimit = buffer.limit();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    while (true) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      int accessLen = 0;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      if (endFileNum &gt; accessFileNum) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // short the limit;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        buffer.limit((int) (buffer.limit() - remainingAccessDataLen<a name="line.227"></a>
-<span class="sourceLineNo">228</span>            + sizePerFile - accessOffset));<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      try {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        accessLen = accessor.access(fileChannel, buffer, accessOffset);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      } catch (ClosedChannelException e) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        LOG.warn("Caught ClosedChannelException accessing BucketCache, reopening file. ", e);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        refreshFileConnection(accessFileNum);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        continue;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      // recover the limit<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      buffer.limit(bufLimit);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      if (accessLen &lt; remainingAccessDataLen) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        remainingAccessDataLen -= accessLen;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        accessFileNum++;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        accessOffset = 0;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      } else {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        break;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      if (accessFileNum &gt;= fileChannels.length) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        throw new IOException("Required data len " + StringUtils.byteDesc(buffer.remaining())<a name="line.247"></a>
-<span class="sourceLineNo">248</span>            + " exceed the engine's capacity " + StringUtils.byteDesc(capacity) + " where offset="<a name="line.248"></a>
-<span class="sourceLineNo">249</span>            + globalOffset);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * Get the absolute offset in given file with the relative global offset.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * @param fileNum<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * @param globalOffset<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * @return the absolute offset<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  private long getAbsoluteOffsetInFile(int fileNum, long globalOffset) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    return globalOffset - fileNum * sizePerFile;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  private int getFileNum(long offset) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    if (offset &lt; 0) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      throw new IllegalArgumentException("Unexpected offset " + offset);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    int fileNum = (int) (offset / sizePerFile);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    if (fileNum &gt;= fileChannels.length) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      throw new RuntimeException("Not expected offset " + offset<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          + " where capacity=" + capacity);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    return fileNum;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  @VisibleForTesting<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  FileChannel[] getFileChannels() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    return fileChannels;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  @VisibleForTesting<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  void refreshFileConnection(int accessFileNum) throws IOException {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    if (fileChannel != null) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      fileChannel.close();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    rafs[accessFileNum] = new RandomAccessFile(filePaths[accessFileNum], "rw");<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    fileChannels[accessFileNum] = rafs[accessFileNum].getChannel();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  private static interface FileAccessor {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    int access(FileChannel fileChannel, ByteBuffer byteBuffer, long accessOffset)<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        throws IOException;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>  private static class FileReadAccessor implements FileAccessor {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    @Override<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        long accessOffset) throws IOException {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      return fileChannel.read(byteBuffer, accessOffset);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>  private static class FileWriteAccessor implements FileAccessor {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        long accessOffset) throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      return fileChannel.write(byteBuffer, accessOffset);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>}<a name="line.311"></a>
+<span class="sourceLineNo">025</span>import java.nio.channels.ClosedByInterruptException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.nio.channels.ClosedChannelException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.nio.channels.FileChannel;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Arrays;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.io.hfile.Cacheable;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.io.hfile.CacheableDeserializer;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.util.StringUtils;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.slf4j.Logger;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.slf4j.LoggerFactory;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>/**<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * IO engine that stores data to a file on the local file system.<a name="line.43"></a>
+<span class="sourceLineNo">044</span> */<a name="line.44"></a>
+<span class="sourceLineNo">045</span>@InterfaceAudience.Private<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class FileIOEngine implements IOEngine {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final Logger LOG = LoggerFactory.getLogger(FileIOEngine.class);<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  public static final String FILE_DELIMITER = ",";<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private final String[] filePaths;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private final FileChannel[] fileChannels;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private final RandomAccessFile[] rafs;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private final long sizePerFile;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private final long capacity;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private FileReadAccessor readAccessor = new FileReadAccessor();<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private FileWriteAccessor writeAccessor = new FileWriteAccessor();<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  public FileIOEngine(long capacity, boolean maintainPersistence, String... filePaths)<a name="line.59"></a>
+<span class="sourceLineNo">060</span>      throws IOException {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    this.sizePerFile = capacity / filePaths.length;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    this.capacity = this.sizePerFile * filePaths.length;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    this.filePaths = filePaths;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    this.fileChannels = new FileChannel[filePaths.length];<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    if (!maintainPersistence) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      for (String filePath : filePaths) {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>        File file = new File(filePath);<a name="line.67"></a>
+<span class="sourceLineNo">068</span>        if (file.exists()) {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>          if (LOG.isDebugEnabled()) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>            LOG.debug("File " + filePath + " already exists. Deleting!!");<a name="line.70"></a>
+<span class="sourceLineNo">071</span>          }<a name="line.71"></a>
+<span class="sourceLineNo">072</span>          file.delete();<a name="line.72"></a>
+<span class="sourceLineNo">073</span>          // If deletion fails still we can manage with the writes<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        }<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      }<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    }<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    this.rafs = new RandomAccessFile[filePaths.length];<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      String filePath = filePaths[i];<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      try {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>        rafs[i] = new RandomAccessFile(filePath, "rw");<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        long totalSpace = new File(filePath).getTotalSpace();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>        if (totalSpace &lt; sizePerFile) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>          // The next setting length will throw exception,logging this message<a name="line.84"></a>
+<span class="sourceLineNo">085</span>          // is just used for the detail reason of exception,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          String msg = "Only " + StringUtils.byteDesc(totalSpace)<a name="line.86"></a>
+<span class="sourceLineNo">087</span>              + " total space under " + filePath + ", not enough for requested "<a name="line.87"></a>
+<span class="sourceLineNo">088</span>              + StringUtils.byteDesc(sizePerFile);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>          LOG.warn(msg);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        rafs[i].setLength(sizePerFile);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        fileChannels[i] = rafs[i].getChannel();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>        LOG.info("Allocating cache " + StringUtils.byteDesc(sizePerFile)<a name="line.93"></a>
+<span class="sourceLineNo">094</span>            + ", on the path:" + filePath);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      } catch (IOException fex) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        LOG.error("Failed allocating cache on " + filePath, fex);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        shutdown();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        throw fex;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      }<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  @Override<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public String toString() {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    return "ioengine=" + this.getClass().getSimpleName() + ", paths="<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        + Arrays.asList(filePaths) + ", capacity=" + String.format("%,d", this.capacity);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * File IO engine is always able to support persistent storage for the cache<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @return true<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public boolean isPersistent() {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    return true;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  /**<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * Transfers data from file to the given byte buffer<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @param offset The offset in the file where the first byte to be read<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param length The length of buffer that should be allocated for reading<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   *               from the file channel<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * @return number of bytes read<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * @throws IOException<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  @Override<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  public Cacheable read(long offset, int length, CacheableDeserializer&lt;Cacheable&gt; deserializer)<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      throws IOException {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    Preconditions.checkArgument(length &gt;= 0, "Length of read can not be less than 0.");<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    ByteBuffer dstBuffer = ByteBuffer.allocate(length);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    if (length != 0) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      accessFile(readAccessor, dstBuffer, offset);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      // The buffer created out of the fileChannel is formed by copying the data from the file<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      // Hence in this case there is no shared memory that we point to. Even if the BucketCache evicts<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      // this buffer from the file the data is already copied and there is no need to ensure that<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      // the results are not corrupted before consuming them.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      if (dstBuffer.limit() != length) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        throw new RuntimeException("Only " + dstBuffer.limit() + " bytes read, " + length<a name="line.138"></a>
+<span class="sourceLineNo">139</span>            + " expected");<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      }<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    return deserializer.deserialize(new SingleByteBuff(dstBuffer), true, MemoryType.EXCLUSIVE);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @VisibleForTesting<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  void closeFileChannels() {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    for (FileChannel fileChannel: fileChannels) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      try {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        fileChannel.close();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      } catch (IOException e) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        LOG.warn("Failed to close FileChannel", e);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * Transfers data from the given byte buffer to file<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * @param srcBuffer the given byte buffer from which bytes are to be read<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * @param offset The offset in the file where the first byte to be written<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * @throws IOException<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void write(ByteBuffer srcBuffer, long offset) throws IOException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    if (!srcBuffer.hasRemaining()) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      return;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    accessFile(writeAccessor, srcBuffer, offset);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  /**<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * Sync the data to file after writing<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * @throws IOException<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  @Override<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  public void sync() throws IOException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    for (int i = 0; i &lt; fileChannels.length; i++) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      try {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        if (fileChannels[i] != null) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          fileChannels[i].force(true);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      } catch (IOException ie) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        LOG.warn("Failed syncing data to " + this.filePaths[i]);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        throw ie;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span>  /**<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * Close the file<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   */<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  @Override<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public void shutdown() {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      try {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        if (fileChannels[i] != null) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          fileChannels[i].close();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        }<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        if (rafs[i] != null) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          rafs[i].close();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      } catch (IOException ex) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        LOG.error("Failed closing " + filePaths[i] + " when shudown the IOEngine", ex);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>  @Override<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  public void write(ByteBuff srcBuffer, long offset) throws IOException {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    // When caching block into BucketCache there will be single buffer backing for this HFileBlock.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    assert srcBuffer.hasArray();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    write(ByteBuffer.wrap(srcBuffer.array(), srcBuffer.arrayOffset(),<a name="line.211"></a>
+<span class="sourceLineNo">212</span>            srcBuffer.remaining()), offset);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>  private void accessFile(FileAccessor accessor, ByteBuffer buffer,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      long globalOffset) throws IOException {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    int startFileNum = getFileNum(globalOffset);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    int remainingAccessDataLen = buffer.remaining();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    int endFileNum = getFileNum(globalOffset + remainingAccessDataLen - 1);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    int accessFileNum = startFileNum;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    long accessOffset = getAbsoluteOffsetInFile(accessFileNum, globalOffset);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    int bufLimit = buffer.limit();<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    while (true) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      int accessLen = 0;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      if (endFileNum &gt; accessFileNum) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        // short the limit;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        buffer.limit((int) (buffer.limit() - remainingAccessDataLen<a name="line.228"></a>
+<span class="sourceLineNo">229</span>            + sizePerFile - accessOffset));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      try {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        accessLen = accessor.access(fileChannel, buffer, accessOffset);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      } catch (ClosedByInterruptException e) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        throw e;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      } catch (ClosedChannelException e) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        LOG.warn("Caught ClosedChannelException accessing BucketCache, reopening file. ", e);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        refreshFileConnection(accessFileNum);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        continue;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // recover the limit<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      buffer.limit(bufLimit);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      if (accessLen &lt; remainingAccessDataLen) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        remainingAccessDataLen -= accessLen;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        accessFileNum++;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        accessOffset = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      } else {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        break;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      if (accessFileNum &gt;= fileChannels.length) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        throw new IOException("Required data len " + StringUtils.byteDesc(buffer.remaining())<a name="line.250"></a>
+<span class="sourceLineNo">251</span>            + " exceed the engine's capacity " + StringUtils.byteDesc(capacity) + " where offset="<a name="line.251"></a>
+<span class="sourceLineNo">252</span>            + globalOffset);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * Get the absolute offset in given file with the relative global offset.<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * @param fileNum<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * @param globalOffset<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * @return the absolute offset<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  private long getAbsoluteOffsetInFile(int fileNum, long globalOffset) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    return globalOffset - fileNum * sizePerFile;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  private int getFileNum(long offset) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    if (offset &lt; 0) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      throw new IllegalArgumentException("Unexpected offset " + offset);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    int fileNum = (int) (offset / sizePerFile);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    if (fileNum &gt;= fileChannels.length) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      throw new RuntimeException("Not expected offset " + offset<a name="line.273"></a>
+<span class="sourceLineNo">274</span>          + " where capacity=" + capacity);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    return fileNum;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>  @VisibleForTesting<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  FileChannel[] getFileChannels() {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    return fileChannels;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>  @VisibleForTesting<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  void refreshFileConnection(int accessFileNum) throws IOException {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    if (fileChannel != null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      fileChannel.close();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    rafs[accessFileNum] = new RandomAccessFile(filePaths[accessFileNum], "rw");<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    fileChannels[accessFileNum] = rafs[accessFileNum].getChannel();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  private static interface FileAccessor {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    int access(FileChannel fileChannel, ByteBuffer byteBuffer, long accessOffset)<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        throws IOException;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  private static class FileReadAccessor implements FileAccessor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        long accessOffset) throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      return fileChannel.read(byteBuffer, accessOffset);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>  private static class FileWriteAccessor implements FileAccessor {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        long accessOffset) throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      return fileChannel.write(byteBuffer, accessOffset);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>}<a name="line.314"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html
index c1f4d85..673bd6f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.StoreFileSplitter.html
@@ -187,7 +187,7 @@
 <span class="sourceLineNo">179</span>    }<a name="line.179"></a>
 <span class="sourceLineNo">180</span><a name="line.180"></a>
 <span class="sourceLineNo">181</span>    if (!splittable) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      IOException e = new IOException(regionToSplit.getShortNameToLog() + " NOT splittable");<a name="line.182"></a>
+<span class="sourceLineNo">182</span>      IOException e = new DoNotRetryIOException(regionToSplit.getShortNameToLog() + " NOT splittable");<a name="line.182"></a>
 <span class="sourceLineNo">183</span>      if (splittableCheckIOE != null) e.initCause(splittableCheckIOE);<a name="line.183"></a>
 <span class="sourceLineNo">184</span>      throw e;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html
index c1f4d85..673bd6f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.html
@@ -187,7 +187,7 @@
 <span class="sourceLineNo">179</span>    }<a name="line.179"></a>
 <span class="sourceLineNo">180</span><a name="line.180"></a>
 <span class="sourceLineNo">181</span>    if (!splittable) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      IOException e = new IOException(regionToSplit.getShortNameToLog() + " NOT splittable");<a name="line.182"></a>
+<span class="sourceLineNo">182</span>      IOException e = new DoNotRetryIOException(regionToSplit.getShortNameToLog() + " NOT splittable");<a name="line.182"></a>
 <span class="sourceLineNo">183</span>      if (splittableCheckIOE != null) e.initCause(splittableCheckIOE);<a name="line.183"></a>
 <span class="sourceLineNo">184</span>      throw e;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>


[06/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html
new file mode 100644
index 0000000..80bb659
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html
@@ -0,0 +1,763 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestRpcAccessChecks (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestRpcAccessChecks (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRpcAccessChecks.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" target="_top">Frames</a></li>
+<li><a href="TestRpcAccessChecks.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.security.access</div>
+<h2 title="Class TestRpcAccessChecks" class="title">Class TestRpcAccessChecks</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.security.access.TestRpcAccessChecks</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.91">TestRpcAccessChecks</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">This class tests operations in MasterRpcServices which require ADMIN access.
+ It doesn't test all operations which require ADMIN access, only those which get vetted within
+ MasterRpcServices at the point of entry itself (unlike old approach of using
+ hooks in AccessController).
+
+ Sidenote:
+ There is one big difference between how security tests for AccessController hooks work, and how
+ the tests in this class for security in MasterRpcServices work.
+ The difference arises because of the way AC & MasterRpcServices get the user.
+
+ In AccessController, it first checks if there is an active rpc user in ObserverContext. If not,
+ it uses UserProvider for current user. This *might* make sense in the context of coprocessors,
+ because they can be called outside the context of RPCs.
+ But in the context of MasterRpcServices, only one way makes sense - RPCServer.getRequestUser().
+
+ In AC tests, when we do FooUser.runAs on AccessController instance directly, it bypasses
+ the rpc framework completely, but works because UserProvider provides the correct user, i.e.
+ FooUser in this case.
+
+ But this doesn't work for the tests here, so we go around by doing complete RPCs.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) static interface&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.DummyCpService</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static org.apache.hadoop.conf.Configuration</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#conf">conf</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#GROUP_ADMIN">GROUP_ADMIN</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>org.junit.rules.TestName</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#TEST_NAME">TEST_NAME</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.security.User</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#USER_ADMIN">USER_ADMIN</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.security.User</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#USER_GROUP_ADMIN">USER_GROUP_ADMIN</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.security.User</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#USER_NON_ADMIN">USER_NON_ADMIN</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#TestRpcAccessChecks--">TestRpcAccessChecks</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>private static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#enableSecurity-org.apache.hadoop.conf.Configuration-">enableSecurity</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#setup--">setup</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testCleanerChoreRunning--">testCleanerChoreRunning</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testEnableCatalogJanitor--">testEnableCatalogJanitor</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testExecProcedure--">testExecProcedure</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testExecProcedureWithRet--">testExecProcedureWithRet</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testExecRegionServerService--">testExecRegionServerService</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testExecService--">testExecService</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testNormalize--">testNormalize</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i9" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testRunCatalogJanitor--">testRunCatalogJanitor</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i10" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testRunCleanerChore--">testRunCleanerChore</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testSetNormalizerRunning--">testSetNormalizerRunning</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i12" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testTableFlush--">testTableFlush</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i13" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#testTableFlushAndSnapshot--">testTableFlushAndSnapshot</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i14" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#verifiedDeniedServiceException-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">verifiedDeniedServiceException</a></span>(org.apache.hadoop.hbase.security.User&nbsp;user,
+                              <a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)</code>&nbsp;</td>
+</tr>
+<tr id="i15" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#verifyAdminCheckForAction-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">verifyAdminCheckForAction</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)</code>&nbsp;</td>
+</tr>
+<tr id="i16" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#verifyAllowed-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">verifyAllowed</a></span>(org.apache.hadoop.hbase.security.User&nbsp;user,
+             <a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)</code>&nbsp;</td>
+</tr>
+<tr id="i17" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#verifyDenied-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">verifyDenied</a></span>(org.apache.hadoop.hbase.security.User&nbsp;user,
+            <a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="CLASS_RULE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CLASS_RULE</h4>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.93">CLASS_RULE</a></pre>
+</li>
+</ul>
+<a name="TEST_NAME">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TEST_NAME</h4>
+<pre>public final&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.97">TEST_NAME</a></pre>
+</li>
+</ul>
+<a name="TEST_UTIL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TEST_UTIL</h4>
+<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.99">TEST_UTIL</a></pre>
+</li>
+</ul>
+<a name="conf">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>conf</h4>
+<pre>private static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.100">conf</a></pre>
+</li>
+</ul>
+<a name="USER_ADMIN">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>USER_ADMIN</h4>
+<pre>private static&nbsp;org.apache.hadoop.hbase.security.User <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.103">USER_ADMIN</a></pre>
+</li>
+</ul>
+<a name="USER_NON_ADMIN">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>USER_NON_ADMIN</h4>
+<pre>private static&nbsp;org.apache.hadoop.hbase.security.User <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.105">USER_NON_ADMIN</a></pre>
+</li>
+</ul>
+<a name="GROUP_ADMIN">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>GROUP_ADMIN</h4>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.107">GROUP_ADMIN</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.GROUP_ADMIN">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="USER_GROUP_ADMIN">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>USER_GROUP_ADMIN</h4>
+<pre>private static&nbsp;org.apache.hadoop.hbase.security.User <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.108">USER_GROUP_ADMIN</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestRpcAccessChecks--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestRpcAccessChecks</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.91">TestRpcAccessChecks</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="enableSecurity-org.apache.hadoop.conf.Configuration-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>enableSecurity</h4>
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.120">enableSecurity</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="setup--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setup</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.133">setup</a>()
+                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="verifyAllowed-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>verifyAllowed</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.159">verifyAllowed</a>(org.apache.hadoop.hbase.security.User&nbsp;user,
+                           <a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)
+                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="verifyDenied-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>verifyDenied</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.171">verifyDenied</a>(org.apache.hadoop.hbase.security.User&nbsp;user,
+                          <a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)
+                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="verifiedDeniedServiceException-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>verifiedDeniedServiceException</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.185">verifiedDeniedServiceException</a>(org.apache.hadoop.hbase.security.User&nbsp;user,
+                                            <a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)
+                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="verifyAdminCheckForAction-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>verifyAdminCheckForAction</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.203">verifyAdminCheckForAction</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)
+                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testEnableCatalogJanitor--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testEnableCatalogJanitor</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.210">testEnableCatalogJanitor</a>()
+                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testRunCatalogJanitor--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testRunCatalogJanitor</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.215">testRunCatalogJanitor</a>()
+                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testCleanerChoreRunning--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testCleanerChoreRunning</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.220">testCleanerChoreRunning</a>()
+                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testRunCleanerChore--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testRunCleanerChore</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.225">testRunCleanerChore</a>()
+                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testExecProcedure--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testExecProcedure</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.230">testExecProcedure</a>()
+                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testExecService--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testExecService</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.239">testExecService</a>()
+                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testExecProcedureWithRet--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testExecProcedureWithRet</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.253">testExecProcedureWithRet</a>()
+                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testNormalize--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testNormalize</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.262">testNormalize</a>()
+                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testSetNormalizerRunning--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testSetNormalizerRunning</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.267">testSetNormalizerRunning</a>()
+                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testExecRegionServerService--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testExecRegionServerService</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.272">testExecRegionServerService</a>()
+                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testTableFlush--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testTableFlush</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.287">testTableFlush</a>()
+                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testTableFlushAndSnapshot--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testTableFlushAndSnapshot</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.326">testTableFlushAndSnapshot</a>()
+                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRpcAccessChecks.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" target="_top">Frames</a></li>
+<li><a href="TestRpcAccessChecks.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html
index aa64179..97612b0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestTablePermissions.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -522,7 +522,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestTablePermissions.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.Action.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.Action.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.Action.html
deleted file mode 100644
index 05f323c..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.Action.html
+++ /dev/null
@@ -1,180 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Interface org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Interface org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action (Apache HBase 3.0.0-SNAPSHOT Test API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.Action.html" target="_top">Frames</a></li>
-<li><a href="TestAdminOnlyOperations.Action.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Interface org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action" class="title">Uses of Interface<br>org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action</h2>
-</div>
-<div class="classUseContainer">
-<ul class="blockList">
-<li class="blockList">
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
-<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Package</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase.security.access">
-<!--   -->
-</a>
-<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a> in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">TestAdminOnlyOperations.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#verifiedDeniedServiceException-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">verifiedDeniedServiceException</a></span>(org.apache.hadoop.hbase.security.User&nbsp;user,
-                              <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">TestAdminOnlyOperations.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#verifyAdminCheckForAction-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">verifyAdminCheckForAction</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">TestAdminOnlyOperations.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#verifyAllowed-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">verifyAllowed</a></span>(org.apache.hadoop.hbase.security.User&nbsp;user,
-             <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">TestAdminOnlyOperations.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#verifyDenied-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">verifyDenied</a></span>(org.apache.hadoop.hbase.security.User&nbsp;user,
-            <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.Action.html" target="_top">Frames</a></li>
-<li><a href="TestAdminOnlyOperations.Action.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.DummyCpService.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.DummyCpService.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.DummyCpService.html
deleted file mode 100644
index 59244e6..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.DummyCpService.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.DummyCpService (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.DummyCpService (Apache HBase 3.0.0-SNAPSHOT Test API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.DummyCpService.html" target="_top">Frames</a></li>
-<li><a href="TestAdminOnlyOperations.DummyCpService.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.DummyCpService" class="title">Uses of Class<br>org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.DummyCpService</h2>
-</div>
-<div class="classUseContainer">No usage of org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.DummyCpService</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.DummyCpService.html" target="_top">Frames</a></li>
-<li><a href="TestAdminOnlyOperations.DummyCpService.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.html
deleted file mode 100644
index 975fca5..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations (Apache HBase 3.0.0-SNAPSHOT Test API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.html" target="_top">Frames</a></li>
-<li><a href="TestAdminOnlyOperations.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations" class="title">Uses of Class<br>org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations</h2>
-</div>
-<div class="classUseContainer">No usage of org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TestAdminOnlyOperations.html" target="_top">Frames</a></li>
-<li><a href="TestAdminOnlyOperations.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.Action.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.Action.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.Action.html
new file mode 100644
index 0000000..2a04f5b
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.Action.html
@@ -0,0 +1,180 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Interface org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Interface org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.Action.html" target="_top">Frames</a></li>
+<li><a href="TestRpcAccessChecks.Action.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Interface org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action" class="title">Uses of Interface<br>org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.security.access">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a> in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/security/access/package-summary.html">org.apache.hadoop.hbase.security.access</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">TestRpcAccessChecks.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#verifiedDeniedServiceException-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">verifiedDeniedServiceException</a></span>(org.apache.hadoop.hbase.security.User&nbsp;user,
+                              <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">TestRpcAccessChecks.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#verifyAdminCheckForAction-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">verifyAdminCheckForAction</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">TestRpcAccessChecks.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#verifyAllowed-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">verifyAllowed</a></span>(org.apache.hadoop.hbase.security.User&nbsp;user,
+             <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">TestRpcAccessChecks.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#verifyDenied-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.Action-">verifyDenied</a></span>(org.apache.hadoop.hbase.security.User&nbsp;user,
+            <a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks.Action</a>&nbsp;action)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.Action.html" target="_top">Frames</a></li>
+<li><a href="TestRpcAccessChecks.Action.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.DummyCpService.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.DummyCpService.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.DummyCpService.html
new file mode 100644
index 0000000..5cf4ffe
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.DummyCpService.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.DummyCpService (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.DummyCpService (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.DummyCpService.html" target="_top">Frames</a></li>
+<li><a href="TestRpcAccessChecks.DummyCpService.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.DummyCpService" class="title">Uses of Class<br>org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.DummyCpService</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.DummyCpService</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/security/access/class-use/TestRpcAccessChecks.DummyCpService.html" target="_top">Frames</a></li>
+<li><a href="TestRpcAccessChecks.DummyCpService.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[17/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
index eccc4a3..ebbde54 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
@@ -1744,1869 +1744,1872 @@
 <span class="sourceLineNo">1736</span>      HRegion region = getRegion(request.getRegion());<a name="line.1736"></a>
 <span class="sourceLineNo">1737</span>      RegionInfo info = region.getRegionInfo();<a name="line.1737"></a>
 <span class="sourceLineNo">1738</span>      byte[] bestSplitRow = null;<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>        HRegion r = region;<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        r.forceSplit(null);<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>        bestSplitRow = r.checkSplit();<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        // try to flush region first<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        if(bestSplitRow == null) {<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>          r.flush(true);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>          bestSplitRow = r.checkSplit();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        r.clearSplit();<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      }<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      }<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      builder.setSplittable(region.isSplittable());<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      builder.setMergeable(region.isMergeable());<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      return builder.build();<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>    } catch (IOException ie) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      throw new ServiceException(ie);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span><a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  @Override<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span><a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    List&lt;HRegion&gt; regions;<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    if (request.hasTableName()) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      regions = regionServer.getRegions(tableName);<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>    } else {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>      regions = regionServer.getRegions();<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    }<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span><a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    try {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      for (HRegion region : regions) {<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      }<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    } catch (IOException e) {<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      throw new ServiceException(e);<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    }<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>    builder.addAllRegionLoads(rLoads);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    return builder.build();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>  }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>  @Override<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>    requestCount.increment();<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      try {<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>        checkOpen();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>          switch (queueName) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            case "long":<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>              break;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            case "short":<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1815"></a>
+<span class="sourceLineNo">1739</span>      boolean shouldSplit = true;<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        HRegion r = region;<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        r.forceSplit(null);<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // Even after setting force split if split policy says no to split then we should not split.<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        shouldSplit = region.getSplitPolicy().shouldSplit() &amp;&amp; !info.isMetaRegion();<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>        bestSplitRow = r.checkSplit();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        // try to flush region first<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>        if(bestSplitRow == null) {<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>          r.flush(true);<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>          bestSplitRow = r.checkSplit();<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        }<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        r.clearSplit();<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      }<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      builder.setSplittable(region.isSplittable() &amp;&amp; shouldSplit);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      builder.setMergeable(region.isMergeable());<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>      }<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      return builder.build();<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>    } catch (IOException ie) {<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      throw new ServiceException(ie);<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    }<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>  }<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span><a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>  @Override<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span><a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>    List&lt;HRegion&gt; regions;<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    if (request.hasTableName()) {<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>      regions = regionServer.getRegions(tableName);<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>    } else {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>      regions = regionServer.getRegions();<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>    }<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    try {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      for (HRegion region : regions) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    } catch (IOException e) {<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>      throw new ServiceException(e);<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>    builder.addAllRegionLoads(rLoads);<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    return builder.build();<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  }<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span><a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>  @Override<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>    requestCount.increment();<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>      try {<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        checkOpen();<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>          switch (queueName) {<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            case "long":<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1815"></a>
 <span class="sourceLineNo">1816</span>              break;<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            default:<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>              throw new IOException("Unknown queue name " + queueName);<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>          }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>      } catch (IOException ie) {<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>        throw new ServiceException(ie);<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      } finally {<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        clearCompactionQueues.set(false);<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      }<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    } else {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>    }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    return respBuilder.build();<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>  }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>  /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>   * Get some information of the region server.<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>   *<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>   * @param controller the RPC controller<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>   * @param request the request<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>   * @throws ServiceException<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>   */<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>  @Override<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    try {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>      checkOpen();<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    } catch (IOException ie) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>      throw new ServiceException(ie);<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>    }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>    requestCount.increment();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>  }<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span><a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>  @Override<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    try {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>      checkOpen();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      HRegion region = getRegion(request.getRegion());<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      requestCount.increment();<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (request.getFamilyCount() == 0) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>      } else {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>          columnFamilies.add(cf.toByteArray());<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        }<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      int nCF = columnFamilies.size();<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      builder.addAllStoreFile(fileList);<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>      return builder.build();<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>    } catch (IOException ie) {<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>      throw new ServiceException(ie);<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>  }<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span><a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>  /**<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>   *<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>   * &lt;p&gt;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>   * Different manages states for the region are:<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>   *  &lt;/ul&gt;<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>   * &lt;p&gt;<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>   * &lt;/p&gt;<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>   * @param controller the RPC controller<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>   * @param request the request<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>   * @throws ServiceException<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>   */<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>  @Override<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>    requestCount.increment();<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>    if (request.hasServerStartCode()) {<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      // check that we are the same server that this RPC is intended for.<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long serverStartCode = request.getServerStartCode();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      if (regionServer.serverName.getStartcode() !=  serverStartCode) {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        throw new ServiceException(new DoNotRetryIOException("This RPC was intended for a " +<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>            "different server with startCode: " + serverStartCode + ", this server is: "<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>            + regionServer.serverName));<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>    }<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span><a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    try {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      checkOpen();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    } catch (IOException ie) {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      TableName tableName = null;<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      if (regionCount == 1) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>        if (ri != null) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>        throw new ServiceException(ie);<a name="line.1936"></a>
+<span class="sourceLineNo">1817</span>            case "short":<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>              break;<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            default:<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              throw new IOException("Unknown queue name " + queueName);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>          }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>        }<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>      } catch (IOException ie) {<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>        throw new ServiceException(ie);<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      } finally {<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        clearCompactionQueues.set(false);<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>      }<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    } else {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>    }<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    return respBuilder.build();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>  }<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span><a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>  /**<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>   * Get some information of the region server.<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>   *<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>   * @param controller the RPC controller<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>   * @param request the request<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>   * @throws ServiceException<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>   */<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>  @Override<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    try {<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>      checkOpen();<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>    } catch (IOException ie) {<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>      throw new ServiceException(ie);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>    }<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    requestCount.increment();<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>  }<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span><a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>  @Override<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>    try {<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      checkOpen();<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      HRegion region = getRegion(request.getRegion());<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      requestCount.increment();<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>      if (request.getFamilyCount() == 0) {<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      } else {<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>          columnFamilies.add(cf.toByteArray());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        }<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      int nCF = columnFamilies.size();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      builder.addAllStoreFile(fileList);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      return builder.build();<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    } catch (IOException ie) {<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>      throw new ServiceException(ie);<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>    }<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  }<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span><a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>  /**<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>   *<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>   * &lt;p&gt;<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>   * Different manages states for the region are:<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>   *  &lt;/ul&gt;<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>   * &lt;p&gt;<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>   * &lt;/p&gt;<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>   * @param controller the RPC controller<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>   * @param request the request<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>   * @throws ServiceException<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>   */<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>  @Override<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    requestCount.increment();<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>    if (request.hasServerStartCode()) {<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      // check that we are the same server that this RPC is intended for.<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      long serverStartCode = request.getServerStartCode();<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (regionServer.serverName.getStartcode() !=  serverStartCode) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        throw new ServiceException(new DoNotRetryIOException("This RPC was intended for a " +<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>            "different server with startCode: " + serverStartCode + ", this server is: "<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>            + regionServer.serverName));<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>    }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>    try {<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>      checkOpen();<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    } catch (IOException ie) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>      TableName tableName = null;<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      if (regionCount == 1) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        if (ri != null) {<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>        }<a name="line.1936"></a>
 <span class="sourceLineNo">1937</span>      }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>      synchronized (regionServer.online) {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>        try {<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>          }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>          checkOpen();<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>        } catch (InterruptedException t) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          Thread.currentThread().interrupt();<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          throw new ServiceException(t);<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>        } catch (IOException e) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          throw new ServiceException(e);<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>        }<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>      }<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    }<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span><a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      TableDescriptor htd;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      try {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        String encodedName = region.getEncodedName();<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>        if (onlineRegion != null) {<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>          // The region is already online. This should not happen any more.<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>          String error = "Received OPEN for the region:"<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          LOG.warn(error);<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>          //regionServer.abort(error);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>          //throw new IOException(error);<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          continue;<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        }<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span><a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>          encodedNameBytes, Boolean.TRUE);<a name="line.1980"></a>
+<span class="sourceLineNo">1938</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>        throw new ServiceException(ie);<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      }<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      synchronized (regionServer.online) {<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>        try {<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          }<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>          checkOpen();<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>        } catch (InterruptedException t) {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>          Thread.currentThread().interrupt();<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>          throw new ServiceException(t);<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>        } catch (IOException e) {<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>          throw new ServiceException(e);<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>        }<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      }<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      TableDescriptor htd;<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        String encodedName = region.getEncodedName();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        if (onlineRegion != null) {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>          // The region is already online. This should not happen any more.<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>          String error = "Received OPEN for the region:"<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          LOG.warn(error);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>          //regionServer.abort(error);<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>          //throw new IOException(error);<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>          continue;<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>        }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.1980"></a>
 <span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>            // There is a close in progress. This should not happen any more.<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>            String error = "Received OPEN for the region:"<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>            regionServer.abort(error);<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>            throw new IOException(error);<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>          }<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>        }<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span><a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>          // An open is in progress. This is supported, but let's log this.<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>              + " - ignoring this new request for this region.");<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>        }<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span><a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span><a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>          htd = htds.get(region.getTable());<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>          if (htd == null) {<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>            htds.put(region.getTable(), htd);<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>          }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>          if (htd == null) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2011"></a>
+<span class="sourceLineNo">1982</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>          encodedNameBytes, Boolean.TRUE);<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span><a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>            // There is a close in progress. This should not happen any more.<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>            String error = "Received OPEN for the region:"<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>            regionServer.abort(error);<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>            throw new IOException(error);<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>          }<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>        }<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>          // An open is in progress. This is supported, but let's log this.<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>              + " - ignoring this new request for this region.");<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>        }<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span><a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span><a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>          htd = htds.get(region.getTable());<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>          if (htd == null) {<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>            htds.put(region.getTable(), htd);<a name="line.2011"></a>
 <span class="sourceLineNo">2012</span>          }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>          // Need to pass the expected version in the constructor.<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>          if (regionServer.executorService == null) {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>          } else {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>            if (region.isMetaRegion()) {<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>            } else {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>              }<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>              } else {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2030"></a>
+<span class="sourceLineNo">2013</span>          if (htd == null) {<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>          }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>          // Need to pass the expected version in the constructor.<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>          if (regionServer.executorService == null) {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>          } else {<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>            if (region.isMetaRegion()) {<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>            } else {<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>              }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2030"></a>
 <span class="sourceLineNo">2031</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>              }<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>            }<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          }<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        }<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span><a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      } catch (IOException ie) {<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>        if (isBulkAssign) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>          throw new ServiceException(ie);<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>    return builder.build();<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>  }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span><a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>  /**<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   *  Wamrmup a region on this server.<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   *<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>   * closes the region bringing the most important pages in cache.<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>   * &lt;p&gt;<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>   *<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>   * @param controller the RPC controller<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>   * @param request the request<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>   * @throws ServiceException<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>   */<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>  @Override<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span><a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    TableDescriptor htd;<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span><a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    try {<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      checkOpen();<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>      String encodedName = region.getEncodedName();<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span><a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      if (onlineRegion != null) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>        return response;<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>      if (LOG.isDebugEnabled()) {<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        LOG.debug("Warming up Region " + region.getRegionNameAsString());<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span><a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span><a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>        return response;<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      }<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span><a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2092"></a>
+<span class="sourceLineNo">2032</span>              } else {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>              }<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>            }<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          }<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        }<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span><a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>      } catch (IOException ie) {<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>        if (isBulkAssign) {<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>        } else {<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>          throw new ServiceException(ie);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>        }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      }<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>    }<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    return builder.build();<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>  }<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span><a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>  /**<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>   *  Wamrmup a region on this server.<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>   *<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>   * closes the region bringing the most important pages in cache.<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>   * &lt;p&gt;<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>   *<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>   * @param controller the RPC controller<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>   * @param request the request<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>   * @throws ServiceException<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>   */<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>  @Override<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span><a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    TableDescriptor htd;<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span><a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    try {<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      checkOpen();<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>      String encodedName = region.getEncodedName();<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span><a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      if (onlineRegion != null) {<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>        return response;<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>      }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span><a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>      if (LOG.isDebugEnabled()) {<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        LOG.debug("Warming up Region " + region.getRegionNameAsString());<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>      }<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span><a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span><a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>        return response;<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>      }<a name="line.2092"></a>
 <span class="sourceLineNo">2093</span><a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>    } catch (IOException ie) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      throw new ServiceException(ie);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span><a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>    return response;<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  }<a name="line.2100"></a>
+<span class="sourceLineNo">2094</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span><a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    } catch (IOException ie) {<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>      throw new ServiceException(ie);<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    }<a name="line.2100"></a>
 <span class="sourceLineNo">2101</span><a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>  /**<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>   * Replay the given changes when distributedLogReplay WAL edits from a failed RS. The guarantee is<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>   * that the given mutations will be durable on the receiving RS if this method returns without any<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>   * exception.<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>   * @param controller the RPC controller<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>   * @param request the request<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>   * @throws ServiceException<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>   */<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>  @Override<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  @QosPriority(priority = HConstants.REPLAY_QOS)<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>  public ReplicateWALEntryResponse replay(final RpcController controller,<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    CellScanner cells = ((HBaseRpcController) controller).cellScanner();<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    try {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>      checkOpen();<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>      if (entries == null || entries.isEmpty()) {<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>        // empty input<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>      ByteString regionName = entries.get(0).getKey().getEncodedRegionName();<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      HRegion region = regionServer.getRegionByEncodedName(regionName.toStringUtf8());<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>      RegionCoprocessorHost coprocessorHost =<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>          ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>            ? region.getCoprocessorHost()<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>            : null; // do not invoke coprocessors if this is a secondary region replica<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>      List&lt;Pair&lt;WALKey, WALEdit&gt;&gt; walEntries = new ArrayList&lt;&gt;();<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      // Skip adding the edits to WAL if this is a secondary region replica<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>      boolean isPrimary = RegionReplicaUtil.isDefaultReplica(region.getRegionInfo());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>      Durability durability = isPrimary ? Durability.USE_DEFAULT : Durability.SKIP_WAL;<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span><a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      for (WALEntry entry : entries) {<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>        if (!regionName.equals(entry.getKey().getEncodedRegionName())) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>          throw new NotServingRegionException("Replay request contains entries from multiple " +<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>              "regions. First region:" + regionName.toStringUtf8() + " , other region:"<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>              + entry.getKey().getEncodedRegionName());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        }<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        if (regionServer.nonceManager != null &amp;&amp; isPrimary) {<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          long nonceGroup = entry.getKey().hasNonceGroup()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>            ? entry.getKey().getNonceGroup() : HConstants.NO_NONCE;<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>          long nonce = entry.getKey().hasNonce() ? entry.getKey().getNonce() : HConstants.NO_NONCE;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>          regionServer.nonceManager.reportOperationFromWal(<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>              nonceGroup,<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>              nonce,<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>              entry.getKey().getWriteTime());<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>        }<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        Pair&lt;WALKey, WALEdit&gt; walEntry = (coprocessorHost == null) ? null : new Pair&lt;&gt;();<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>        List&lt;WALSplitter.MutationReplay&gt; edits = WALSplitter.getMutationsFromWALEntry(entry,<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>          cells, walEntry, durability);<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>        if (coprocessorHost != null) {<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>          // Start coprocessor replay here. The coprocessor is for each WALEdit instead of a<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>          // KeyValue.<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>          if (coprocessorHost.preWALRestore(region.getRegionInfo(), walEntry.getFirst(),<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>            walEntry.getSecond())) {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>            // if bypass this log entry, ignore it ...<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>            continue;<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>          }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>          walEntries.add(walEntry);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>        }<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>        if(edits!=null &amp;&amp; !edits.isEmpty()) {<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>          // HBASE-17924<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>          // sort to improve lock efficiency<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>          Collections.sort(edits, (v1, v2) -&gt; Row.COMPARATOR.compare(v1.mutation, v2.mutation));<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          long replaySeqId = (entry.getKey().hasOrigSequenceNumber()) ?<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>            entry.getKey().getOrigSequenceNumber() : entry.getKey().getLogSequenceNumber();<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>          OperationStatus[] result = doReplayBatchOp(region, edits, replaySeqId);<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>          // check if it's a partial success<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>          for (int i = 0; result != null &amp;&amp; i &lt; result.length; i++) {<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>            if (result[i] != OperationStatus.SUCCESS) {<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>              throw new IOException(result[i].getExceptionMsg());<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>            }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>          }<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        }<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>      }<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span><a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      //sync wal at the end because ASYNC_WAL is used above<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>      WAL wal = region.getWAL();<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>      if (wal != null) {<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        wal.sync();<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>      }<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span><a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>      if (coprocessorHost != null) {<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>        for (Pair&lt;WALKey, WALEdit&gt; entry : walEntries) {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>          coprocessorHost.postWALRestore(region.getRegionInfo(), entry.getFirst(),<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>            entry.getSecond());<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        }<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>      }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>    } catch (IOException ie) {<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>      throw new ServiceException(ie);<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    } finally {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>      if (regionServer.metricsRegionServer != null) {<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>        regionServer.metricsRegionServer.updateReplay(<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>          EnvironmentEdgeManager.currentTime() - before);<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      }<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>    }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span><a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>  /**<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>   * Replicate WAL entries on the region server.<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>   *<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>   * @param controller the RPC controller<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>   * @param request the request<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>   * @throws ServiceException<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>   */<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>  @Override<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>  @QosPriority(priority=HConstants.REPLICATION_QOS)<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>  public ReplicateWALEntryResponse replicateWALEntry(final RpcController controller,<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>      checkOpen();<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      if (regionServer.replicationSinkHandler != null) {<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        requestCount.increment();<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        CellScanner cellScanner = ((HBaseRpcController)controller).cellScanner();<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>        regionServer.getRegionServerCoprocessorHost().preReplicateLogEntries();<a name="line

<TRUNCATED>

[21/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html
index 33418d0..3647d12 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileAccessor.html
@@ -30,293 +30,296 @@
 <span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.RandomAccessFile;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.nio.ByteBuffer;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.nio.channels.ClosedChannelException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.nio.channels.FileChannel;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.io.hfile.Cacheable;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.io.hfile.CacheableDeserializer;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.util.StringUtils;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.slf4j.Logger;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.slf4j.LoggerFactory;<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * IO engine that stores data to a file on the local file system.<a name="line.42"></a>
-<span class="sourceLineNo">043</span> */<a name="line.43"></a>
-<span class="sourceLineNo">044</span>@InterfaceAudience.Private<a name="line.44"></a>
-<span class="sourceLineNo">045</span>public class FileIOEngine implements IOEngine {<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  private static final Logger LOG = LoggerFactory.getLogger(FileIOEngine.class);<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  public static final String FILE_DELIMITER = ",";<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private final String[] filePaths;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  private final FileChannel[] fileChannels;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private final RandomAccessFile[] rafs;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  private final long sizePerFile;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private final long capacity;<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private FileReadAccessor readAccessor = new FileReadAccessor();<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private FileWriteAccessor writeAccessor = new FileWriteAccessor();<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public FileIOEngine(long capacity, boolean maintainPersistence, String... filePaths)<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      throws IOException {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    this.sizePerFile = capacity / filePaths.length;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    this.capacity = this.sizePerFile * filePaths.length;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    this.filePaths = filePaths;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    this.fileChannels = new FileChannel[filePaths.length];<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    if (!maintainPersistence) {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      for (String filePath : filePaths) {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>        File file = new File(filePath);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>        if (file.exists()) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>          if (LOG.isDebugEnabled()) {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>            LOG.debug("File " + filePath + " already exists. Deleting!!");<a name="line.69"></a>
-<span class="sourceLineNo">070</span>          }<a name="line.70"></a>
-<span class="sourceLineNo">071</span>          file.delete();<a name="line.71"></a>
-<span class="sourceLineNo">072</span>          // If deletion fails still we can manage with the writes<a name="line.72"></a>
-<span class="sourceLineNo">073</span>        }<a name="line.73"></a>
-<span class="sourceLineNo">074</span>      }<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    }<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    this.rafs = new RandomAccessFile[filePaths.length];<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      String filePath = filePaths[i];<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      try {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>        rafs[i] = new RandomAccessFile(filePath, "rw");<a name="line.80"></a>
-<span class="sourceLineNo">081</span>        long totalSpace = new File(filePath).getTotalSpace();<a name="line.81"></a>
-<span class="sourceLineNo">082</span>        if (totalSpace &lt; sizePerFile) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>          // The next setting length will throw exception,logging this message<a name="line.83"></a>
-<span class="sourceLineNo">084</span>          // is just used for the detail reason of exception,<a name="line.84"></a>
-<span class="sourceLineNo">085</span>          String msg = "Only " + StringUtils.byteDesc(totalSpace)<a name="line.85"></a>
-<span class="sourceLineNo">086</span>              + " total space under " + filePath + ", not enough for requested "<a name="line.86"></a>
-<span class="sourceLineNo">087</span>              + StringUtils.byteDesc(sizePerFile);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>          LOG.warn(msg);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        rafs[i].setLength(sizePerFile);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>        fileChannels[i] = rafs[i].getChannel();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>        LOG.info("Allocating cache " + StringUtils.byteDesc(sizePerFile)<a name="line.92"></a>
-<span class="sourceLineNo">093</span>            + ", on the path:" + filePath);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      } catch (IOException fex) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        LOG.error("Failed allocating cache on " + filePath, fex);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        shutdown();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>        throw fex;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  @Override<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  public String toString() {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    return "ioengine=" + this.getClass().getSimpleName() + ", paths="<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        + Arrays.asList(filePaths) + ", capacity=" + String.format("%,d", this.capacity);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * File IO engine is always able to support persistent storage for the cache<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @return true<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   */<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  @Override<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public boolean isPersistent() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    return true;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * Transfers data from file to the given byte buffer<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @param offset The offset in the file where the first byte to be read<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param length The length of buffer that should be allocated for reading<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   *               from the file channel<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * @return number of bytes read<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * @throws IOException<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   */<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public Cacheable read(long offset, int length, CacheableDeserializer&lt;Cacheable&gt; deserializer)<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      throws IOException {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    Preconditions.checkArgument(length &gt;= 0, "Length of read can not be less than 0.");<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    ByteBuffer dstBuffer = ByteBuffer.allocate(length);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    if (length != 0) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      accessFile(readAccessor, dstBuffer, offset);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      // The buffer created out of the fileChannel is formed by copying the data from the file<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      // Hence in this case there is no shared memory that we point to. Even if the BucketCache evicts<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      // this buffer from the file the data is already copied and there is no need to ensure that<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      // the results are not corrupted before consuming them.<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      if (dstBuffer.limit() != length) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        throw new RuntimeException("Only " + dstBuffer.limit() + " bytes read, " + length<a name="line.137"></a>
-<span class="sourceLineNo">138</span>            + " expected");<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      }<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return deserializer.deserialize(new SingleByteBuff(dstBuffer), true, MemoryType.EXCLUSIVE);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  @VisibleForTesting<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  void closeFileChannels() {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    for (FileChannel fileChannel: fileChannels) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      try {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        fileChannel.close();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      } catch (IOException e) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        LOG.warn("Failed to close FileChannel", e);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Transfers data from the given byte buffer to file<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * @param srcBuffer the given byte buffer from which bytes are to be read<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * @param offset The offset in the file where the first byte to be written<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @throws IOException<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void write(ByteBuffer srcBuffer, long offset) throws IOException {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    if (!srcBuffer.hasRemaining()) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      return;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    accessFile(writeAccessor, srcBuffer, offset);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Sync the data to file after writing<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * @throws IOException<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  @Override<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  public void sync() throws IOException {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    for (int i = 0; i &lt; fileChannels.length; i++) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      try {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        if (fileChannels[i] != null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          fileChannels[i].force(true);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      } catch (IOException ie) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        LOG.warn("Failed syncing data to " + this.filePaths[i]);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        throw ie;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>  /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * Close the file<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   */<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  @Override<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  public void shutdown() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      try {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        if (fileChannels[i] != null) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          fileChannels[i].close();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        if (rafs[i] != null) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          rafs[i].close();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      } catch (IOException ex) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        LOG.error("Failed closing " + filePaths[i] + " when shudown the IOEngine", ex);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>  @Override<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public void write(ByteBuff srcBuffer, long offset) throws IOException {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // When caching block into BucketCache there will be single buffer backing for this HFileBlock.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    assert srcBuffer.hasArray();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    write(ByteBuffer.wrap(srcBuffer.array(), srcBuffer.arrayOffset(),<a name="line.210"></a>
-<span class="sourceLineNo">211</span>            srcBuffer.remaining()), offset);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>  private void accessFile(FileAccessor accessor, ByteBuffer buffer,<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      long globalOffset) throws IOException {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    int startFileNum = getFileNum(globalOffset);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    int remainingAccessDataLen = buffer.remaining();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    int endFileNum = getFileNum(globalOffset + remainingAccessDataLen - 1);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    int accessFileNum = startFileNum;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    long accessOffset = getAbsoluteOffsetInFile(accessFileNum, globalOffset);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    int bufLimit = buffer.limit();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    while (true) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      int accessLen = 0;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      if (endFileNum &gt; accessFileNum) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // short the limit;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        buffer.limit((int) (buffer.limit() - remainingAccessDataLen<a name="line.227"></a>
-<span class="sourceLineNo">228</span>            + sizePerFile - accessOffset));<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      try {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        accessLen = accessor.access(fileChannel, buffer, accessOffset);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      } catch (ClosedChannelException e) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        LOG.warn("Caught ClosedChannelException accessing BucketCache, reopening file. ", e);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        refreshFileConnection(accessFileNum);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        continue;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      // recover the limit<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      buffer.limit(bufLimit);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      if (accessLen &lt; remainingAccessDataLen) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        remainingAccessDataLen -= accessLen;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        accessFileNum++;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        accessOffset = 0;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      } else {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        break;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      if (accessFileNum &gt;= fileChannels.length) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        throw new IOException("Required data len " + StringUtils.byteDesc(buffer.remaining())<a name="line.247"></a>
-<span class="sourceLineNo">248</span>            + " exceed the engine's capacity " + StringUtils.byteDesc(capacity) + " where offset="<a name="line.248"></a>
-<span class="sourceLineNo">249</span>            + globalOffset);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * Get the absolute offset in given file with the relative global offset.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * @param fileNum<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * @param globalOffset<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * @return the absolute offset<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  private long getAbsoluteOffsetInFile(int fileNum, long globalOffset) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    return globalOffset - fileNum * sizePerFile;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  private int getFileNum(long offset) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    if (offset &lt; 0) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      throw new IllegalArgumentException("Unexpected offset " + offset);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    int fileNum = (int) (offset / sizePerFile);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    if (fileNum &gt;= fileChannels.length) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      throw new RuntimeException("Not expected offset " + offset<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          + " where capacity=" + capacity);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    return fileNum;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  @VisibleForTesting<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  FileChannel[] getFileChannels() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    return fileChannels;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  @VisibleForTesting<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  void refreshFileConnection(int accessFileNum) throws IOException {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    if (fileChannel != null) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      fileChannel.close();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    rafs[accessFileNum] = new RandomAccessFile(filePaths[accessFileNum], "rw");<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    fileChannels[accessFileNum] = rafs[accessFileNum].getChannel();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  private static interface FileAccessor {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    int access(FileChannel fileChannel, ByteBuffer byteBuffer, long accessOffset)<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        throws IOException;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>  private static class FileReadAccessor implements FileAccessor {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    @Override<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        long accessOffset) throws IOException {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      return fileChannel.read(byteBuffer, accessOffset);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>  private static class FileWriteAccessor implements FileAccessor {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        long accessOffset) throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      return fileChannel.write(byteBuffer, accessOffset);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>}<a name="line.311"></a>
+<span class="sourceLineNo">025</span>import java.nio.channels.ClosedByInterruptException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.nio.channels.ClosedChannelException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.nio.channels.FileChannel;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Arrays;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.io.hfile.Cacheable;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.io.hfile.CacheableDeserializer;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.util.StringUtils;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.slf4j.Logger;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.slf4j.LoggerFactory;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>/**<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * IO engine that stores data to a file on the local file system.<a name="line.43"></a>
+<span class="sourceLineNo">044</span> */<a name="line.44"></a>
+<span class="sourceLineNo">045</span>@InterfaceAudience.Private<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class FileIOEngine implements IOEngine {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final Logger LOG = LoggerFactory.getLogger(FileIOEngine.class);<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  public static final String FILE_DELIMITER = ",";<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private final String[] filePaths;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private final FileChannel[] fileChannels;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private final RandomAccessFile[] rafs;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private final long sizePerFile;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private final long capacity;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private FileReadAccessor readAccessor = new FileReadAccessor();<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private FileWriteAccessor writeAccessor = new FileWriteAccessor();<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  public FileIOEngine(long capacity, boolean maintainPersistence, String... filePaths)<a name="line.59"></a>
+<span class="sourceLineNo">060</span>      throws IOException {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    this.sizePerFile = capacity / filePaths.length;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    this.capacity = this.sizePerFile * filePaths.length;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    this.filePaths = filePaths;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    this.fileChannels = new FileChannel[filePaths.length];<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    if (!maintainPersistence) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      for (String filePath : filePaths) {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>        File file = new File(filePath);<a name="line.67"></a>
+<span class="sourceLineNo">068</span>        if (file.exists()) {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>          if (LOG.isDebugEnabled()) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>            LOG.debug("File " + filePath + " already exists. Deleting!!");<a name="line.70"></a>
+<span class="sourceLineNo">071</span>          }<a name="line.71"></a>
+<span class="sourceLineNo">072</span>          file.delete();<a name="line.72"></a>
+<span class="sourceLineNo">073</span>          // If deletion fails still we can manage with the writes<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        }<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      }<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    }<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    this.rafs = new RandomAccessFile[filePaths.length];<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      String filePath = filePaths[i];<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      try {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>        rafs[i] = new RandomAccessFile(filePath, "rw");<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        long totalSpace = new File(filePath).getTotalSpace();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>        if (totalSpace &lt; sizePerFile) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>          // The next setting length will throw exception,logging this message<a name="line.84"></a>
+<span class="sourceLineNo">085</span>          // is just used for the detail reason of exception,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          String msg = "Only " + StringUtils.byteDesc(totalSpace)<a name="line.86"></a>
+<span class="sourceLineNo">087</span>              + " total space under " + filePath + ", not enough for requested "<a name="line.87"></a>
+<span class="sourceLineNo">088</span>              + StringUtils.byteDesc(sizePerFile);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>          LOG.warn(msg);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        rafs[i].setLength(sizePerFile);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        fileChannels[i] = rafs[i].getChannel();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>        LOG.info("Allocating cache " + StringUtils.byteDesc(sizePerFile)<a name="line.93"></a>
+<span class="sourceLineNo">094</span>            + ", on the path:" + filePath);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      } catch (IOException fex) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        LOG.error("Failed allocating cache on " + filePath, fex);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        shutdown();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        throw fex;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      }<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  @Override<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public String toString() {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    return "ioengine=" + this.getClass().getSimpleName() + ", paths="<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        + Arrays.asList(filePaths) + ", capacity=" + String.format("%,d", this.capacity);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * File IO engine is always able to support persistent storage for the cache<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @return true<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public boolean isPersistent() {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    return true;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  /**<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * Transfers data from file to the given byte buffer<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @param offset The offset in the file where the first byte to be read<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param length The length of buffer that should be allocated for reading<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   *               from the file channel<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * @return number of bytes read<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * @throws IOException<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  @Override<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  public Cacheable read(long offset, int length, CacheableDeserializer&lt;Cacheable&gt; deserializer)<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      throws IOException {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    Preconditions.checkArgument(length &gt;= 0, "Length of read can not be less than 0.");<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    ByteBuffer dstBuffer = ByteBuffer.allocate(length);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    if (length != 0) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      accessFile(readAccessor, dstBuffer, offset);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      // The buffer created out of the fileChannel is formed by copying the data from the file<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      // Hence in this case there is no shared memory that we point to. Even if the BucketCache evicts<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      // this buffer from the file the data is already copied and there is no need to ensure that<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      // the results are not corrupted before consuming them.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      if (dstBuffer.limit() != length) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        throw new RuntimeException("Only " + dstBuffer.limit() + " bytes read, " + length<a name="line.138"></a>
+<span class="sourceLineNo">139</span>            + " expected");<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      }<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    return deserializer.deserialize(new SingleByteBuff(dstBuffer), true, MemoryType.EXCLUSIVE);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @VisibleForTesting<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  void closeFileChannels() {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    for (FileChannel fileChannel: fileChannels) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      try {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        fileChannel.close();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      } catch (IOException e) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        LOG.warn("Failed to close FileChannel", e);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * Transfers data from the given byte buffer to file<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * @param srcBuffer the given byte buffer from which bytes are to be read<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * @param offset The offset in the file where the first byte to be written<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * @throws IOException<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void write(ByteBuffer srcBuffer, long offset) throws IOException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    if (!srcBuffer.hasRemaining()) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      return;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    accessFile(writeAccessor, srcBuffer, offset);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  /**<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * Sync the data to file after writing<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * @throws IOException<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  @Override<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  public void sync() throws IOException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    for (int i = 0; i &lt; fileChannels.length; i++) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      try {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        if (fileChannels[i] != null) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          fileChannels[i].force(true);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      } catch (IOException ie) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        LOG.warn("Failed syncing data to " + this.filePaths[i]);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        throw ie;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span>  /**<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * Close the file<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   */<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  @Override<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public void shutdown() {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      try {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        if (fileChannels[i] != null) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          fileChannels[i].close();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        }<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        if (rafs[i] != null) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          rafs[i].close();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      } catch (IOException ex) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        LOG.error("Failed closing " + filePaths[i] + " when shudown the IOEngine", ex);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>  @Override<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  public void write(ByteBuff srcBuffer, long offset) throws IOException {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    // When caching block into BucketCache there will be single buffer backing for this HFileBlock.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    assert srcBuffer.hasArray();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    write(ByteBuffer.wrap(srcBuffer.array(), srcBuffer.arrayOffset(),<a name="line.211"></a>
+<span class="sourceLineNo">212</span>            srcBuffer.remaining()), offset);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>  private void accessFile(FileAccessor accessor, ByteBuffer buffer,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      long globalOffset) throws IOException {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    int startFileNum = getFileNum(globalOffset);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    int remainingAccessDataLen = buffer.remaining();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    int endFileNum = getFileNum(globalOffset + remainingAccessDataLen - 1);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    int accessFileNum = startFileNum;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    long accessOffset = getAbsoluteOffsetInFile(accessFileNum, globalOffset);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    int bufLimit = buffer.limit();<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    while (true) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      int accessLen = 0;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      if (endFileNum &gt; accessFileNum) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        // short the limit;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        buffer.limit((int) (buffer.limit() - remainingAccessDataLen<a name="line.228"></a>
+<span class="sourceLineNo">229</span>            + sizePerFile - accessOffset));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      try {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        accessLen = accessor.access(fileChannel, buffer, accessOffset);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      } catch (ClosedByInterruptException e) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        throw e;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      } catch (ClosedChannelException e) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        LOG.warn("Caught ClosedChannelException accessing BucketCache, reopening file. ", e);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        refreshFileConnection(accessFileNum);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        continue;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // recover the limit<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      buffer.limit(bufLimit);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      if (accessLen &lt; remainingAccessDataLen) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        remainingAccessDataLen -= accessLen;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        accessFileNum++;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        accessOffset = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      } else {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        break;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      if (accessFileNum &gt;= fileChannels.length) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        throw new IOException("Required data len " + StringUtils.byteDesc(buffer.remaining())<a name="line.250"></a>
+<span class="sourceLineNo">251</span>            + " exceed the engine's capacity " + StringUtils.byteDesc(capacity) + " where offset="<a name="line.251"></a>
+<span class="sourceLineNo">252</span>            + globalOffset);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * Get the absolute offset in given file with the relative global offset.<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * @param fileNum<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * @param globalOffset<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * @return the absolute offset<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  private long getAbsoluteOffsetInFile(int fileNum, long globalOffset) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    return globalOffset - fileNum * sizePerFile;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  private int getFileNum(long offset) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    if (offset &lt; 0) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      throw new IllegalArgumentException("Unexpected offset " + offset);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    int fileNum = (int) (offset / sizePerFile);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    if (fileNum &gt;= fileChannels.length) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      throw new RuntimeException("Not expected offset " + offset<a name="line.273"></a>
+<span class="sourceLineNo">274</span>          + " where capacity=" + capacity);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    return fileNum;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>  @VisibleForTesting<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  FileChannel[] getFileChannels() {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    return fileChannels;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>  @VisibleForTesting<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  void refreshFileConnection(int accessFileNum) throws IOException {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    if (fileChannel != null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      fileChannel.close();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    rafs[accessFileNum] = new RandomAccessFile(filePaths[accessFileNum], "rw");<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    fileChannels[accessFileNum] = rafs[accessFileNum].getChannel();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  private static interface FileAccessor {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    int access(FileChannel fileChannel, ByteBuffer byteBuffer, long accessOffset)<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        throws IOException;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  private static class FileReadAccessor implements FileAccessor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        long accessOffset) throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      return fileChannel.read(byteBuffer, accessOffset);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>  private static class FileWriteAccessor implements FileAccessor {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        long accessOffset) throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      return fileChannel.write(byteBuffer, accessOffset);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>}<a name="line.314"></a>
 
 
 


[20/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html
index 33418d0..3647d12 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileReadAccessor.html
@@ -30,293 +30,296 @@
 <span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.RandomAccessFile;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.nio.ByteBuffer;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.nio.channels.ClosedChannelException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.nio.channels.FileChannel;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.io.hfile.Cacheable;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.io.hfile.CacheableDeserializer;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.util.StringUtils;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.slf4j.Logger;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.slf4j.LoggerFactory;<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * IO engine that stores data to a file on the local file system.<a name="line.42"></a>
-<span class="sourceLineNo">043</span> */<a name="line.43"></a>
-<span class="sourceLineNo">044</span>@InterfaceAudience.Private<a name="line.44"></a>
-<span class="sourceLineNo">045</span>public class FileIOEngine implements IOEngine {<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  private static final Logger LOG = LoggerFactory.getLogger(FileIOEngine.class);<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  public static final String FILE_DELIMITER = ",";<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private final String[] filePaths;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  private final FileChannel[] fileChannels;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private final RandomAccessFile[] rafs;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  private final long sizePerFile;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private final long capacity;<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private FileReadAccessor readAccessor = new FileReadAccessor();<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private FileWriteAccessor writeAccessor = new FileWriteAccessor();<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public FileIOEngine(long capacity, boolean maintainPersistence, String... filePaths)<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      throws IOException {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    this.sizePerFile = capacity / filePaths.length;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    this.capacity = this.sizePerFile * filePaths.length;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    this.filePaths = filePaths;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    this.fileChannels = new FileChannel[filePaths.length];<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    if (!maintainPersistence) {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      for (String filePath : filePaths) {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>        File file = new File(filePath);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>        if (file.exists()) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>          if (LOG.isDebugEnabled()) {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>            LOG.debug("File " + filePath + " already exists. Deleting!!");<a name="line.69"></a>
-<span class="sourceLineNo">070</span>          }<a name="line.70"></a>
-<span class="sourceLineNo">071</span>          file.delete();<a name="line.71"></a>
-<span class="sourceLineNo">072</span>          // If deletion fails still we can manage with the writes<a name="line.72"></a>
-<span class="sourceLineNo">073</span>        }<a name="line.73"></a>
-<span class="sourceLineNo">074</span>      }<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    }<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    this.rafs = new RandomAccessFile[filePaths.length];<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      String filePath = filePaths[i];<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      try {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>        rafs[i] = new RandomAccessFile(filePath, "rw");<a name="line.80"></a>
-<span class="sourceLineNo">081</span>        long totalSpace = new File(filePath).getTotalSpace();<a name="line.81"></a>
-<span class="sourceLineNo">082</span>        if (totalSpace &lt; sizePerFile) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>          // The next setting length will throw exception,logging this message<a name="line.83"></a>
-<span class="sourceLineNo">084</span>          // is just used for the detail reason of exception,<a name="line.84"></a>
-<span class="sourceLineNo">085</span>          String msg = "Only " + StringUtils.byteDesc(totalSpace)<a name="line.85"></a>
-<span class="sourceLineNo">086</span>              + " total space under " + filePath + ", not enough for requested "<a name="line.86"></a>
-<span class="sourceLineNo">087</span>              + StringUtils.byteDesc(sizePerFile);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>          LOG.warn(msg);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        rafs[i].setLength(sizePerFile);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>        fileChannels[i] = rafs[i].getChannel();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>        LOG.info("Allocating cache " + StringUtils.byteDesc(sizePerFile)<a name="line.92"></a>
-<span class="sourceLineNo">093</span>            + ", on the path:" + filePath);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      } catch (IOException fex) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        LOG.error("Failed allocating cache on " + filePath, fex);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        shutdown();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>        throw fex;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  @Override<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  public String toString() {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    return "ioengine=" + this.getClass().getSimpleName() + ", paths="<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        + Arrays.asList(filePaths) + ", capacity=" + String.format("%,d", this.capacity);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * File IO engine is always able to support persistent storage for the cache<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @return true<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   */<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  @Override<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public boolean isPersistent() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    return true;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * Transfers data from file to the given byte buffer<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @param offset The offset in the file where the first byte to be read<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param length The length of buffer that should be allocated for reading<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   *               from the file channel<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * @return number of bytes read<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * @throws IOException<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   */<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public Cacheable read(long offset, int length, CacheableDeserializer&lt;Cacheable&gt; deserializer)<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      throws IOException {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    Preconditions.checkArgument(length &gt;= 0, "Length of read can not be less than 0.");<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    ByteBuffer dstBuffer = ByteBuffer.allocate(length);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    if (length != 0) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      accessFile(readAccessor, dstBuffer, offset);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      // The buffer created out of the fileChannel is formed by copying the data from the file<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      // Hence in this case there is no shared memory that we point to. Even if the BucketCache evicts<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      // this buffer from the file the data is already copied and there is no need to ensure that<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      // the results are not corrupted before consuming them.<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      if (dstBuffer.limit() != length) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        throw new RuntimeException("Only " + dstBuffer.limit() + " bytes read, " + length<a name="line.137"></a>
-<span class="sourceLineNo">138</span>            + " expected");<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      }<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return deserializer.deserialize(new SingleByteBuff(dstBuffer), true, MemoryType.EXCLUSIVE);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  @VisibleForTesting<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  void closeFileChannels() {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    for (FileChannel fileChannel: fileChannels) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      try {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        fileChannel.close();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      } catch (IOException e) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        LOG.warn("Failed to close FileChannel", e);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Transfers data from the given byte buffer to file<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * @param srcBuffer the given byte buffer from which bytes are to be read<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * @param offset The offset in the file where the first byte to be written<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @throws IOException<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void write(ByteBuffer srcBuffer, long offset) throws IOException {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    if (!srcBuffer.hasRemaining()) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      return;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    accessFile(writeAccessor, srcBuffer, offset);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Sync the data to file after writing<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * @throws IOException<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  @Override<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  public void sync() throws IOException {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    for (int i = 0; i &lt; fileChannels.length; i++) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      try {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        if (fileChannels[i] != null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          fileChannels[i].force(true);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      } catch (IOException ie) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        LOG.warn("Failed syncing data to " + this.filePaths[i]);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        throw ie;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>  /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * Close the file<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   */<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  @Override<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  public void shutdown() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      try {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        if (fileChannels[i] != null) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          fileChannels[i].close();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        if (rafs[i] != null) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          rafs[i].close();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      } catch (IOException ex) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        LOG.error("Failed closing " + filePaths[i] + " when shudown the IOEngine", ex);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>  @Override<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public void write(ByteBuff srcBuffer, long offset) throws IOException {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // When caching block into BucketCache there will be single buffer backing for this HFileBlock.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    assert srcBuffer.hasArray();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    write(ByteBuffer.wrap(srcBuffer.array(), srcBuffer.arrayOffset(),<a name="line.210"></a>
-<span class="sourceLineNo">211</span>            srcBuffer.remaining()), offset);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>  private void accessFile(FileAccessor accessor, ByteBuffer buffer,<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      long globalOffset) throws IOException {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    int startFileNum = getFileNum(globalOffset);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    int remainingAccessDataLen = buffer.remaining();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    int endFileNum = getFileNum(globalOffset + remainingAccessDataLen - 1);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    int accessFileNum = startFileNum;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    long accessOffset = getAbsoluteOffsetInFile(accessFileNum, globalOffset);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    int bufLimit = buffer.limit();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    while (true) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      int accessLen = 0;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      if (endFileNum &gt; accessFileNum) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // short the limit;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        buffer.limit((int) (buffer.limit() - remainingAccessDataLen<a name="line.227"></a>
-<span class="sourceLineNo">228</span>            + sizePerFile - accessOffset));<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      try {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        accessLen = accessor.access(fileChannel, buffer, accessOffset);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      } catch (ClosedChannelException e) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        LOG.warn("Caught ClosedChannelException accessing BucketCache, reopening file. ", e);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        refreshFileConnection(accessFileNum);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        continue;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      // recover the limit<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      buffer.limit(bufLimit);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      if (accessLen &lt; remainingAccessDataLen) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        remainingAccessDataLen -= accessLen;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        accessFileNum++;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        accessOffset = 0;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      } else {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        break;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      if (accessFileNum &gt;= fileChannels.length) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        throw new IOException("Required data len " + StringUtils.byteDesc(buffer.remaining())<a name="line.247"></a>
-<span class="sourceLineNo">248</span>            + " exceed the engine's capacity " + StringUtils.byteDesc(capacity) + " where offset="<a name="line.248"></a>
-<span class="sourceLineNo">249</span>            + globalOffset);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * Get the absolute offset in given file with the relative global offset.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * @param fileNum<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * @param globalOffset<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * @return the absolute offset<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  private long getAbsoluteOffsetInFile(int fileNum, long globalOffset) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    return globalOffset - fileNum * sizePerFile;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  private int getFileNum(long offset) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    if (offset &lt; 0) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      throw new IllegalArgumentException("Unexpected offset " + offset);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    int fileNum = (int) (offset / sizePerFile);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    if (fileNum &gt;= fileChannels.length) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      throw new RuntimeException("Not expected offset " + offset<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          + " where capacity=" + capacity);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    return fileNum;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  @VisibleForTesting<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  FileChannel[] getFileChannels() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    return fileChannels;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  @VisibleForTesting<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  void refreshFileConnection(int accessFileNum) throws IOException {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    if (fileChannel != null) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      fileChannel.close();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    rafs[accessFileNum] = new RandomAccessFile(filePaths[accessFileNum], "rw");<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    fileChannels[accessFileNum] = rafs[accessFileNum].getChannel();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  private static interface FileAccessor {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    int access(FileChannel fileChannel, ByteBuffer byteBuffer, long accessOffset)<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        throws IOException;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>  private static class FileReadAccessor implements FileAccessor {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    @Override<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        long accessOffset) throws IOException {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      return fileChannel.read(byteBuffer, accessOffset);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>  private static class FileWriteAccessor implements FileAccessor {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        long accessOffset) throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      return fileChannel.write(byteBuffer, accessOffset);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>}<a name="line.311"></a>
+<span class="sourceLineNo">025</span>import java.nio.channels.ClosedByInterruptException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.nio.channels.ClosedChannelException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.nio.channels.FileChannel;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Arrays;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.io.hfile.Cacheable;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.io.hfile.CacheableDeserializer;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.util.StringUtils;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.slf4j.Logger;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.slf4j.LoggerFactory;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>/**<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * IO engine that stores data to a file on the local file system.<a name="line.43"></a>
+<span class="sourceLineNo">044</span> */<a name="line.44"></a>
+<span class="sourceLineNo">045</span>@InterfaceAudience.Private<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class FileIOEngine implements IOEngine {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final Logger LOG = LoggerFactory.getLogger(FileIOEngine.class);<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  public static final String FILE_DELIMITER = ",";<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private final String[] filePaths;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private final FileChannel[] fileChannels;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private final RandomAccessFile[] rafs;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private final long sizePerFile;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private final long capacity;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private FileReadAccessor readAccessor = new FileReadAccessor();<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private FileWriteAccessor writeAccessor = new FileWriteAccessor();<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  public FileIOEngine(long capacity, boolean maintainPersistence, String... filePaths)<a name="line.59"></a>
+<span class="sourceLineNo">060</span>      throws IOException {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    this.sizePerFile = capacity / filePaths.length;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    this.capacity = this.sizePerFile * filePaths.length;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    this.filePaths = filePaths;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    this.fileChannels = new FileChannel[filePaths.length];<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    if (!maintainPersistence) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      for (String filePath : filePaths) {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>        File file = new File(filePath);<a name="line.67"></a>
+<span class="sourceLineNo">068</span>        if (file.exists()) {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>          if (LOG.isDebugEnabled()) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>            LOG.debug("File " + filePath + " already exists. Deleting!!");<a name="line.70"></a>
+<span class="sourceLineNo">071</span>          }<a name="line.71"></a>
+<span class="sourceLineNo">072</span>          file.delete();<a name="line.72"></a>
+<span class="sourceLineNo">073</span>          // If deletion fails still we can manage with the writes<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        }<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      }<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    }<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    this.rafs = new RandomAccessFile[filePaths.length];<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      String filePath = filePaths[i];<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      try {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>        rafs[i] = new RandomAccessFile(filePath, "rw");<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        long totalSpace = new File(filePath).getTotalSpace();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>        if (totalSpace &lt; sizePerFile) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>          // The next setting length will throw exception,logging this message<a name="line.84"></a>
+<span class="sourceLineNo">085</span>          // is just used for the detail reason of exception,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          String msg = "Only " + StringUtils.byteDesc(totalSpace)<a name="line.86"></a>
+<span class="sourceLineNo">087</span>              + " total space under " + filePath + ", not enough for requested "<a name="line.87"></a>
+<span class="sourceLineNo">088</span>              + StringUtils.byteDesc(sizePerFile);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>          LOG.warn(msg);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        rafs[i].setLength(sizePerFile);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        fileChannels[i] = rafs[i].getChannel();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>        LOG.info("Allocating cache " + StringUtils.byteDesc(sizePerFile)<a name="line.93"></a>
+<span class="sourceLineNo">094</span>            + ", on the path:" + filePath);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      } catch (IOException fex) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        LOG.error("Failed allocating cache on " + filePath, fex);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        shutdown();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        throw fex;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      }<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  @Override<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public String toString() {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    return "ioengine=" + this.getClass().getSimpleName() + ", paths="<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        + Arrays.asList(filePaths) + ", capacity=" + String.format("%,d", this.capacity);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * File IO engine is always able to support persistent storage for the cache<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @return true<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public boolean isPersistent() {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    return true;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  /**<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * Transfers data from file to the given byte buffer<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @param offset The offset in the file where the first byte to be read<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param length The length of buffer that should be allocated for reading<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   *               from the file channel<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * @return number of bytes read<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * @throws IOException<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  @Override<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  public Cacheable read(long offset, int length, CacheableDeserializer&lt;Cacheable&gt; deserializer)<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      throws IOException {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    Preconditions.checkArgument(length &gt;= 0, "Length of read can not be less than 0.");<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    ByteBuffer dstBuffer = ByteBuffer.allocate(length);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    if (length != 0) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      accessFile(readAccessor, dstBuffer, offset);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      // The buffer created out of the fileChannel is formed by copying the data from the file<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      // Hence in this case there is no shared memory that we point to. Even if the BucketCache evicts<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      // this buffer from the file the data is already copied and there is no need to ensure that<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      // the results are not corrupted before consuming them.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      if (dstBuffer.limit() != length) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        throw new RuntimeException("Only " + dstBuffer.limit() + " bytes read, " + length<a name="line.138"></a>
+<span class="sourceLineNo">139</span>            + " expected");<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      }<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    return deserializer.deserialize(new SingleByteBuff(dstBuffer), true, MemoryType.EXCLUSIVE);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @VisibleForTesting<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  void closeFileChannels() {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    for (FileChannel fileChannel: fileChannels) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      try {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        fileChannel.close();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      } catch (IOException e) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        LOG.warn("Failed to close FileChannel", e);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * Transfers data from the given byte buffer to file<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * @param srcBuffer the given byte buffer from which bytes are to be read<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * @param offset The offset in the file where the first byte to be written<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * @throws IOException<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void write(ByteBuffer srcBuffer, long offset) throws IOException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    if (!srcBuffer.hasRemaining()) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      return;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    accessFile(writeAccessor, srcBuffer, offset);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  /**<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * Sync the data to file after writing<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * @throws IOException<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  @Override<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  public void sync() throws IOException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    for (int i = 0; i &lt; fileChannels.length; i++) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      try {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        if (fileChannels[i] != null) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          fileChannels[i].force(true);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      } catch (IOException ie) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        LOG.warn("Failed syncing data to " + this.filePaths[i]);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        throw ie;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span>  /**<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * Close the file<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   */<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  @Override<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public void shutdown() {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      try {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        if (fileChannels[i] != null) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          fileChannels[i].close();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        }<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        if (rafs[i] != null) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          rafs[i].close();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      } catch (IOException ex) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        LOG.error("Failed closing " + filePaths[i] + " when shudown the IOEngine", ex);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>  @Override<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  public void write(ByteBuff srcBuffer, long offset) throws IOException {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    // When caching block into BucketCache there will be single buffer backing for this HFileBlock.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    assert srcBuffer.hasArray();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    write(ByteBuffer.wrap(srcBuffer.array(), srcBuffer.arrayOffset(),<a name="line.211"></a>
+<span class="sourceLineNo">212</span>            srcBuffer.remaining()), offset);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>  private void accessFile(FileAccessor accessor, ByteBuffer buffer,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      long globalOffset) throws IOException {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    int startFileNum = getFileNum(globalOffset);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    int remainingAccessDataLen = buffer.remaining();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    int endFileNum = getFileNum(globalOffset + remainingAccessDataLen - 1);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    int accessFileNum = startFileNum;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    long accessOffset = getAbsoluteOffsetInFile(accessFileNum, globalOffset);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    int bufLimit = buffer.limit();<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    while (true) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      int accessLen = 0;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      if (endFileNum &gt; accessFileNum) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        // short the limit;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        buffer.limit((int) (buffer.limit() - remainingAccessDataLen<a name="line.228"></a>
+<span class="sourceLineNo">229</span>            + sizePerFile - accessOffset));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      try {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        accessLen = accessor.access(fileChannel, buffer, accessOffset);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      } catch (ClosedByInterruptException e) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        throw e;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      } catch (ClosedChannelException e) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        LOG.warn("Caught ClosedChannelException accessing BucketCache, reopening file. ", e);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        refreshFileConnection(accessFileNum);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        continue;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // recover the limit<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      buffer.limit(bufLimit);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      if (accessLen &lt; remainingAccessDataLen) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        remainingAccessDataLen -= accessLen;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        accessFileNum++;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        accessOffset = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      } else {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        break;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      if (accessFileNum &gt;= fileChannels.length) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        throw new IOException("Required data len " + StringUtils.byteDesc(buffer.remaining())<a name="line.250"></a>
+<span class="sourceLineNo">251</span>            + " exceed the engine's capacity " + StringUtils.byteDesc(capacity) + " where offset="<a name="line.251"></a>
+<span class="sourceLineNo">252</span>            + globalOffset);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * Get the absolute offset in given file with the relative global offset.<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * @param fileNum<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * @param globalOffset<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * @return the absolute offset<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  private long getAbsoluteOffsetInFile(int fileNum, long globalOffset) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    return globalOffset - fileNum * sizePerFile;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  private int getFileNum(long offset) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    if (offset &lt; 0) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      throw new IllegalArgumentException("Unexpected offset " + offset);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    int fileNum = (int) (offset / sizePerFile);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    if (fileNum &gt;= fileChannels.length) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      throw new RuntimeException("Not expected offset " + offset<a name="line.273"></a>
+<span class="sourceLineNo">274</span>          + " where capacity=" + capacity);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    return fileNum;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>  @VisibleForTesting<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  FileChannel[] getFileChannels() {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    return fileChannels;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>  @VisibleForTesting<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  void refreshFileConnection(int accessFileNum) throws IOException {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    if (fileChannel != null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      fileChannel.close();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    rafs[accessFileNum] = new RandomAccessFile(filePaths[accessFileNum], "rw");<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    fileChannels[accessFileNum] = rafs[accessFileNum].getChannel();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  private static interface FileAccessor {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    int access(FileChannel fileChannel, ByteBuffer byteBuffer, long accessOffset)<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        throws IOException;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  private static class FileReadAccessor implements FileAccessor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        long accessOffset) throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      return fileChannel.read(byteBuffer, accessOffset);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>  private static class FileWriteAccessor implements FileAccessor {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        long accessOffset) throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      return fileChannel.write(byteBuffer, accessOffset);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>}<a name="line.314"></a>
 
 
 


[14/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
index eccc4a3..ebbde54 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
@@ -1744,1869 +1744,1872 @@
 <span class="sourceLineNo">1736</span>      HRegion region = getRegion(request.getRegion());<a name="line.1736"></a>
 <span class="sourceLineNo">1737</span>      RegionInfo info = region.getRegionInfo();<a name="line.1737"></a>
 <span class="sourceLineNo">1738</span>      byte[] bestSplitRow = null;<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>        HRegion r = region;<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        r.forceSplit(null);<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>        bestSplitRow = r.checkSplit();<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        // try to flush region first<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        if(bestSplitRow == null) {<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>          r.flush(true);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>          bestSplitRow = r.checkSplit();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        r.clearSplit();<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      }<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      }<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      builder.setSplittable(region.isSplittable());<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      builder.setMergeable(region.isMergeable());<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      return builder.build();<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>    } catch (IOException ie) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      throw new ServiceException(ie);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span><a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  @Override<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span><a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    List&lt;HRegion&gt; regions;<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    if (request.hasTableName()) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      regions = regionServer.getRegions(tableName);<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>    } else {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>      regions = regionServer.getRegions();<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    }<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span><a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    try {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      for (HRegion region : regions) {<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      }<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    } catch (IOException e) {<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      throw new ServiceException(e);<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    }<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>    builder.addAllRegionLoads(rLoads);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    return builder.build();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>  }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>  @Override<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>    requestCount.increment();<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      try {<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>        checkOpen();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>          switch (queueName) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            case "long":<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>              break;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            case "short":<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1815"></a>
+<span class="sourceLineNo">1739</span>      boolean shouldSplit = true;<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        HRegion r = region;<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        r.forceSplit(null);<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // Even after setting force split if split policy says no to split then we should not split.<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        shouldSplit = region.getSplitPolicy().shouldSplit() &amp;&amp; !info.isMetaRegion();<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>        bestSplitRow = r.checkSplit();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        // try to flush region first<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>        if(bestSplitRow == null) {<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>          r.flush(true);<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>          bestSplitRow = r.checkSplit();<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        }<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        r.clearSplit();<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      }<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      builder.setSplittable(region.isSplittable() &amp;&amp; shouldSplit);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      builder.setMergeable(region.isMergeable());<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>      }<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      return builder.build();<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>    } catch (IOException ie) {<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      throw new ServiceException(ie);<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    }<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>  }<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span><a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>  @Override<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span><a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>    List&lt;HRegion&gt; regions;<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    if (request.hasTableName()) {<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>      regions = regionServer.getRegions(tableName);<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>    } else {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>      regions = regionServer.getRegions();<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>    }<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    try {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      for (HRegion region : regions) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    } catch (IOException e) {<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>      throw new ServiceException(e);<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>    builder.addAllRegionLoads(rLoads);<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    return builder.build();<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  }<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span><a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>  @Override<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>    requestCount.increment();<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>      try {<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        checkOpen();<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>          switch (queueName) {<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            case "long":<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1815"></a>
 <span class="sourceLineNo">1816</span>              break;<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            default:<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>              throw new IOException("Unknown queue name " + queueName);<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>          }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>      } catch (IOException ie) {<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>        throw new ServiceException(ie);<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      } finally {<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        clearCompactionQueues.set(false);<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      }<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    } else {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>    }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    return respBuilder.build();<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>  }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>  /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>   * Get some information of the region server.<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>   *<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>   * @param controller the RPC controller<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>   * @param request the request<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>   * @throws ServiceException<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>   */<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>  @Override<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    try {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>      checkOpen();<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    } catch (IOException ie) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>      throw new ServiceException(ie);<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>    }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>    requestCount.increment();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>  }<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span><a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>  @Override<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    try {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>      checkOpen();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      HRegion region = getRegion(request.getRegion());<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      requestCount.increment();<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (request.getFamilyCount() == 0) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>      } else {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>          columnFamilies.add(cf.toByteArray());<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        }<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      int nCF = columnFamilies.size();<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      builder.addAllStoreFile(fileList);<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>      return builder.build();<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>    } catch (IOException ie) {<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>      throw new ServiceException(ie);<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>  }<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span><a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>  /**<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>   *<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>   * &lt;p&gt;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>   * Different manages states for the region are:<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>   *  &lt;/ul&gt;<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>   * &lt;p&gt;<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>   * &lt;/p&gt;<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>   * @param controller the RPC controller<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>   * @param request the request<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>   * @throws ServiceException<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>   */<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>  @Override<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>    requestCount.increment();<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>    if (request.hasServerStartCode()) {<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      // check that we are the same server that this RPC is intended for.<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long serverStartCode = request.getServerStartCode();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      if (regionServer.serverName.getStartcode() !=  serverStartCode) {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        throw new ServiceException(new DoNotRetryIOException("This RPC was intended for a " +<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>            "different server with startCode: " + serverStartCode + ", this server is: "<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>            + regionServer.serverName));<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>    }<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span><a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    try {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      checkOpen();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    } catch (IOException ie) {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      TableName tableName = null;<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      if (regionCount == 1) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>        if (ri != null) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>        throw new ServiceException(ie);<a name="line.1936"></a>
+<span class="sourceLineNo">1817</span>            case "short":<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>              break;<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            default:<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              throw new IOException("Unknown queue name " + queueName);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>          }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>        }<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>      } catch (IOException ie) {<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>        throw new ServiceException(ie);<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      } finally {<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        clearCompactionQueues.set(false);<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>      }<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    } else {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>    }<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    return respBuilder.build();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>  }<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span><a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>  /**<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>   * Get some information of the region server.<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>   *<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>   * @param controller the RPC controller<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>   * @param request the request<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>   * @throws ServiceException<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>   */<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>  @Override<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    try {<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>      checkOpen();<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>    } catch (IOException ie) {<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>      throw new ServiceException(ie);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>    }<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    requestCount.increment();<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>  }<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span><a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>  @Override<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>    try {<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      checkOpen();<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      HRegion region = getRegion(request.getRegion());<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      requestCount.increment();<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>      if (request.getFamilyCount() == 0) {<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      } else {<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>          columnFamilies.add(cf.toByteArray());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        }<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      int nCF = columnFamilies.size();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      builder.addAllStoreFile(fileList);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      return builder.build();<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    } catch (IOException ie) {<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>      throw new ServiceException(ie);<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>    }<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  }<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span><a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>  /**<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>   *<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>   * &lt;p&gt;<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>   * Different manages states for the region are:<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>   *  &lt;/ul&gt;<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>   * &lt;p&gt;<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>   * &lt;/p&gt;<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>   * @param controller the RPC controller<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>   * @param request the request<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>   * @throws ServiceException<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>   */<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>  @Override<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    requestCount.increment();<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>    if (request.hasServerStartCode()) {<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      // check that we are the same server that this RPC is intended for.<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      long serverStartCode = request.getServerStartCode();<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (regionServer.serverName.getStartcode() !=  serverStartCode) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        throw new ServiceException(new DoNotRetryIOException("This RPC was intended for a " +<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>            "different server with startCode: " + serverStartCode + ", this server is: "<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>            + regionServer.serverName));<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>    }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>    try {<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>      checkOpen();<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    } catch (IOException ie) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>      TableName tableName = null;<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      if (regionCount == 1) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        if (ri != null) {<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>        }<a name="line.1936"></a>
 <span class="sourceLineNo">1937</span>      }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>      synchronized (regionServer.online) {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>        try {<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>          }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>          checkOpen();<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>        } catch (InterruptedException t) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          Thread.currentThread().interrupt();<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          throw new ServiceException(t);<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>        } catch (IOException e) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          throw new ServiceException(e);<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>        }<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>      }<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    }<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span><a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      TableDescriptor htd;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      try {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        String encodedName = region.getEncodedName();<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>        if (onlineRegion != null) {<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>          // The region is already online. This should not happen any more.<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>          String error = "Received OPEN for the region:"<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          LOG.warn(error);<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>          //regionServer.abort(error);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>          //throw new IOException(error);<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          continue;<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        }<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span><a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>          encodedNameBytes, Boolean.TRUE);<a name="line.1980"></a>
+<span class="sourceLineNo">1938</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>        throw new ServiceException(ie);<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      }<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      synchronized (regionServer.online) {<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>        try {<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          }<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>          checkOpen();<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>        } catch (InterruptedException t) {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>          Thread.currentThread().interrupt();<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>          throw new ServiceException(t);<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>        } catch (IOException e) {<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>          throw new ServiceException(e);<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>        }<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      }<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      TableDescriptor htd;<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        String encodedName = region.getEncodedName();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        if (onlineRegion != null) {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>          // The region is already online. This should not happen any more.<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>          String error = "Received OPEN for the region:"<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          LOG.warn(error);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>          //regionServer.abort(error);<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>          //throw new IOException(error);<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>          continue;<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>        }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.1980"></a>
 <span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>            // There is a close in progress. This should not happen any more.<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>            String error = "Received OPEN for the region:"<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>            regionServer.abort(error);<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>            throw new IOException(error);<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>          }<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>        }<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span><a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>          // An open is in progress. This is supported, but let's log this.<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>              + " - ignoring this new request for this region.");<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>        }<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span><a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span><a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>          htd = htds.get(region.getTable());<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>          if (htd == null) {<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>            htds.put(region.getTable(), htd);<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>          }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>          if (htd == null) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2011"></a>
+<span class="sourceLineNo">1982</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>          encodedNameBytes, Boolean.TRUE);<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span><a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>            // There is a close in progress. This should not happen any more.<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>            String error = "Received OPEN for the region:"<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>            regionServer.abort(error);<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>            throw new IOException(error);<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>          }<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>        }<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>          // An open is in progress. This is supported, but let's log this.<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>              + " - ignoring this new request for this region.");<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>        }<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span><a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span><a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>          htd = htds.get(region.getTable());<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>          if (htd == null) {<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>            htds.put(region.getTable(), htd);<a name="line.2011"></a>
 <span class="sourceLineNo">2012</span>          }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>          // Need to pass the expected version in the constructor.<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>          if (regionServer.executorService == null) {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>          } else {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>            if (region.isMetaRegion()) {<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>            } else {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>              }<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>              } else {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2030"></a>
+<span class="sourceLineNo">2013</span>          if (htd == null) {<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>          }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>          // Need to pass the expected version in the constructor.<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>          if (regionServer.executorService == null) {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>          } else {<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>            if (region.isMetaRegion()) {<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>            } else {<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>              }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2030"></a>
 <span class="sourceLineNo">2031</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>              }<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>            }<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          }<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        }<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span><a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      } catch (IOException ie) {<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>        if (isBulkAssign) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>          throw new ServiceException(ie);<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>    return builder.build();<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>  }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span><a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>  /**<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   *  Wamrmup a region on this server.<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   *<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>   * closes the region bringing the most important pages in cache.<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>   * &lt;p&gt;<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>   *<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>   * @param controller the RPC controller<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>   * @param request the request<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>   * @throws ServiceException<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>   */<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>  @Override<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span><a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    TableDescriptor htd;<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span><a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    try {<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      checkOpen();<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>      String encodedName = region.getEncodedName();<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span><a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      if (onlineRegion != null) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>        return response;<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>      if (LOG.isDebugEnabled()) {<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        LOG.debug("Warming up Region " + region.getRegionNameAsString());<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span><a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span><a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>        return response;<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      }<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span><a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2092"></a>
+<span class="sourceLineNo">2032</span>              } else {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>              }<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>            }<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          }<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        }<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span><a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>      } catch (IOException ie) {<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>        if (isBulkAssign) {<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>        } else {<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>          throw new ServiceException(ie);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>        }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      }<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>    }<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    return builder.build();<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>  }<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span><a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>  /**<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>   *  Wamrmup a region on this server.<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>   *<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>   * closes the region bringing the most important pages in cache.<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>   * &lt;p&gt;<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>   *<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>   * @param controller the RPC controller<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>   * @param request the request<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>   * @throws ServiceException<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>   */<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>  @Override<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span><a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    TableDescriptor htd;<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span><a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    try {<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      checkOpen();<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>      String encodedName = region.getEncodedName();<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span><a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      if (onlineRegion != null) {<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>        return response;<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>      }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span><a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>      if (LOG.isDebugEnabled()) {<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        LOG.debug("Warming up Region " + region.getRegionNameAsString());<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>      }<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span><a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span><a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>        return response;<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>      }<a name="line.2092"></a>
 <span class="sourceLineNo">2093</span><a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>    } catch (IOException ie) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      throw new ServiceException(ie);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span><a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>    return response;<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  }<a name="line.2100"></a>
+<span class="sourceLineNo">2094</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span><a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    } catch (IOException ie) {<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>      throw new ServiceException(ie);<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    }<a name="line.2100"></a>
 <span class="sourceLineNo">2101</span><a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>  /**<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>   * Replay the given changes when distributedLogReplay WAL edits from a failed RS. The guarantee is<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>   * that the given mutations will be durable on the receiving RS if this method returns without any<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>   * exception.<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>   * @param controller the RPC controller<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>   * @param request the request<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>   * @throws ServiceException<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>   */<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>  @Override<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  @QosPriority(priority = HConstants.REPLAY_QOS)<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>  public ReplicateWALEntryResponse replay(final RpcController controller,<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    CellScanner cells = ((HBaseRpcController) controller).cellScanner();<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    try {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>      checkOpen();<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>      if (entries == null || entries.isEmpty()) {<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>        // empty input<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>      ByteString regionName = entries.get(0).getKey().getEncodedRegionName();<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      HRegion region = regionServer.getRegionByEncodedName(regionName.toStringUtf8());<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>      RegionCoprocessorHost coprocessorHost =<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>          ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>            ? region.getCoprocessorHost()<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>            : null; // do not invoke coprocessors if this is a secondary region replica<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>      List&lt;Pair&lt;WALKey, WALEdit&gt;&gt; walEntries = new ArrayList&lt;&gt;();<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      // Skip adding the edits to WAL if this is a secondary region replica<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>      boolean isPrimary = RegionReplicaUtil.isDefaultReplica(region.getRegionInfo());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>      Durability durability = isPrimary ? Durability.USE_DEFAULT : Durability.SKIP_WAL;<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span><a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      for (WALEntry entry : entries) {<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>        if (!regionName.equals(entry.getKey().getEncodedRegionName())) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>          throw new NotServingRegionException("Replay request contains entries from multiple " +<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>              "regions. First region:" + regionName.toStringUtf8() + " , other region:"<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>              + entry.getKey().getEncodedRegionName());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        }<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        if (regionServer.nonceManager != null &amp;&amp; isPrimary) {<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          long nonceGroup = entry.getKey().hasNonceGroup()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>            ? entry.getKey().getNonceGroup() : HConstants.NO_NONCE;<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>          long nonce = entry.getKey().hasNonce() ? entry.getKey().getNonce() : HConstants.NO_NONCE;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>          regionServer.nonceManager.reportOperationFromWal(<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>              nonceGroup,<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>              nonce,<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>              entry.getKey().getWriteTime());<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>        }<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        Pair&lt;WALKey, WALEdit&gt; walEntry = (coprocessorHost == null) ? null : new Pair&lt;&gt;();<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>        List&lt;WALSplitter.MutationReplay&gt; edits = WALSplitter.getMutationsFromWALEntry(entry,<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>          cells, walEntry, durability);<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>        if (coprocessorHost != null) {<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>          // Start coprocessor replay here. The coprocessor is for each WALEdit instead of a<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>          // KeyValue.<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>          if (coprocessorHost.preWALRestore(region.getRegionInfo(), walEntry.getFirst(),<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>            walEntry.getSecond())) {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>            // if bypass this log entry, ignore it ...<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>            continue;<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>          }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>          walEntries.add(walEntry);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>        }<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>        if(edits!=null &amp;&amp; !edits.isEmpty()) {<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>          // HBASE-17924<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>          // sort to improve lock efficiency<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>          Collections.sort(edits, (v1, v2) -&gt; Row.COMPARATOR.compare(v1.mutation, v2.mutation));<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          long replaySeqId = (entry.getKey().hasOrigSequenceNumber()) ?<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>            entry.getKey().getOrigSequenceNumber() : entry.getKey().getLogSequenceNumber();<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>          OperationStatus[] result = doReplayBatchOp(region, edits, replaySeqId);<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>          // check if it's a partial success<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>          for (int i = 0; result != null &amp;&amp; i &lt; result.length; i++) {<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>            if (result[i] != OperationStatus.SUCCESS) {<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>              throw new IOException(result[i].getExceptionMsg());<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>            }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>          }<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        }<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>      }<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span><a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      //sync wal at the end because ASYNC_WAL is used above<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>      WAL wal = region.getWAL();<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>      if (wal != null) {<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        wal.sync();<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>      }<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span><a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>      if (coprocessorHost != null) {<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>        for (Pair&lt;WALKey, WALEdit&gt; entry : walEntries) {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>          coprocessorHost.postWALRestore(region.getRegionInfo(), entry.getFirst(),<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>            entry.getSecond());<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        }<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>      }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>    } catch (IOException ie) {<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>      throw new ServiceException(ie);<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    } finally {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>      if (regionServer.metricsRegionServer != null) {<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>        regionServer.metricsRegionServer.updateReplay(<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>          EnvironmentEdgeManager.currentTime() - before);<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      }<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>    }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span><a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>  /**<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>   * Replicate WAL entries on the region server.<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>   *<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>   * @param controller the RPC controller<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>   * @param request the request<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>   * @throws ServiceException<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>   */<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>  @Override<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>  @QosPriority(priority=HConstants.REPLICATION_QOS)<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>  public ReplicateWALEntryResponse replicateWALEntry(final RpcController controller,<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>      checkOpen();<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      if (regionServer.replicationSinkHandler != null) {<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        requestCount.increment();<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        CellScanner cellScanner = ((HBaseRpcController)controller).cellScanner();<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>       

<TRUNCATED>

[19/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html
index 33418d0..3647d12 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.FileWriteAccessor.html
@@ -30,293 +30,296 @@
 <span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.io.RandomAccessFile;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.nio.ByteBuffer;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.nio.channels.ClosedChannelException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.nio.channels.FileChannel;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.Arrays;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.io.hfile.Cacheable;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.io.hfile.CacheableDeserializer;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.util.StringUtils;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.slf4j.Logger;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.slf4j.LoggerFactory;<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * IO engine that stores data to a file on the local file system.<a name="line.42"></a>
-<span class="sourceLineNo">043</span> */<a name="line.43"></a>
-<span class="sourceLineNo">044</span>@InterfaceAudience.Private<a name="line.44"></a>
-<span class="sourceLineNo">045</span>public class FileIOEngine implements IOEngine {<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  private static final Logger LOG = LoggerFactory.getLogger(FileIOEngine.class);<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  public static final String FILE_DELIMITER = ",";<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private final String[] filePaths;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  private final FileChannel[] fileChannels;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private final RandomAccessFile[] rafs;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  private final long sizePerFile;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private final long capacity;<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private FileReadAccessor readAccessor = new FileReadAccessor();<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private FileWriteAccessor writeAccessor = new FileWriteAccessor();<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public FileIOEngine(long capacity, boolean maintainPersistence, String... filePaths)<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      throws IOException {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    this.sizePerFile = capacity / filePaths.length;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    this.capacity = this.sizePerFile * filePaths.length;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    this.filePaths = filePaths;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    this.fileChannels = new FileChannel[filePaths.length];<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    if (!maintainPersistence) {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      for (String filePath : filePaths) {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>        File file = new File(filePath);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>        if (file.exists()) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>          if (LOG.isDebugEnabled()) {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>            LOG.debug("File " + filePath + " already exists. Deleting!!");<a name="line.69"></a>
-<span class="sourceLineNo">070</span>          }<a name="line.70"></a>
-<span class="sourceLineNo">071</span>          file.delete();<a name="line.71"></a>
-<span class="sourceLineNo">072</span>          // If deletion fails still we can manage with the writes<a name="line.72"></a>
-<span class="sourceLineNo">073</span>        }<a name="line.73"></a>
-<span class="sourceLineNo">074</span>      }<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    }<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    this.rafs = new RandomAccessFile[filePaths.length];<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      String filePath = filePaths[i];<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      try {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>        rafs[i] = new RandomAccessFile(filePath, "rw");<a name="line.80"></a>
-<span class="sourceLineNo">081</span>        long totalSpace = new File(filePath).getTotalSpace();<a name="line.81"></a>
-<span class="sourceLineNo">082</span>        if (totalSpace &lt; sizePerFile) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>          // The next setting length will throw exception,logging this message<a name="line.83"></a>
-<span class="sourceLineNo">084</span>          // is just used for the detail reason of exception,<a name="line.84"></a>
-<span class="sourceLineNo">085</span>          String msg = "Only " + StringUtils.byteDesc(totalSpace)<a name="line.85"></a>
-<span class="sourceLineNo">086</span>              + " total space under " + filePath + ", not enough for requested "<a name="line.86"></a>
-<span class="sourceLineNo">087</span>              + StringUtils.byteDesc(sizePerFile);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>          LOG.warn(msg);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        rafs[i].setLength(sizePerFile);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>        fileChannels[i] = rafs[i].getChannel();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>        LOG.info("Allocating cache " + StringUtils.byteDesc(sizePerFile)<a name="line.92"></a>
-<span class="sourceLineNo">093</span>            + ", on the path:" + filePath);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      } catch (IOException fex) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        LOG.error("Failed allocating cache on " + filePath, fex);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        shutdown();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>        throw fex;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      }<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>  @Override<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  public String toString() {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    return "ioengine=" + this.getClass().getSimpleName() + ", paths="<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        + Arrays.asList(filePaths) + ", capacity=" + String.format("%,d", this.capacity);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * File IO engine is always able to support persistent storage for the cache<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @return true<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   */<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  @Override<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public boolean isPersistent() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    return true;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * Transfers data from file to the given byte buffer<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @param offset The offset in the file where the first byte to be read<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param length The length of buffer that should be allocated for reading<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   *               from the file channel<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * @return number of bytes read<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * @throws IOException<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   */<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public Cacheable read(long offset, int length, CacheableDeserializer&lt;Cacheable&gt; deserializer)<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      throws IOException {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    Preconditions.checkArgument(length &gt;= 0, "Length of read can not be less than 0.");<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    ByteBuffer dstBuffer = ByteBuffer.allocate(length);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    if (length != 0) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      accessFile(readAccessor, dstBuffer, offset);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      // The buffer created out of the fileChannel is formed by copying the data from the file<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      // Hence in this case there is no shared memory that we point to. Even if the BucketCache evicts<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      // this buffer from the file the data is already copied and there is no need to ensure that<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      // the results are not corrupted before consuming them.<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      if (dstBuffer.limit() != length) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        throw new RuntimeException("Only " + dstBuffer.limit() + " bytes read, " + length<a name="line.137"></a>
-<span class="sourceLineNo">138</span>            + " expected");<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      }<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return deserializer.deserialize(new SingleByteBuff(dstBuffer), true, MemoryType.EXCLUSIVE);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  @VisibleForTesting<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  void closeFileChannels() {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    for (FileChannel fileChannel: fileChannels) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      try {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        fileChannel.close();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      } catch (IOException e) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        LOG.warn("Failed to close FileChannel", e);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    }<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Transfers data from the given byte buffer to file<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * @param srcBuffer the given byte buffer from which bytes are to be read<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * @param offset The offset in the file where the first byte to be written<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @throws IOException<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void write(ByteBuffer srcBuffer, long offset) throws IOException {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    if (!srcBuffer.hasRemaining()) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      return;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    accessFile(writeAccessor, srcBuffer, offset);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Sync the data to file after writing<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * @throws IOException<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  @Override<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  public void sync() throws IOException {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    for (int i = 0; i &lt; fileChannels.length; i++) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      try {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        if (fileChannels[i] != null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          fileChannels[i].force(true);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      } catch (IOException ie) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        LOG.warn("Failed syncing data to " + this.filePaths[i]);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        throw ie;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>  /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * Close the file<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   */<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  @Override<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  public void shutdown() {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      try {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        if (fileChannels[i] != null) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          fileChannels[i].close();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        if (rafs[i] != null) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          rafs[i].close();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      } catch (IOException ex) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        LOG.error("Failed closing " + filePaths[i] + " when shudown the IOEngine", ex);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>  @Override<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public void write(ByteBuff srcBuffer, long offset) throws IOException {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // When caching block into BucketCache there will be single buffer backing for this HFileBlock.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    assert srcBuffer.hasArray();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    write(ByteBuffer.wrap(srcBuffer.array(), srcBuffer.arrayOffset(),<a name="line.210"></a>
-<span class="sourceLineNo">211</span>            srcBuffer.remaining()), offset);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>  private void accessFile(FileAccessor accessor, ByteBuffer buffer,<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      long globalOffset) throws IOException {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    int startFileNum = getFileNum(globalOffset);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    int remainingAccessDataLen = buffer.remaining();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    int endFileNum = getFileNum(globalOffset + remainingAccessDataLen - 1);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    int accessFileNum = startFileNum;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    long accessOffset = getAbsoluteOffsetInFile(accessFileNum, globalOffset);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    int bufLimit = buffer.limit();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    while (true) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      int accessLen = 0;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      if (endFileNum &gt; accessFileNum) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // short the limit;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        buffer.limit((int) (buffer.limit() - remainingAccessDataLen<a name="line.227"></a>
-<span class="sourceLineNo">228</span>            + sizePerFile - accessOffset));<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      try {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        accessLen = accessor.access(fileChannel, buffer, accessOffset);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      } catch (ClosedChannelException e) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        LOG.warn("Caught ClosedChannelException accessing BucketCache, reopening file. ", e);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        refreshFileConnection(accessFileNum);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        continue;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      // recover the limit<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      buffer.limit(bufLimit);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      if (accessLen &lt; remainingAccessDataLen) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        remainingAccessDataLen -= accessLen;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        accessFileNum++;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        accessOffset = 0;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      } else {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        break;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      if (accessFileNum &gt;= fileChannels.length) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        throw new IOException("Required data len " + StringUtils.byteDesc(buffer.remaining())<a name="line.247"></a>
-<span class="sourceLineNo">248</span>            + " exceed the engine's capacity " + StringUtils.byteDesc(capacity) + " where offset="<a name="line.248"></a>
-<span class="sourceLineNo">249</span>            + globalOffset);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * Get the absolute offset in given file with the relative global offset.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * @param fileNum<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * @param globalOffset<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * @return the absolute offset<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  private long getAbsoluteOffsetInFile(int fileNum, long globalOffset) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    return globalOffset - fileNum * sizePerFile;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  private int getFileNum(long offset) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    if (offset &lt; 0) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      throw new IllegalArgumentException("Unexpected offset " + offset);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    int fileNum = (int) (offset / sizePerFile);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    if (fileNum &gt;= fileChannels.length) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      throw new RuntimeException("Not expected offset " + offset<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          + " where capacity=" + capacity);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    return fileNum;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  @VisibleForTesting<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  FileChannel[] getFileChannels() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    return fileChannels;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>  @VisibleForTesting<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  void refreshFileConnection(int accessFileNum) throws IOException {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    if (fileChannel != null) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      fileChannel.close();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    rafs[accessFileNum] = new RandomAccessFile(filePaths[accessFileNum], "rw");<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    fileChannels[accessFileNum] = rafs[accessFileNum].getChannel();<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  private static interface FileAccessor {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    int access(FileChannel fileChannel, ByteBuffer byteBuffer, long accessOffset)<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        throws IOException;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>  private static class FileReadAccessor implements FileAccessor {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    @Override<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        long accessOffset) throws IOException {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      return fileChannel.read(byteBuffer, accessOffset);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>  private static class FileWriteAccessor implements FileAccessor {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    @Override<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        long accessOffset) throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      return fileChannel.write(byteBuffer, accessOffset);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>}<a name="line.311"></a>
+<span class="sourceLineNo">025</span>import java.nio.channels.ClosedByInterruptException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.nio.channels.ClosedChannelException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.nio.channels.FileChannel;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Arrays;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.io.hfile.Cacheable;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.io.hfile.CacheableDeserializer;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.util.StringUtils;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.slf4j.Logger;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.slf4j.LoggerFactory;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>/**<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * IO engine that stores data to a file on the local file system.<a name="line.43"></a>
+<span class="sourceLineNo">044</span> */<a name="line.44"></a>
+<span class="sourceLineNo">045</span>@InterfaceAudience.Private<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class FileIOEngine implements IOEngine {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private static final Logger LOG = LoggerFactory.getLogger(FileIOEngine.class);<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  public static final String FILE_DELIMITER = ",";<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private final String[] filePaths;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private final FileChannel[] fileChannels;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private final RandomAccessFile[] rafs;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private final long sizePerFile;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private final long capacity;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private FileReadAccessor readAccessor = new FileReadAccessor();<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private FileWriteAccessor writeAccessor = new FileWriteAccessor();<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  public FileIOEngine(long capacity, boolean maintainPersistence, String... filePaths)<a name="line.59"></a>
+<span class="sourceLineNo">060</span>      throws IOException {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    this.sizePerFile = capacity / filePaths.length;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    this.capacity = this.sizePerFile * filePaths.length;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    this.filePaths = filePaths;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    this.fileChannels = new FileChannel[filePaths.length];<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    if (!maintainPersistence) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      for (String filePath : filePaths) {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>        File file = new File(filePath);<a name="line.67"></a>
+<span class="sourceLineNo">068</span>        if (file.exists()) {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>          if (LOG.isDebugEnabled()) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>            LOG.debug("File " + filePath + " already exists. Deleting!!");<a name="line.70"></a>
+<span class="sourceLineNo">071</span>          }<a name="line.71"></a>
+<span class="sourceLineNo">072</span>          file.delete();<a name="line.72"></a>
+<span class="sourceLineNo">073</span>          // If deletion fails still we can manage with the writes<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        }<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      }<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    }<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    this.rafs = new RandomAccessFile[filePaths.length];<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      String filePath = filePaths[i];<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      try {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>        rafs[i] = new RandomAccessFile(filePath, "rw");<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        long totalSpace = new File(filePath).getTotalSpace();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>        if (totalSpace &lt; sizePerFile) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>          // The next setting length will throw exception,logging this message<a name="line.84"></a>
+<span class="sourceLineNo">085</span>          // is just used for the detail reason of exception,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          String msg = "Only " + StringUtils.byteDesc(totalSpace)<a name="line.86"></a>
+<span class="sourceLineNo">087</span>              + " total space under " + filePath + ", not enough for requested "<a name="line.87"></a>
+<span class="sourceLineNo">088</span>              + StringUtils.byteDesc(sizePerFile);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>          LOG.warn(msg);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        rafs[i].setLength(sizePerFile);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        fileChannels[i] = rafs[i].getChannel();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>        LOG.info("Allocating cache " + StringUtils.byteDesc(sizePerFile)<a name="line.93"></a>
+<span class="sourceLineNo">094</span>            + ", on the path:" + filePath);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      } catch (IOException fex) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        LOG.error("Failed allocating cache on " + filePath, fex);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        shutdown();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        throw fex;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      }<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  @Override<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public String toString() {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    return "ioengine=" + this.getClass().getSimpleName() + ", paths="<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        + Arrays.asList(filePaths) + ", capacity=" + String.format("%,d", this.capacity);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * File IO engine is always able to support persistent storage for the cache<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * @return true<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public boolean isPersistent() {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    return true;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  /**<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * Transfers data from file to the given byte buffer<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @param offset The offset in the file where the first byte to be read<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param length The length of buffer that should be allocated for reading<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   *               from the file channel<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * @return number of bytes read<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * @throws IOException<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  @Override<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  public Cacheable read(long offset, int length, CacheableDeserializer&lt;Cacheable&gt; deserializer)<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      throws IOException {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    Preconditions.checkArgument(length &gt;= 0, "Length of read can not be less than 0.");<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    ByteBuffer dstBuffer = ByteBuffer.allocate(length);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    if (length != 0) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      accessFile(readAccessor, dstBuffer, offset);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      // The buffer created out of the fileChannel is formed by copying the data from the file<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      // Hence in this case there is no shared memory that we point to. Even if the BucketCache evicts<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      // this buffer from the file the data is already copied and there is no need to ensure that<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      // the results are not corrupted before consuming them.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      if (dstBuffer.limit() != length) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        throw new RuntimeException("Only " + dstBuffer.limit() + " bytes read, " + length<a name="line.138"></a>
+<span class="sourceLineNo">139</span>            + " expected");<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      }<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    return deserializer.deserialize(new SingleByteBuff(dstBuffer), true, MemoryType.EXCLUSIVE);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @VisibleForTesting<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  void closeFileChannels() {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    for (FileChannel fileChannel: fileChannels) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      try {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        fileChannel.close();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      } catch (IOException e) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        LOG.warn("Failed to close FileChannel", e);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  /**<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * Transfers data from the given byte buffer to file<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * @param srcBuffer the given byte buffer from which bytes are to be read<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * @param offset The offset in the file where the first byte to be written<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * @throws IOException<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void write(ByteBuffer srcBuffer, long offset) throws IOException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    if (!srcBuffer.hasRemaining()) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      return;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    accessFile(writeAccessor, srcBuffer, offset);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  /**<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * Sync the data to file after writing<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * @throws IOException<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  @Override<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  public void sync() throws IOException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    for (int i = 0; i &lt; fileChannels.length; i++) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      try {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        if (fileChannels[i] != null) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          fileChannels[i].force(true);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      } catch (IOException ie) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        LOG.warn("Failed syncing data to " + this.filePaths[i]);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        throw ie;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span>  /**<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * Close the file<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   */<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  @Override<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public void shutdown() {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    for (int i = 0; i &lt; filePaths.length; i++) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      try {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        if (fileChannels[i] != null) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          fileChannels[i].close();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        }<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        if (rafs[i] != null) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          rafs[i].close();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      } catch (IOException ex) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        LOG.error("Failed closing " + filePaths[i] + " when shudown the IOEngine", ex);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
+<span class="sourceLineNo">206</span><a name="line.206"></a>
+<span class="sourceLineNo">207</span>  @Override<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  public void write(ByteBuff srcBuffer, long offset) throws IOException {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    // When caching block into BucketCache there will be single buffer backing for this HFileBlock.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    assert srcBuffer.hasArray();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    write(ByteBuffer.wrap(srcBuffer.array(), srcBuffer.arrayOffset(),<a name="line.211"></a>
+<span class="sourceLineNo">212</span>            srcBuffer.remaining()), offset);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>  private void accessFile(FileAccessor accessor, ByteBuffer buffer,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      long globalOffset) throws IOException {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    int startFileNum = getFileNum(globalOffset);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    int remainingAccessDataLen = buffer.remaining();<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    int endFileNum = getFileNum(globalOffset + remainingAccessDataLen - 1);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    int accessFileNum = startFileNum;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    long accessOffset = getAbsoluteOffsetInFile(accessFileNum, globalOffset);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    int bufLimit = buffer.limit();<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    while (true) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      int accessLen = 0;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      if (endFileNum &gt; accessFileNum) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        // short the limit;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        buffer.limit((int) (buffer.limit() - remainingAccessDataLen<a name="line.228"></a>
+<span class="sourceLineNo">229</span>            + sizePerFile - accessOffset));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      try {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        accessLen = accessor.access(fileChannel, buffer, accessOffset);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      } catch (ClosedByInterruptException e) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        throw e;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      } catch (ClosedChannelException e) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        LOG.warn("Caught ClosedChannelException accessing BucketCache, reopening file. ", e);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        refreshFileConnection(accessFileNum);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        continue;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // recover the limit<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      buffer.limit(bufLimit);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      if (accessLen &lt; remainingAccessDataLen) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        remainingAccessDataLen -= accessLen;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        accessFileNum++;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        accessOffset = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      } else {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        break;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      if (accessFileNum &gt;= fileChannels.length) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        throw new IOException("Required data len " + StringUtils.byteDesc(buffer.remaining())<a name="line.250"></a>
+<span class="sourceLineNo">251</span>            + " exceed the engine's capacity " + StringUtils.byteDesc(capacity) + " where offset="<a name="line.251"></a>
+<span class="sourceLineNo">252</span>            + globalOffset);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * Get the absolute offset in given file with the relative global offset.<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * @param fileNum<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * @param globalOffset<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * @return the absolute offset<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  private long getAbsoluteOffsetInFile(int fileNum, long globalOffset) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    return globalOffset - fileNum * sizePerFile;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  private int getFileNum(long offset) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    if (offset &lt; 0) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      throw new IllegalArgumentException("Unexpected offset " + offset);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    int fileNum = (int) (offset / sizePerFile);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    if (fileNum &gt;= fileChannels.length) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      throw new RuntimeException("Not expected offset " + offset<a name="line.273"></a>
+<span class="sourceLineNo">274</span>          + " where capacity=" + capacity);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    return fileNum;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>  @VisibleForTesting<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  FileChannel[] getFileChannels() {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    return fileChannels;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>  @VisibleForTesting<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  void refreshFileConnection(int accessFileNum) throws IOException {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    FileChannel fileChannel = fileChannels[accessFileNum];<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    if (fileChannel != null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      fileChannel.close();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    rafs[accessFileNum] = new RandomAccessFile(filePaths[accessFileNum], "rw");<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    fileChannels[accessFileNum] = rafs[accessFileNum].getChannel();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  private static interface FileAccessor {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    int access(FileChannel fileChannel, ByteBuffer byteBuffer, long accessOffset)<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        throws IOException;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  private static class FileReadAccessor implements FileAccessor {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        long accessOffset) throws IOException {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      return fileChannel.read(byteBuffer, accessOffset);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>  private static class FileWriteAccessor implements FileAccessor {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    public int access(FileChannel fileChannel, ByteBuffer byteBuffer,<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        long accessOffset) throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      return fileChannel.write(byteBuffer, accessOffset);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>}<a name="line.314"></a>
 
 
 


[16/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
index eccc4a3..ebbde54 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
@@ -1744,1869 +1744,1872 @@
 <span class="sourceLineNo">1736</span>      HRegion region = getRegion(request.getRegion());<a name="line.1736"></a>
 <span class="sourceLineNo">1737</span>      RegionInfo info = region.getRegionInfo();<a name="line.1737"></a>
 <span class="sourceLineNo">1738</span>      byte[] bestSplitRow = null;<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>        HRegion r = region;<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        r.forceSplit(null);<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>        bestSplitRow = r.checkSplit();<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        // try to flush region first<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        if(bestSplitRow == null) {<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>          r.flush(true);<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>          bestSplitRow = r.checkSplit();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>        r.clearSplit();<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      }<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      }<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>      builder.setSplittable(region.isSplittable());<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      builder.setMergeable(region.isMergeable());<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>      }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>      return builder.build();<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>    } catch (IOException ie) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>      throw new ServiceException(ie);<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    }<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span><a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>  @Override<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span><a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>    List&lt;HRegion&gt; regions;<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    if (request.hasTableName()) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      regions = regionServer.getRegions(tableName);<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>    } else {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>      regions = regionServer.getRegions();<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    }<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span><a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    try {<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      for (HRegion region : regions) {<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>      }<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>    } catch (IOException e) {<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      throw new ServiceException(e);<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    }<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>    builder.addAllRegionLoads(rLoads);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    return builder.build();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>  }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>  @Override<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>    requestCount.increment();<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>      try {<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>        checkOpen();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>          switch (queueName) {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            case "long":<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>              break;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>            case "short":<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1815"></a>
+<span class="sourceLineNo">1739</span>      boolean shouldSplit = true;<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow()) {<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        HRegion r = region;<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>        region.startRegionOperation(Operation.SPLIT_REGION);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        r.forceSplit(null);<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>        // Even after setting force split if split policy says no to split then we should not split.<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        shouldSplit = region.getSplitPolicy().shouldSplit() &amp;&amp; !info.isMetaRegion();<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>        bestSplitRow = r.checkSplit();<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>        // when all table data are in memstore, bestSplitRow = null<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        // try to flush region first<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>        if(bestSplitRow == null) {<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>          r.flush(true);<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>          bestSplitRow = r.checkSplit();<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        }<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        r.clearSplit();<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      }<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>        builder.setCompactionState(ProtobufUtil.createCompactionState(region.getCompactionState()));<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      builder.setSplittable(region.isSplittable() &amp;&amp; shouldSplit);<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      builder.setMergeable(region.isMergeable());<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>      if (request.hasBestSplitRow() &amp;&amp; request.getBestSplitRow() &amp;&amp; bestSplitRow != null) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>        builder.setBestSplitRow(UnsafeByteOperations.unsafeWrap(bestSplitRow));<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>      }<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>      return builder.build();<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>    } catch (IOException ie) {<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>      throw new ServiceException(ie);<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    }<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>  }<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span><a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>  @Override<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>  public GetRegionLoadResponse getRegionLoad(RpcController controller,<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>      GetRegionLoadRequest request) throws ServiceException {<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span><a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>    List&lt;HRegion&gt; regions;<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    if (request.hasTableName()) {<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>      TableName tableName = ProtobufUtil.toTableName(request.getTableName());<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>      regions = regionServer.getRegions(tableName);<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>    } else {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>      regions = regionServer.getRegions();<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>    }<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    List&lt;RegionLoad&gt; rLoads = new ArrayList&lt;&gt;(regions.size());<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    RegionLoad.Builder regionLoadBuilder = ClusterStatusProtos.RegionLoad.newBuilder();<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    try {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      for (HRegion region : regions) {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>        rLoads.add(regionServer.createRegionLoad(region, regionLoadBuilder, regionSpecifier));<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    } catch (IOException e) {<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>      throw new ServiceException(e);<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    GetRegionLoadResponse.Builder builder = GetRegionLoadResponse.newBuilder();<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>    builder.addAllRegionLoads(rLoads);<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>    return builder.build();<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  }<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span><a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>  @Override<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>    ClearCompactionQueuesRequest request) throws ServiceException {<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>    LOG.debug("Client=" + RpcServer.getRequestUserName().orElse(null) + "/"<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        + RpcServer.getRemoteAddress().orElse(null) + " clear compactions queue");<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>    ClearCompactionQueuesResponse.Builder respBuilder = ClearCompactionQueuesResponse.newBuilder();<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>    requestCount.increment();<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    if (clearCompactionQueues.compareAndSet(false,true)) {<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>      try {<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        checkOpen();<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        regionServer.getRegionServerCoprocessorHost().preClearCompactionQueues();<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>        for (String queueName : request.getQueueNameList()) {<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>          LOG.debug("clear " + queueName + " compaction queue");<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>          switch (queueName) {<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>            case "long":<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>              regionServer.compactSplitThread.clearLongCompactionsQueue();<a name="line.1815"></a>
 <span class="sourceLineNo">1816</span>              break;<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>            default:<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>              throw new IOException("Unknown queue name " + queueName);<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>          }<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        }<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>      } catch (IOException ie) {<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>        throw new ServiceException(ie);<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>      } finally {<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>        clearCompactionQueues.set(false);<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>      }<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    } else {<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>    }<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    return respBuilder.build();<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>  }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span><a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>  /**<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>   * Get some information of the region server.<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>   *<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>   * @param controller the RPC controller<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>   * @param request the request<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>   * @throws ServiceException<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>   */<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>  @Override<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    try {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>      checkOpen();<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    } catch (IOException ie) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>      throw new ServiceException(ie);<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>    }<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>    requestCount.increment();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>  }<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span><a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>  @Override<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    try {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>      checkOpen();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      HRegion region = getRegion(request.getRegion());<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      requestCount.increment();<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>      if (request.getFamilyCount() == 0) {<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>      } else {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>          columnFamilies.add(cf.toByteArray());<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        }<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>      int nCF = columnFamilies.size();<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      builder.addAllStoreFile(fileList);<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>      return builder.build();<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>    } catch (IOException ie) {<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>      throw new ServiceException(ie);<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>  }<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span><a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>  /**<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>   *<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>   * &lt;p&gt;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>   * Different manages states for the region are:<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>   *  &lt;/ul&gt;<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>   * &lt;p&gt;<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>   * &lt;/p&gt;<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>   * @param controller the RPC controller<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>   * @param request the request<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>   * @throws ServiceException<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>   */<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>  @Override<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>    requestCount.increment();<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>    if (request.hasServerStartCode()) {<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      // check that we are the same server that this RPC is intended for.<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      long serverStartCode = request.getServerStartCode();<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      if (regionServer.serverName.getStartcode() !=  serverStartCode) {<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        throw new ServiceException(new DoNotRetryIOException("This RPC was intended for a " +<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>            "different server with startCode: " + serverStartCode + ", this server is: "<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>            + regionServer.serverName));<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>    }<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span><a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    try {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      checkOpen();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    } catch (IOException ie) {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      TableName tableName = null;<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>      if (regionCount == 1) {<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>        if (ri != null) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>        }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>        throw new ServiceException(ie);<a name="line.1936"></a>
+<span class="sourceLineNo">1817</span>            case "short":<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>              regionServer.compactSplitThread.clearShortCompactionsQueue();<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>              break;<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            default:<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>              LOG.warn("Unknown queue name " + queueName);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>              throw new IOException("Unknown queue name " + queueName);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>          }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>        }<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>        regionServer.getRegionServerCoprocessorHost().postClearCompactionQueues();<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>      } catch (IOException ie) {<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>        throw new ServiceException(ie);<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>      } finally {<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>        clearCompactionQueues.set(false);<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>      }<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    } else {<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>      LOG.warn("Clear compactions queue is executing by other admin.");<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>    }<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    return respBuilder.build();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>  }<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span><a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>  /**<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>   * Get some information of the region server.<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>   *<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>   * @param controller the RPC controller<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>   * @param request the request<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>   * @throws ServiceException<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>   */<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>  @Override<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>  public GetServerInfoResponse getServerInfo(final RpcController controller,<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      final GetServerInfoRequest request) throws ServiceException {<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    try {<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>      checkOpen();<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>    } catch (IOException ie) {<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>      throw new ServiceException(ie);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>    }<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    requestCount.increment();<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    int infoPort = regionServer.infoServer != null ? regionServer.infoServer.getPort() : -1;<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    return ResponseConverter.buildGetServerInfoResponse(regionServer.serverName, infoPort);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>  }<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span><a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>  @Override<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>  public GetStoreFileResponse getStoreFile(final RpcController controller,<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      final GetStoreFileRequest request) throws ServiceException {<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>    try {<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>      checkOpen();<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      HRegion region = getRegion(request.getRegion());<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>      requestCount.increment();<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      Set&lt;byte[]&gt; columnFamilies;<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>      if (request.getFamilyCount() == 0) {<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        columnFamilies = region.getTableDescriptor().getColumnFamilyNames();<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      } else {<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>        columnFamilies = new TreeSet&lt;&gt;(Bytes.BYTES_RAWCOMPARATOR);<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        for (ByteString cf: request.getFamilyList()) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>          columnFamilies.add(cf.toByteArray());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>        }<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      int nCF = columnFamilies.size();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      List&lt;String&gt;  fileList = region.getStoreFileList(<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        columnFamilies.toArray(new byte[nCF][]));<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>      GetStoreFileResponse.Builder builder = GetStoreFileResponse.newBuilder();<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      builder.addAllStoreFile(fileList);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      return builder.build();<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    } catch (IOException ie) {<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>      throw new ServiceException(ie);<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>    }<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  }<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span><a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>  /**<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>   * Open asynchronously a region or a set of regions on the region server.<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>   *<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>   * The opening is coordinated by ZooKeeper, and this method requires the znode to be created<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>   *  before being called. As a consequence, this method should be called only from the master.<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>   * &lt;p&gt;<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>   * Different manages states for the region are:<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>   * &lt;/p&gt;&lt;ul&gt;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>   *  &lt;li&gt;region not opened: the region opening will start asynchronously.&lt;/li&gt;<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>   *  &lt;li&gt;a close is already in progress: this is considered as an error.&lt;/li&gt;<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>   *  &lt;li&gt;an open is already in progress: this new open request will be ignored. This is important<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>   *  because the Master can do multiple requests if it crashes.&lt;/li&gt;<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>   *  &lt;li&gt;the region is already opened:  this new open request will be ignored.&lt;/li&gt;<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>   *  &lt;/ul&gt;<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>   * &lt;p&gt;<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>   * Bulk assign: If there are more than 1 region to open, it will be considered as a bulk assign.<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>   * For a single region opening, errors are sent through a ServiceException. For bulk assign,<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>   * errors are put in the response as FAILED_OPENING.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>   * &lt;/p&gt;<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>   * @param controller the RPC controller<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>   * @param request the request<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>   * @throws ServiceException<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>   */<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>  @Override<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>  @QosPriority(priority=HConstants.ADMIN_QOS)<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>  public OpenRegionResponse openRegion(final RpcController controller,<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      final OpenRegionRequest request) throws ServiceException {<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    requestCount.increment();<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>    if (request.hasServerStartCode()) {<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      // check that we are the same server that this RPC is intended for.<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      long serverStartCode = request.getServerStartCode();<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (regionServer.serverName.getStartcode() !=  serverStartCode) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        throw new ServiceException(new DoNotRetryIOException("This RPC was intended for a " +<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>            "different server with startCode: " + serverStartCode + ", this server is: "<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>            + regionServer.serverName));<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      }<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>    }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>    OpenRegionResponse.Builder builder = OpenRegionResponse.newBuilder();<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    final int regionCount = request.getOpenInfoCount();<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>    final Map&lt;TableName, TableDescriptor&gt; htds = new HashMap&lt;&gt;(regionCount);<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>    final boolean isBulkAssign = regionCount &gt; 1;<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>    try {<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>      checkOpen();<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    } catch (IOException ie) {<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>      TableName tableName = null;<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      if (regionCount == 1) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>        org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo ri = request.getOpenInfo(0).getRegion();<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        if (ri != null) {<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>          tableName = ProtobufUtil.toTableName(ri.getTableName());<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>        }<a name="line.1936"></a>
 <span class="sourceLineNo">1937</span>      }<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>      synchronized (regionServer.online) {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>        try {<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>          }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>          checkOpen();<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>        } catch (InterruptedException t) {<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>          Thread.currentThread().interrupt();<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>          throw new ServiceException(t);<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>        } catch (IOException e) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>          throw new ServiceException(e);<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>        }<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>      }<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    }<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span><a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>      TableDescriptor htd;<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      try {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        String encodedName = region.getEncodedName();<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>        if (onlineRegion != null) {<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>          // The region is already online. This should not happen any more.<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>          String error = "Received OPEN for the region:"<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>          LOG.warn(error);<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>          //regionServer.abort(error);<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>          //throw new IOException(error);<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          continue;<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>        }<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span><a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>          encodedNameBytes, Boolean.TRUE);<a name="line.1980"></a>
+<span class="sourceLineNo">1938</span>      if (!TableName.META_TABLE_NAME.equals(tableName)) {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>        throw new ServiceException(ie);<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      }<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      // We are assigning meta, wait a little for regionserver to finish initialization.<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      int timeout = regionServer.conf.getInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>        HConstants.DEFAULT_HBASE_RPC_TIMEOUT) &gt;&gt; 2; // Quarter of RPC timeout<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>      long endTime = System.currentTimeMillis() + timeout;<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      synchronized (regionServer.online) {<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>        try {<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>          while (System.currentTimeMillis() &lt;= endTime<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>              &amp;&amp; !regionServer.isStopped() &amp;&amp; !regionServer.isOnline()) {<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>            regionServer.online.wait(regionServer.msgInterval);<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>          }<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>          checkOpen();<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>        } catch (InterruptedException t) {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>          Thread.currentThread().interrupt();<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>          throw new ServiceException(t);<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>        } catch (IOException e) {<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>          throw new ServiceException(e);<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>        }<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      }<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    long masterSystemTime = request.hasMasterSystemTime() ? request.getMasterSystemTime() : -1;<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for (RegionOpenInfo regionOpenInfo : request.getOpenInfoList()) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      final RegionInfo region = ProtobufUtil.toRegionInfo(regionOpenInfo.getRegion());<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      TableDescriptor htd;<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        String encodedName = region.getEncodedName();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>        byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>        if (onlineRegion != null) {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>          // The region is already online. This should not happen any more.<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>          String error = "Received OPEN for the region:"<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>            + region.getRegionNameAsString() + ", which is already online";<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>          LOG.warn(error);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>          //regionServer.abort(error);<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>          //throw new IOException(error);<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>          builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>          continue;<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>        }<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>        LOG.info("Open " + region.getRegionNameAsString());<a name="line.1980"></a>
 <span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>            // There is a close in progress. This should not happen any more.<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>            String error = "Received OPEN for the region:"<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>            regionServer.abort(error);<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>            throw new IOException(error);<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>          }<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>        }<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span><a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>          // An open is in progress. This is supported, but let's log this.<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>              + " - ignoring this new request for this region.");<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>        }<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span><a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span><a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>          htd = htds.get(region.getTable());<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>          if (htd == null) {<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>            htds.put(region.getTable(), htd);<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>          }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>          if (htd == null) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2011"></a>
+<span class="sourceLineNo">1982</span>        final Boolean previous = regionServer.regionsInTransitionInRS.putIfAbsent(<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>          encodedNameBytes, Boolean.TRUE);<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span><a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>        if (Boolean.FALSE.equals(previous)) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>          if (regionServer.getRegion(encodedName) != null) {<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>            // There is a close in progress. This should not happen any more.<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>            String error = "Received OPEN for the region:"<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>              + region.getRegionNameAsString() + ", which we are already trying to CLOSE";<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>            regionServer.abort(error);<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>            throw new IOException(error);<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>          }<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>          regionServer.regionsInTransitionInRS.put(encodedNameBytes, Boolean.TRUE);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>        }<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>        if (Boolean.TRUE.equals(previous)) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>          // An open is in progress. This is supported, but let's log this.<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>          LOG.info("Receiving OPEN for the region:" +<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>            region.getRegionNameAsString() + ", which we are already trying to OPEN"<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>              + " - ignoring this new request for this region.");<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>        }<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span><a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>        // We are opening this region. If it moves back and forth for whatever reason, we don't<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>        // want to keep returning the stale moved record while we are opening/if we close again.<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        regionServer.removeFromMovedRegions(region.getEncodedName());<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span><a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        if (previous == null || !previous.booleanValue()) {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>          htd = htds.get(region.getTable());<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>          if (htd == null) {<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>            htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>            htds.put(region.getTable(), htd);<a name="line.2011"></a>
 <span class="sourceLineNo">2012</span>          }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>          // Need to pass the expected version in the constructor.<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>          if (regionServer.executorService == null) {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>          } else {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>            if (region.isMetaRegion()) {<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>            } else {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>              }<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>              } else {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2030"></a>
+<span class="sourceLineNo">2013</span>          if (htd == null) {<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>            throw new IOException("Missing table descriptor for " + region.getEncodedName());<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>          }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>          // If there is no action in progress, we can submit a specific handler.<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>          // Need to pass the expected version in the constructor.<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>          if (regionServer.executorService == null) {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>            LOG.info("No executor executorService; skipping open request");<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>          } else {<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>            if (region.isMetaRegion()) {<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>              regionServer.executorService.submit(new OpenMetaHandler(<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>              regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>            } else {<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>              if (regionOpenInfo.getFavoredNodesCount() &gt; 0) {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>                regionServer.updateRegionFavoredNodesMapping(region.getEncodedName(),<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>                regionOpenInfo.getFavoredNodesList());<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>              }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>              if (htd.getPriority() &gt;= HConstants.ADMIN_QOS || region.getTable().isSystemTable()) {<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>                regionServer.executorService.submit(new OpenPriorityRegionHandler(<a name="line.2030"></a>
 <span class="sourceLineNo">2031</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>              }<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>            }<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          }<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        }<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span><a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      } catch (IOException ie) {<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>        if (isBulkAssign) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>          throw new ServiceException(ie);<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>    return builder.build();<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>  }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span><a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>  /**<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   *  Wamrmup a region on this server.<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   *<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>   * closes the region bringing the most important pages in cache.<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>   * &lt;p&gt;<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>   *<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>   * @param controller the RPC controller<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>   * @param request the request<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>   * @throws ServiceException<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>   */<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>  @Override<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span><a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    TableDescriptor htd;<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span><a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    try {<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>      checkOpen();<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>      String encodedName = region.getEncodedName();<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span><a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      if (onlineRegion != null) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>        return response;<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      }<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span><a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>      if (LOG.isDebugEnabled()) {<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        LOG.debug("Warming up Region " + region.getRegionNameAsString());<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>      }<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span><a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span><a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>        return response;<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      }<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span><a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2092"></a>
+<span class="sourceLineNo">2032</span>              } else {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>                regionServer.executorService.submit(new OpenRegionHandler(<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>                regionServer, regionServer, region, htd, masterSystemTime));<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>              }<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>            }<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          }<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        }<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span><a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        builder.addOpeningState(RegionOpeningState.OPENED);<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>      } catch (IOException ie) {<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        LOG.warn("Failed opening region " + region.getRegionNameAsString(), ie);<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>        if (isBulkAssign) {<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>          builder.addOpeningState(RegionOpeningState.FAILED_OPENING);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>        } else {<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>          throw new ServiceException(ie);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>        }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      }<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>    }<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    return builder.build();<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>  }<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span><a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>  /**<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>   *  Wamrmup a region on this server.<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>   *<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>   * This method should only be called by Master. It synchrnously opens the region and<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>   * closes the region bringing the most important pages in cache.<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>   * &lt;p&gt;<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>   *<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>   * @param controller the RPC controller<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>   * @param request the request<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>   * @throws ServiceException<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>   */<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>  @Override<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>  public WarmupRegionResponse warmupRegion(final RpcController controller,<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>      final WarmupRegionRequest request) throws ServiceException {<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span><a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>    final RegionInfo region = ProtobufUtil.toRegionInfo(request.getRegionInfo());<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    TableDescriptor htd;<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>    WarmupRegionResponse response = WarmupRegionResponse.getDefaultInstance();<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span><a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    try {<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      checkOpen();<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>      String encodedName = region.getEncodedName();<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>      byte[] encodedNameBytes = region.getEncodedNameAsBytes();<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>      final HRegion onlineRegion = regionServer.getRegion(encodedName);<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span><a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>      if (onlineRegion != null) {<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>        LOG.info("Region already online. Skipping warming up " + region);<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>        return response;<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>      }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span><a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>      if (LOG.isDebugEnabled()) {<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        LOG.debug("Warming up Region " + region.getRegionNameAsString());<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>      }<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span><a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      htd = regionServer.tableDescriptors.get(region.getTable());<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span><a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>      if (regionServer.getRegionsInTransitionInRS().containsKey(encodedNameBytes)) {<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>        LOG.info("Region is in transition. Skipping warmup " + region);<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>        return response;<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>      }<a name="line.2092"></a>
 <span class="sourceLineNo">2093</span><a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>    } catch (IOException ie) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>      throw new ServiceException(ie);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span><a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>    return response;<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  }<a name="line.2100"></a>
+<span class="sourceLineNo">2094</span>      HRegion.warmupHRegion(region, htd, regionServer.getWAL(region),<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>          regionServer.getConfiguration(), regionServer, null);<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span><a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    } catch (IOException ie) {<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>      LOG.error("Failed warming up region " + region.getRegionNameAsString(), ie);<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>      throw new ServiceException(ie);<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>    }<a name="line.2100"></a>
 <span class="sourceLineNo">2101</span><a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>  /**<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>   * Replay the given changes when distributedLogReplay WAL edits from a failed RS. The guarantee is<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>   * that the given mutations will be durable on the receiving RS if this method returns without any<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>   * exception.<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>   * @param controller the RPC controller<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>   * @param request the request<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>   * @throws ServiceException<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>   */<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>  @Override<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>  @QosPriority(priority = HConstants.REPLAY_QOS)<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>  public ReplicateWALEntryResponse replay(final RpcController controller,<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    long before = EnvironmentEdgeManager.currentTime();<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    CellScanner cells = ((HBaseRpcController) controller).cellScanner();<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    try {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>      checkOpen();<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>      List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>      if (entries == null || entries.isEmpty()) {<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>        // empty input<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>      ByteString regionName = entries.get(0).getKey().getEncodedRegionName();<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>      HRegion region = regionServer.getRegionByEncodedName(regionName.toStringUtf8());<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>      RegionCoprocessorHost coprocessorHost =<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>          ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>            ? region.getCoprocessorHost()<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>            : null; // do not invoke coprocessors if this is a secondary region replica<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>      List&lt;Pair&lt;WALKey, WALEdit&gt;&gt; walEntries = new ArrayList&lt;&gt;();<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      // Skip adding the edits to WAL if this is a secondary region replica<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>      boolean isPrimary = RegionReplicaUtil.isDefaultReplica(region.getRegionInfo());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>      Durability durability = isPrimary ? Durability.USE_DEFAULT : Durability.SKIP_WAL;<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span><a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>      for (WALEntry entry : entries) {<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>        if (!regionName.equals(entry.getKey().getEncodedRegionName())) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>          throw new NotServingRegionException("Replay request contains entries from multiple " +<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>              "regions. First region:" + regionName.toStringUtf8() + " , other region:"<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>              + entry.getKey().getEncodedRegionName());<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        }<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        if (regionServer.nonceManager != null &amp;&amp; isPrimary) {<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          long nonceGroup = entry.getKey().hasNonceGroup()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>            ? entry.getKey().getNonceGroup() : HConstants.NO_NONCE;<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>          long nonce = entry.getKey().hasNonce() ? entry.getKey().getNonce() : HConstants.NO_NONCE;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>          regionServer.nonceManager.reportOperationFromWal(<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>              nonceGroup,<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>              nonce,<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>              entry.getKey().getWriteTime());<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>        }<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>        Pair&lt;WALKey, WALEdit&gt; walEntry = (coprocessorHost == null) ? null : new Pair&lt;&gt;();<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>        List&lt;WALSplitter.MutationReplay&gt; edits = WALSplitter.getMutationsFromWALEntry(entry,<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>          cells, walEntry, durability);<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>        if (coprocessorHost != null) {<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>          // Start coprocessor replay here. The coprocessor is for each WALEdit instead of a<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>          // KeyValue.<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>          if (coprocessorHost.preWALRestore(region.getRegionInfo(), walEntry.getFirst(),<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>            walEntry.getSecond())) {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>            // if bypass this log entry, ignore it ...<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>            continue;<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>          }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>          walEntries.add(walEntry);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>        }<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>        if(edits!=null &amp;&amp; !edits.isEmpty()) {<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>          // HBASE-17924<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>          // sort to improve lock efficiency<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>          Collections.sort(edits, (v1, v2) -&gt; Row.COMPARATOR.compare(v1.mutation, v2.mutation));<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          long replaySeqId = (entry.getKey().hasOrigSequenceNumber()) ?<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>            entry.getKey().getOrigSequenceNumber() : entry.getKey().getLogSequenceNumber();<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>          OperationStatus[] result = doReplayBatchOp(region, edits, replaySeqId);<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>          // check if it's a partial success<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>          for (int i = 0; result != null &amp;&amp; i &lt; result.length; i++) {<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>            if (result[i] != OperationStatus.SUCCESS) {<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>              throw new IOException(result[i].getExceptionMsg());<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>            }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>          }<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        }<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>      }<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span><a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      //sync wal at the end because ASYNC_WAL is used above<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>      WAL wal = region.getWAL();<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>      if (wal != null) {<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        wal.sync();<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>      }<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span><a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>      if (coprocessorHost != null) {<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>        for (Pair&lt;WALKey, WALEdit&gt; entry : walEntries) {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>          coprocessorHost.postWALRestore(region.getRegionInfo(), entry.getFirst(),<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>            entry.getSecond());<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        }<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>      }<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      return ReplicateWALEntryResponse.newBuilder().build();<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>    } catch (IOException ie) {<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>      throw new ServiceException(ie);<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    } finally {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>      if (regionServer.metricsRegionServer != null) {<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>        regionServer.metricsRegionServer.updateReplay(<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>          EnvironmentEdgeManager.currentTime() - before);<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      }<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>    }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>  }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span><a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>  /**<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>   * Replicate WAL entries on the region server.<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>   *<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>   * @param controller the RPC controller<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>   * @param request the request<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>   * @throws ServiceException<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>   */<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>  @Override<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>  @QosPriority(priority=HConstants.REPLICATION_QOS)<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>  public ReplicateWALEntryResponse replicateWALEntry(final RpcController controller,<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>      final ReplicateWALEntryRequest request) throws ServiceException {<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>    try {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>      checkOpen();<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>      if (regionServer.replicationSinkHandler != null) {<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        requestCount.increment();<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        List&lt;WALEntry&gt; entries = request.getEntryList();<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>        CellScanner cellScanner = ((HBaseRpcController)controller).cellScanner();<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>        regionSer

<TRUNCATED>

[26/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.


Project: http://git-wip-us.apache.org/repos/asf/hbase-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase-site/commit/b2e10744
Tree: http://git-wip-us.apache.org/repos/asf/hbase-site/tree/b2e10744
Diff: http://git-wip-us.apache.org/repos/asf/hbase-site/diff/b2e10744

Branch: refs/heads/asf-site
Commit: b2e1074488b71023f86790b5620d3003b625b785
Parents: 53df288
Author: jenkins <bu...@apache.org>
Authored: Wed Mar 28 14:48:56 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Wed Mar 28 14:48:56 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |     7 +-
 apache_hbase_reference_guide.pdf                | 29004 +++++++++--------
 book.html                                       |    35 +-
 bulk-loads.html                                 |     7 +-
 checkstyle-aggregate.html                       | 18143 +++++------
 checkstyle.rss                                  |    32 +-
 coc.html                                        |     7 +-
 dependencies.html                               |     7 +-
 dependency-convergence.html                     |     7 +-
 dependency-info.html                            |     7 +-
 dependency-management.html                      |     7 +-
 devapidocs/constant-values.html                 |     6 +-
 .../hfile/bucket/FileIOEngine.FileAccessor.html |     4 +-
 .../bucket/FileIOEngine.FileReadAccessor.html   |     6 +-
 .../bucket/FileIOEngine.FileWriteAccessor.html  |     6 +-
 .../hbase/io/hfile/bucket/FileIOEngine.html     |    48 +-
 .../hbase/regionserver/RSRpcServices.html       |    76 +-
 .../org/apache/hadoop/hbase/Version.html        |     6 +-
 .../hfile/bucket/FileIOEngine.FileAccessor.html |   577 +-
 .../bucket/FileIOEngine.FileReadAccessor.html   |   577 +-
 .../bucket/FileIOEngine.FileWriteAccessor.html  |   577 +-
 .../hbase/io/hfile/bucket/FileIOEngine.html     |   577 +-
 ...tTableRegionProcedure.StoreFileSplitter.html |     2 +-
 .../assignment/SplitTableRegionProcedure.html   |     2 +-
 .../regionserver/RSRpcServices.LogDelegate.html |  3691 +--
 ...SRpcServices.RegionScannerCloseCallBack.html |  3691 +--
 .../RSRpcServices.RegionScannerHolder.html      |  3691 +--
 ...pcServices.RegionScannerShippedCallBack.html |  3691 +--
 ...RpcServices.RegionScannersCloseCallBack.html |  3691 +--
 .../RSRpcServices.ScannerListener.html          |  3691 +--
 .../hbase/regionserver/RSRpcServices.html       |  3691 +--
 export_control.html                             |     7 +-
 index.html                                      |     7 +-
 integration.html                                |     7 +-
 issue-tracking.html                             |     7 +-
 license.html                                    |     7 +-
 mail-lists.html                                 |     7 +-
 metrics.html                                    |     7 +-
 old_news.html                                   |     7 +-
 plugin-management.html                          |     7 +-
 plugins.html                                    |     7 +-
 poweredbyhbase.html                             |     7 +-
 project-info.html                               |     7 +-
 project-reports.html                            |     7 +-
 project-summary.html                            |     7 +-
 pseudo-distributed.html                         |     7 +-
 replication.html                                |     7 +-
 resources.html                                  |     7 +-
 source-repository.html                          |     7 +-
 sponsors.html                                   |     7 +-
 supportingprojects.html                         |     7 +-
 team-list.html                                  |     7 +-
 testdevapidocs/allclasses-frame.html            |     6 +-
 testdevapidocs/allclasses-noframe.html          |     6 +-
 testdevapidocs/constant-values.html             |    38 +-
 testdevapidocs/index-all.html                   |    92 +-
 .../hbase/class-use/HBaseClassTestRule.html     |    10 +-
 .../hbase/class-use/HBaseTestingUtility.html    |     8 +-
 .../apache/hadoop/hbase/client/TestAdmin1.html  |   114 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    10 +-
 .../hadoop/hbase/procedure/package-tree.html    |     8 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     4 +-
 .../hadoop/hbase/regionserver/package-tree.html |     2 +-
 ...ccessController3.FaultyAccessController.html |     4 +-
 .../access/TestAdminOnlyOperations.Action.html  |   231 -
 .../TestAdminOnlyOperations.DummyCpService.html |   336 -
 .../access/TestAdminOnlyOperations.html         |   714 -
 .../hbase/security/access/TestCellACLs.html     |     4 +-
 .../security/access/TestNamespaceCommands.html  |     4 +-
 .../access/TestRpcAccessChecks.Action.html      |   231 +
 .../TestRpcAccessChecks.DummyCpService.html     |   336 +
 .../security/access/TestRpcAccessChecks.html    |   763 +
 .../access/TestScanEarlyTermination.html        |     4 +-
 .../TestAdminOnlyOperations.Action.html         |   180 -
 .../TestAdminOnlyOperations.DummyCpService.html |   125 -
 .../class-use/TestAdminOnlyOperations.html      |   125 -
 .../class-use/TestRpcAccessChecks.Action.html   |   180 +
 .../TestRpcAccessChecks.DummyCpService.html     |   125 +
 .../access/class-use/TestRpcAccessChecks.html   |   125 +
 .../hbase/security/access/package-frame.html    |     6 +-
 .../hbase/security/access/package-summary.html  |    22 +-
 .../hbase/security/access/package-tree.html     |     6 +-
 .../hbase/security/access/package-use.html      |     2 +-
 .../apache/hadoop/hbase/test/package-tree.html  |     4 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     4 +-
 testdevapidocs/overview-tree.html               |     6 +-
 .../apache/hadoop/hbase/client/TestAdmin1.html  |  2730 +-
 .../access/TestAdminOnlyOperations.Action.html  |   340 -
 .../TestAdminOnlyOperations.DummyCpService.html |   340 -
 .../access/TestAdminOnlyOperations.html         |   340 -
 .../access/TestRpcAccessChecks.Action.html      |   434 +
 .../TestRpcAccessChecks.DummyCpService.html     |   434 +
 .../security/access/TestRpcAccessChecks.html    |   434 +
 93 files changed, 42538 insertions(+), 42060 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index e2286f7..1134bc4 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180327" />
+    <meta name="Date-Revision-yyyymmdd" content="20180328" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -178,9 +178,6 @@
                       <li>      <a href="metrics.html"  target="_blank" title="Metrics">Metrics</a>
 </li>
                   
-                      <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
-</li>
-                  
                       <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
@@ -594,7 +591,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-28</li>
             </p>
                 </div>
 


[07/26] hbase-site git commit: Published site at 3b6199a27a944f9f05ca6512c59766ed0f590f48.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html
deleted file mode 100644
index 5b28049..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html
+++ /dev/null
@@ -1,714 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TestAdminOnlyOperations (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="TestAdminOnlyOperations (Apache HBase 3.0.0-SNAPSHOT Test API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestAdminOnlyOperations.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAccessController3.FaultyAccessController.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" target="_top">Frames</a></li>
-<li><a href="TestAdminOnlyOperations.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.security.access</div>
-<h2 title="Class TestAdminOnlyOperations" class="title">Class TestAdminOnlyOperations</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.77">TestAdminOnlyOperations</a>
-extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
-<div class="block">This class tests operations in MasterRpcServices which require ADMIN access.
- It doesn't test all operations which require ADMIN access, only those which get vetted within
- MasterRpcServices at the point of entry itself (unlike old approach of using
- hooks in AccessController).
-
- Sidenote:
- There is one big difference between how security tests for AccessController hooks work, and how
- the tests in this class for security in MasterRpcServices work.
- The difference arises because of the way AC & MasterRpcServices get the user.
-
- In AccessController, it first checks if there is an active rpc user in ObserverContext. If not,
- it uses UserProvider for current user. This *might* make sense in the context of coprocessors,
- because they can be called outside the context of RPCs.
- But in the context of MasterRpcServices, only one way makes sense - RPCServer.getRequestUser().
-
- In AC tests, when we do FooUser.runAs on AccessController instance directly, it bypasses
- the rpc framework completely, but works because UserProvider provides the correct user, i.e.
- FooUser in this case.
-
- But this doesn't work for the tests here, so we go around by doing complete RPCs.</div>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="nested.class.summary">
-<!--   -->
-</a>
-<h3>Nested Class Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
-<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Class and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>(package private) static interface&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>static class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.DummyCpService</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static org.apache.hadoop.conf.Configuration</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#conf">conf</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#GROUP_ADMIN">GROUP_ADMIN</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static org.apache.hadoop.hbase.security.User</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#USER_ADMIN">USER_ADMIN</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static org.apache.hadoop.hbase.security.User</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#USER_GROUP_ADMIN">USER_GROUP_ADMIN</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static org.apache.hadoop.hbase.security.User</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#USER_NON_ADMIN">USER_NON_ADMIN</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#TestAdminOnlyOperations--">TestAdminOnlyOperations</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>private static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#enableSecurity-org.apache.hadoop.conf.Configuration-">enableSecurity</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#setup--">setup</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testCleanerChoreRunning--">testCleanerChoreRunning</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testEnableCatalogJanitor--">testEnableCatalogJanitor</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testExecProcedure--">testExecProcedure</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testExecProcedureWithRet--">testExecProcedureWithRet</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i6" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testExecRegionServerService--">testExecRegionServerService</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i7" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testExecService--">testExecService</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i8" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testNormalize--">testNormalize</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i9" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testRunCatalogJanitor--">testRunCatalogJanitor</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i10" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testRunCleanerChore--">testRunCleanerChore</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i11" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#testSetNormalizerRunning--">testSetNormalizerRunning</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i12" class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#verifiedDeniedServiceException-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">verifiedDeniedServiceException</a></span>(org.apache.hadoop.hbase.security.User&nbsp;user,
-                              <a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr id="i13" class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#verifyAdminCheckForAction-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">verifyAdminCheckForAction</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr id="i14" class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#verifyAllowed-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">verifyAllowed</a></span>(org.apache.hadoop.hbase.security.User&nbsp;user,
-             <a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-<tr id="i15" class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#verifyDenied-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">verifyDenied</a></span>(org.apache.hadoop.hbase.security.User&nbsp;user,
-            <a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a>&nbsp;action)</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="CLASS_RULE">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.79">CLASS_RULE</a></pre>
-</li>
-</ul>
-<a name="TEST_UTIL">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>TEST_UTIL</h4>
-<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.82">TEST_UTIL</a></pre>
-</li>
-</ul>
-<a name="conf">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>conf</h4>
-<pre>private static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.83">conf</a></pre>
-</li>
-</ul>
-<a name="USER_ADMIN">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>USER_ADMIN</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.security.User <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.86">USER_ADMIN</a></pre>
-</li>
-</ul>
-<a name="USER_NON_ADMIN">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>USER_NON_ADMIN</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.security.User <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.88">USER_NON_ADMIN</a></pre>
-</li>
-</ul>
-<a name="GROUP_ADMIN">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>GROUP_ADMIN</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.90">GROUP_ADMIN</a></pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.GROUP_ADMIN">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
-<a name="USER_GROUP_ADMIN">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>USER_GROUP_ADMIN</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.security.User <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.91">USER_GROUP_ADMIN</a></pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="TestAdminOnlyOperations--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>TestAdminOnlyOperations</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.77">TestAdminOnlyOperations</a>()</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="enableSecurity-org.apache.hadoop.conf.Configuration-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>enableSecurity</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.103">enableSecurity</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
-                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="setup--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setup</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.116">setup</a>()
-                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="verifyAllowed-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>verifyAllowed</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.142">verifyAllowed</a>(org.apache.hadoop.hbase.security.User&nbsp;user,
-                           <a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a>&nbsp;action)
-                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="verifyDenied-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>verifyDenied</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.154">verifyDenied</a>(org.apache.hadoop.hbase.security.User&nbsp;user,
-                          <a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a>&nbsp;action)
-                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="verifiedDeniedServiceException-org.apache.hadoop.hbase.security.User-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>verifiedDeniedServiceException</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.168">verifiedDeniedServiceException</a>(org.apache.hadoop.hbase.security.User&nbsp;user,
-                                            <a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a>&nbsp;action)
-                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="verifyAdminCheckForAction-org.apache.hadoop.hbase.security.access.TestAdminOnlyOperations.Action-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>verifyAdminCheckForAction</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.186">verifyAdminCheckForAction</a>(<a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access">TestAdminOnlyOperations.Action</a>&nbsp;action)
-                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="testEnableCatalogJanitor--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testEnableCatalogJanitor</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.193">testEnableCatalogJanitor</a>()
-                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="testRunCatalogJanitor--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testRunCatalogJanitor</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.198">testRunCatalogJanitor</a>()
-                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="testCleanerChoreRunning--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testCleanerChoreRunning</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.203">testCleanerChoreRunning</a>()
-                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="testRunCleanerChore--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testRunCleanerChore</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.208">testRunCleanerChore</a>()
-                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="testExecProcedure--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testExecProcedure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.213">testExecProcedure</a>()
-                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="testExecService--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testExecService</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.222">testExecService</a>()
-                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="testExecProcedureWithRet--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testExecProcedureWithRet</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.236">testExecProcedureWithRet</a>()
-                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="testNormalize--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testNormalize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.245">testNormalize</a>()
-                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="testSetNormalizerRunning--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testSetNormalizerRunning</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.250">testSetNormalizerRunning</a>()
-                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="testExecRegionServerService--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>testExecRegionServerService</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html#line.255">testExecRegionServerService</a>()
-                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestAdminOnlyOperations.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAccessController3.FaultyAccessController.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.html" target="_top">Frames</a></li>
-<li><a href="TestAdminOnlyOperations.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/TestCellACLs.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestCellACLs.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestCellACLs.html
index 607a4d6..6039e60 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestCellACLs.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestCellACLs.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAccessController3.FaultyAccessController.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -667,7 +667,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAdminOnlyOperations.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestAccessController3.FaultyAccessController.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html
index 0ca6897..79c581d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestCoprocessorWhitelistMasterObserver.TestRegionObserver.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html" target="_top">Frames</a></li>
@@ -875,7 +875,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/security/access/Secur
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestCoprocessorWhitelistMasterObserver.TestRegionObserver.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestNamespaceCommands.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html
new file mode 100644
index 0000000..1b9ce6a
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html
@@ -0,0 +1,231 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestRpcAccessChecks.Action (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestRpcAccessChecks.Action (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":6};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRpcAccessChecks.Action.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" target="_top">Frames</a></li>
+<li><a href="TestRpcAccessChecks.Action.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.security.access</div>
+<h2 title="Interface TestRpcAccessChecks.Action" class="title">Interface TestRpcAccessChecks.Action</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dd>
+</dl>
+<hr>
+<br>
+<pre>static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.155">TestRpcAccessChecks.Action</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html#run-org.apache.hadoop.hbase.client.Admin-">run</a></span>(org.apache.hadoop.hbase.client.Admin&nbsp;admin)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="run-org.apache.hadoop.hbase.client.Admin-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>run</h4>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html#line.156">run</a>(org.apache.hadoop.hbase.client.Admin&nbsp;admin)
+  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRpcAccessChecks.Action.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" target="_top">Frames</a></li>
+<li><a href="TestRpcAccessChecks.Action.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/b2e10744/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html
new file mode 100644
index 0000000..f35b4be
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html
@@ -0,0 +1,336 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestRpcAccessChecks.DummyCpService (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestRpcAccessChecks.DummyCpService (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRpcAccessChecks.DummyCpService.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" target="_top">Frames</a></li>
+<li><a href="TestRpcAccessChecks.DummyCpService.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.security.access</div>
+<h2 title="Class TestRpcAccessChecks.DummyCpService" class="title">Class TestRpcAccessChecks.DummyCpService</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.security.access.TestRpcAccessChecks.DummyCpService</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd>org.apache.hadoop.hbase.Coprocessor, org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html" title="class in org.apache.hadoop.hbase.security.access">TestRpcAccessChecks</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.html#line.111">TestRpcAccessChecks.DummyCpService</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 org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.Coprocessor">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.hadoop.hbase.Coprocessor</h3>
+<code>org.apache.hadoop.hbase.Coprocessor.State</code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.Coprocessor">
+<!--   -->
+</a>
+<h3>Fields inherited from interface&nbsp;org.apache.hadoop.hbase.Coprocessor</h3>
+<code>PRIORITY_HIGHEST, PRIORITY_LOWEST, PRIORITY_SYSTEM, PRIORITY_USER, VERSION</code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html#DummyCpService--">DummyCpService</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;com.google.protobuf.Service&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html#getServices--">getServices</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.coprocessor.MasterCoprocessor">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.coprocessor.MasterCoprocessor</h3>
+<code>getMasterObserver</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.coprocessor.RegionServerCoprocessor</h3>
+<code>getRegionServerObserver</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Coprocessor">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.Coprocessor</h3>
+<code>start, stop</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="DummyCpService--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>DummyCpService</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html#line.112">DummyCpService</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="getServices--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getServices</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;com.google.protobuf.Service&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html#line.115">getServices</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code>getServices</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.Coprocessor</code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRpcAccessChecks.DummyCpService.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.Action.html" title="interface in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html" title="class in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/security/access/TestRpcAccessChecks.DummyCpService.html" target="_top">Frames</a></li>
+<li><a href="TestRpcAccessChecks.DummyCpService.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>