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/20 14:53:33 UTC

[01/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 509df2d37 -> 648c9317b


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html
index d53bc55..0a7a7cf 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html
@@ -53,1004 +53,1036 @@
 <span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.45"></a>
 <span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ServerName;<a name="line.46"></a>
 <span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.Waiter;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.constraint.ConstraintException;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.net.Address;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.junit.Assert;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.Before;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.Rule;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Test;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.rules.TestName;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>public abstract class TestRSGroupsBase {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  protected static final Logger LOG = LoggerFactory.getLogger(TestRSGroupsBase.class);<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  @Rule<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  public TestName name = new TestName();<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  //shared<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  protected final static String groupPrefix = "Group";<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  protected final static String tablePrefix = "Group";<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  protected final static SecureRandom rand = new SecureRandom();<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  //shared, cluster type specific<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  protected static HBaseTestingUtility TEST_UTIL;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  protected static Admin admin;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  protected static HBaseCluster cluster;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  protected static RSGroupAdmin rsGroupAdmin;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  protected static HMaster master;<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public final static long WAIT_TIMEOUT = 60000*5;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  public final static int NUM_SLAVES_BASE = 4; //number of slaves for the smallest cluster<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public static int NUM_DEAD_SERVERS = 0;<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  // Per test variables<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  TableName tableName;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  @Before<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public void setup() {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    LOG.info(name.getMethodName());<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    tableName = TableName.valueOf(tablePrefix + "_" + name.getMethodName());<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>  protected RSGroupInfo addGroup(String groupName, int serverCount)<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      throws IOException, InterruptedException {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    RSGroupInfo defaultInfo = rsGroupAdmin.getRSGroupInfo(RSGroupInfo.DEFAULT_GROUP);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    assertTrue(defaultInfo != null);<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    assertTrue(defaultInfo.getServers().size() &gt;= serverCount);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    rsGroupAdmin.addRSGroup(groupName);<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>    Set&lt;Address&gt; set = new HashSet&lt;&gt;();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    for(Address server: defaultInfo.getServers()) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      if(set.size() == serverCount) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        break;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      }<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      set.add(server);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    rsGroupAdmin.moveServers(set, groupName);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    RSGroupInfo result = rsGroupAdmin.getRSGroupInfo(groupName);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    assertTrue(result.getServers().size() &gt;= serverCount);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    return result;<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>  void removeGroup(String groupName) throws IOException {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    RSGroupInfo RSGroupInfo = rsGroupAdmin.getRSGroupInfo(groupName);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    rsGroupAdmin.moveTables(RSGroupInfo.getTables(), RSGroupInfo.DEFAULT_GROUP);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    rsGroupAdmin.moveServers(RSGroupInfo.getServers(), RSGroupInfo.DEFAULT_GROUP);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    rsGroupAdmin.removeRSGroup(groupName);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  protected void deleteTableIfNecessary() throws IOException {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    for (HTableDescriptor desc : TEST_UTIL.getAdmin().listTables(tablePrefix+".*")) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      TEST_UTIL.deleteTable(desc.getTableName());<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><a name="line.132"></a>
-<span class="sourceLineNo">133</span>  protected void deleteNamespaceIfNecessary() throws IOException {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    for (NamespaceDescriptor desc : TEST_UTIL.getAdmin().listNamespaceDescriptors()) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      if(desc.getName().startsWith(tablePrefix)) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        admin.deleteNamespace(desc.getName());<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<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>  protected void deleteGroups() throws IOException {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    RSGroupAdmin groupAdmin =<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        new RSGroupAdminClient(TEST_UTIL.getConnection());<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    for(RSGroupInfo group: groupAdmin.listRSGroups()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      if(!group.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        groupAdmin.moveTables(group.getTables(), RSGroupInfo.DEFAULT_GROUP);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        groupAdmin.moveServers(group.getServers(), RSGroupInfo.DEFAULT_GROUP);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        groupAdmin.removeRSGroup(group.getName());<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      }<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  public Map&lt;TableName, List&lt;String&gt;&gt; getTableRegionMap() throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    Map&lt;TableName, List&lt;String&gt;&gt; map = Maps.newTreeMap();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    Map&lt;TableName, Map&lt;ServerName, List&lt;String&gt;&gt;&gt; tableServerRegionMap<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        = getTableServerRegionMap();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    for(TableName tableName : tableServerRegionMap.keySet()) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      if(!map.containsKey(tableName)) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        map.put(tableName, new LinkedList&lt;&gt;());<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      for(List&lt;String&gt; subset: tableServerRegionMap.get(tableName).values()) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        map.get(tableName).addAll(subset);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    return map;<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>  public Map&lt;TableName, Map&lt;ServerName, List&lt;String&gt;&gt;&gt; getTableServerRegionMap()<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      throws IOException {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    Map&lt;TableName, Map&lt;ServerName, List&lt;String&gt;&gt;&gt; map = Maps.newTreeMap();<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    ClusterMetrics status = TEST_UTIL.getHBaseClusterInterface().getClusterMetrics();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    for (Map.Entry&lt;ServerName, ServerMetrics&gt; entry : status.getLiveServerMetrics().entrySet()) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      ServerName serverName = entry.getKey();<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      for(RegionMetrics rl : entry.getValue().getRegionMetrics().values()) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        TableName tableName = null;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>        try {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          tableName = RegionInfo.getTable(rl.getRegionName());<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        } catch (IllegalArgumentException e) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>          LOG.warn("Failed parse a table name from regionname=" +<a name="line.179"></a>
-<span class="sourceLineNo">180</span>            Bytes.toStringBinary(rl.getRegionName()));<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          continue;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        if(!map.containsKey(tableName)) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          map.put(tableName, new TreeMap&lt;&gt;());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        if(!map.get(tableName).containsKey(serverName)) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>          map.get(tableName).put(serverName, new LinkedList&lt;&gt;());<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        map.get(tableName).get(serverName).add(rl.getNameAsString());<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>    return map;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>  @Test<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  public void testBogusArgs() throws Exception {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    assertNull(rsGroupAdmin.getRSGroupInfoOfTable(TableName.valueOf("nonexistent")));<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    assertNull(rsGroupAdmin.getRSGroupOfServer(Address.fromParts("bogus",123)));<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    assertNull(rsGroupAdmin.getRSGroupInfo("bogus"));<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>    try {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      rsGroupAdmin.removeRSGroup("bogus");<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      fail("Expected removing bogus group to fail");<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    } catch(ConstraintException ex) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      //expected<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>    try {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      rsGroupAdmin.moveTables(Sets.newHashSet(TableName.valueOf("bogustable")), "bogus");<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      fail("Expected move with bogus group to fail");<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    } catch(ConstraintException ex) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      //expected<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>    try {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      rsGroupAdmin.moveServers(Sets.newHashSet(Address.fromParts("bogus",123)), "bogus");<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      fail("Expected move with bogus group to fail");<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    } catch(ConstraintException ex) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      //expected<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>    try {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      admin.setBalancerRunning(true,true);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      rsGroupAdmin.balanceRSGroup("bogus");<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      admin.setBalancerRunning(false,true);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      fail("Expected move with bogus group to fail");<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    } catch(ConstraintException ex) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      //expected<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>  @Test<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  public void testCreateMultiRegion() throws IOException {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    byte[] end = {1,3,5,7,9};<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    byte[] start = {0,2,4,6,8};<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    byte[][] f = {Bytes.toBytes("f")};<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    TEST_UTIL.createTable(tableName, f,1,start,end,10);<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>  @Test<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  public void testCreateAndDrop() throws Exception {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    TEST_UTIL.createTable(tableName, Bytes.toBytes("cf"));<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    //wait for created table to be assigned<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      @Override<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      public boolean evaluate() throws Exception {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        return getTableRegionMap().get(tableName) != null;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    });<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    TEST_UTIL.deleteTable(tableName);<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">048</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.Waiter;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.constraint.ConstraintException;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.net.Address;<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.junit.Assert;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.junit.Before;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.junit.Rule;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.junit.Test;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.rules.TestName;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.Logger;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.slf4j.LoggerFactory;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>public abstract class TestRSGroupsBase {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  protected static final Logger LOG = LoggerFactory.getLogger(TestRSGroupsBase.class);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  @Rule<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public TestName name = new TestName();<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  //shared<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  protected final static String groupPrefix = "Group";<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  protected final static String tablePrefix = "Group";<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  protected final static SecureRandom rand = new SecureRandom();<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>  //shared, cluster type specific<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  protected static HBaseTestingUtility TEST_UTIL;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  protected static Admin admin;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  protected static HBaseCluster cluster;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  protected static RSGroupAdmin rsGroupAdmin;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  protected static HMaster master;<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  public final static long WAIT_TIMEOUT = 60000*5;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public final static int NUM_SLAVES_BASE = 4; //number of slaves for the smallest cluster<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public static int NUM_DEAD_SERVERS = 0;<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  // Per test variables<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  TableName tableName;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  @Before<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  public void setup() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    LOG.info(name.getMethodName());<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    tableName = TableName.valueOf(tablePrefix + "_" + name.getMethodName());<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>  protected RSGroupInfo addGroup(String groupName, int serverCount)<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      throws IOException, InterruptedException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    RSGroupInfo defaultInfo = rsGroupAdmin.getRSGroupInfo(RSGroupInfo.DEFAULT_GROUP);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    assertTrue(defaultInfo != null);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    assertTrue(defaultInfo.getServers().size() &gt;= serverCount);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    rsGroupAdmin.addRSGroup(groupName);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>    Set&lt;Address&gt; set = new HashSet&lt;&gt;();<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    for(Address server: defaultInfo.getServers()) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      if(set.size() == serverCount) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        break;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      }<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      set.add(server);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    rsGroupAdmin.moveServers(set, groupName);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    RSGroupInfo result = rsGroupAdmin.getRSGroupInfo(groupName);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    assertTrue(result.getServers().size() &gt;= serverCount);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return result;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  void removeGroup(String groupName) throws IOException {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    RSGroupInfo RSGroupInfo = rsGroupAdmin.getRSGroupInfo(groupName);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    rsGroupAdmin.moveTables(RSGroupInfo.getTables(), RSGroupInfo.DEFAULT_GROUP);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    rsGroupAdmin.moveServers(RSGroupInfo.getServers(), RSGroupInfo.DEFAULT_GROUP);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    rsGroupAdmin.removeRSGroup(groupName);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  protected void deleteTableIfNecessary() throws IOException {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    for (HTableDescriptor desc : TEST_UTIL.getAdmin().listTables(tablePrefix+".*")) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      TEST_UTIL.deleteTable(desc.getTableName());<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  }<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>  protected void deleteNamespaceIfNecessary() throws IOException {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    for (NamespaceDescriptor desc : TEST_UTIL.getAdmin().listNamespaceDescriptors()) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      if(desc.getName().startsWith(tablePrefix)) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        admin.deleteNamespace(desc.getName());<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      }<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><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  protected void deleteGroups() throws IOException {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    RSGroupAdmin groupAdmin =<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        new RSGroupAdminClient(TEST_UTIL.getConnection());<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    for(RSGroupInfo group: groupAdmin.listRSGroups()) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      if(!group.getName().equals(RSGroupInfo.DEFAULT_GROUP)) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        groupAdmin.moveTables(group.getTables(), RSGroupInfo.DEFAULT_GROUP);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        groupAdmin.moveServers(group.getServers(), RSGroupInfo.DEFAULT_GROUP);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        groupAdmin.removeRSGroup(group.getName());<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    }<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  }<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public Map&lt;TableName, List&lt;String&gt;&gt; getTableRegionMap() throws IOException {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    Map&lt;TableName, List&lt;String&gt;&gt; map = Maps.newTreeMap();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    Map&lt;TableName, Map&lt;ServerName, List&lt;String&gt;&gt;&gt; tableServerRegionMap<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        = getTableServerRegionMap();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    for(TableName tableName : tableServerRegionMap.keySet()) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      if(!map.containsKey(tableName)) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        map.put(tableName, new LinkedList&lt;&gt;());<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      }<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      for(List&lt;String&gt; subset: tableServerRegionMap.get(tableName).values()) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        map.get(tableName).addAll(subset);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    return map;<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>  public Map&lt;TableName, Map&lt;ServerName, List&lt;String&gt;&gt;&gt; getTableServerRegionMap()<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      throws IOException {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    Map&lt;TableName, Map&lt;ServerName, List&lt;String&gt;&gt;&gt; map = Maps.newTreeMap();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    ClusterMetrics status = TEST_UTIL.getHBaseClusterInterface().getClusterMetrics();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    for (Map.Entry&lt;ServerName, ServerMetrics&gt; entry : status.getLiveServerMetrics().entrySet()) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      ServerName serverName = entry.getKey();<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      for(RegionMetrics rl : entry.getValue().getRegionMetrics().values()) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        TableName tableName = null;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        try {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>          tableName = RegionInfo.getTable(rl.getRegionName());<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        } catch (IllegalArgumentException e) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          LOG.warn("Failed parse a table name from regionname=" +<a name="line.180"></a>
+<span class="sourceLineNo">181</span>            Bytes.toStringBinary(rl.getRegionName()));<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          continue;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        if(!map.containsKey(tableName)) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          map.put(tableName, new TreeMap&lt;&gt;());<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        }<a name="line.186"></a>
+<span class="sourceLineNo">187</span>        if(!map.get(tableName).containsKey(serverName)) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>          map.get(tableName).put(serverName, new LinkedList&lt;&gt;());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        map.get(tableName).get(serverName).add(rl.getNameAsString());<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    return map;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  }<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span>  @Test<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  public void testBogusArgs() throws Exception {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    assertNull(rsGroupAdmin.getRSGroupInfoOfTable(TableName.valueOf("nonexistent")));<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    assertNull(rsGroupAdmin.getRSGroupOfServer(Address.fromParts("bogus",123)));<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    assertNull(rsGroupAdmin.getRSGroupInfo("bogus"));<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    try {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      rsGroupAdmin.removeRSGroup("bogus");<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      fail("Expected removing bogus group to fail");<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    } catch(ConstraintException ex) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      //expected<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>    try {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      rsGroupAdmin.moveTables(Sets.newHashSet(TableName.valueOf("bogustable")), "bogus");<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      fail("Expected move with bogus group to fail");<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } catch(ConstraintException|TableNotFoundException ex) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      //expected<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>    try {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      rsGroupAdmin.moveServers(Sets.newHashSet(Address.fromParts("bogus",123)), "bogus");<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      fail("Expected move with bogus group to fail");<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    } catch(ConstraintException ex) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      //expected<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span>    try {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      admin.setBalancerRunning(true,true);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      rsGroupAdmin.balanceRSGroup("bogus");<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      admin.setBalancerRunning(false,true);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      fail("Expected move with bogus group to fail");<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    } catch(ConstraintException ex) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      //expected<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  @Test<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  public void testCreateMultiRegion() throws IOException {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    byte[] end = {1,3,5,7,9};<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    byte[] start = {0,2,4,6,8};<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    byte[][] f = {Bytes.toBytes("f")};<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    TEST_UTIL.createTable(tableName, f,1,start,end,10);<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 testCreateAndDrop() throws Exception {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    TEST_UTIL.createTable(tableName, Bytes.toBytes("cf"));<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    //wait for created table to be assigned<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      @Override<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      public boolean evaluate() throws Exception {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        return getTableRegionMap().get(tableName) != null;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    });<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    TEST_UTIL.deleteTable(tableName);<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 testSimpleRegionServerMove() throws IOException,<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      InterruptedException {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    int initNumGroups = rsGroupAdmin.listRSGroups().size();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    RSGroupInfo appInfo = addGroup(getGroupName(name.getMethodName()), 1);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    RSGroupInfo adminInfo = addGroup(getGroupName(name.getMethodName()), 1);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    RSGroupInfo dInfo = rsGroupAdmin.getRSGroupInfo(RSGroupInfo.DEFAULT_GROUP);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    Assert.assertEquals(initNumGroups + 2, rsGroupAdmin.listRSGroups().size());<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    assertEquals(1, adminInfo.getServers().size());<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    assertEquals(1, appInfo.getServers().size());<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    assertEquals(getNumServers() - 2, dInfo.getServers().size());<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    rsGroupAdmin.moveServers(appInfo.getServers(),<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        RSGroupInfo.DEFAULT_GROUP);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    rsGroupAdmin.removeRSGroup(appInfo.getName());<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    rsGroupAdmin.moveServers(adminInfo.getServers(),<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        RSGroupInfo.DEFAULT_GROUP);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    rsGroupAdmin.removeRSGroup(adminInfo.getName());<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    Assert.assertEquals(rsGroupAdmin.listRSGroups().size(), initNumGroups);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  // return the real number of region servers, excluding the master embedded region server in 2.0+<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  public int getNumServers() throws IOException {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    ClusterMetrics status =<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        admin.getClusterMetrics(EnumSet.of(Option.MASTER, Option.LIVE_SERVERS));<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    ServerName masterName = status.getMasterName();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    int count = 0;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    for (ServerName sn : status.getLiveServerMetrics().keySet()) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      if (!sn.equals(masterName)) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        count++;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    }<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    return count;<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>  @Test<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  public void testMoveServers() throws Exception {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    //create groups and assign servers<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    addGroup("bar", 3);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    rsGroupAdmin.addRSGroup("foo");<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>    RSGroupInfo barGroup = rsGroupAdmin.getRSGroupInfo("bar");<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    RSGroupInfo fooGroup = rsGroupAdmin.getRSGroupInfo("foo");<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    assertEquals(3, barGroup.getServers().size());<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    assertEquals(0, fooGroup.getServers().size());<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>    //test fail bogus server move<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    try {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      rsGroupAdmin.moveServers(Sets.newHashSet(Address.fromString("foo:9999")),"foo");<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      fail("Bogus servers shouldn't have been successfully moved.");<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    } catch(IOException ex) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      String exp = "Source RSGroup for server foo:9999 does not exist.";<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      String msg = "Expected '"+exp+"' in exception message: ";<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      assertTrue(msg+" "+ex.getMessage(), ex.getMessage().contains(exp));<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    }<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>    //test success case<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    LOG.info("moving servers "+barGroup.getServers()+" to group foo");<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    rsGroupAdmin.moveServers(barGroup.getServers(), fooGroup.getName());<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>    barGroup = rsGroupAdmin.getRSGroupInfo("bar");<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    fooGroup = rsGroupAdmin.getRSGroupInfo("foo");<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    assertEquals(0,barGroup.getServers().size());<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    assertEquals(3,fooGroup.getServers().size());<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>    LOG.info("moving servers "+fooGroup.getServers()+" to group default");<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    rsGroupAdmin.moveServers(fooGroup.getServers(), RSGroupInfo.DEFAULT_GROUP);<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      @Override<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      public boolean evaluate() throws Exception {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        return getNumServers() ==<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        rsGroupAdmin.getRSGroupInfo(RSGroupInfo.DEFAULT_GROUP).getServers().size();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      }<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    });<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    fooGroup = rsGroupAdmin.getRSGroupInfo("foo");<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    assertEquals(0,fooGroup.getServers().size());<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>    //test group removal<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    LOG.info("Remove group "+barGroup.getName());<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    rsGroupAdmin.removeRSGroup(barGroup.getName());<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    Assert.assertEquals(null, rsGroupAdmin.getRSGroupInfo(barGroup.getName()));<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    LOG.info("Remove group "+fooGroup.getName());<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    rsGroupAdmin.removeRSGroup(fooGroup.getName());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    Assert.assertEquals(null, rsGroupAdmin.getRSGroupInfo(fooGroup.getName()));<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  @Test<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  public void testTableMoveTruncateAndDrop() throws Exception {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    final byte[] familyNameBytes = Bytes.toBytes("f");<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    String newGroupName = getGroupName(name.getMethodName());<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    final RSGroupInfo newGroup = addGroup(newGroupName, 2);<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>    TEST_UTIL.createMultiRegionTable(tableName, familyNameBytes, 5);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      @Override<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      public boolean evaluate() throws Exception {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        List&lt;String&gt; regions = getTableRegionMap().get(tableName);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (regions == null) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          return false;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>        return getTableRegionMap().get(tableName).size() &gt;= 5;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      }<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>    RSGroupInfo tableGrp = rsGroupAdmin.getRSGroupInfoOfTable(tableName);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    assertTrue(tableGrp.getName().equals(RSGroupInfo.DEFAULT_GROUP));<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>    //change table's group<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    LOG.info("Moving table "+tableName+" to "+newGroup.getName());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    rsGroupAdmin.moveTables(Sets.newHashSet(tableName), newGroup.getName());<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>    //verify group change<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    Assert.assertEquals(newGroup.getName(),<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        rsGroupAdmin.getRSGroupInfoOfTable(tableName).getName());<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>    TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      @Override<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      public boolean evaluate() throws Exception {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        Map&lt;ServerName, List&lt;String&gt;&gt; serverMap = getTableServerRegionMap().get(tableName);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        int count = 0;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>        if (serverMap != null) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          for (ServerName rs : serverMap.keySet()) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>            if (newGroup.containsServer(rs.getAddress())) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>              count += serverMap.get(rs).size();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>            }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        }<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        return count == 5;<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><a name="line.386"></a>
-<span class="sourceLineNo">387</span>    //test truncate<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    admin.disableTable(tableName);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    admin.truncateTable(tableName, true);<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    Assert.assertEquals(1, rsGroupAdmin.getRSGroupInfo(newGroup.getName()).getTables().size());<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    Assert.assertEquals(tableName, rsGroupAdmin.getRSGroupInfo(<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        newGroup.getName()).getTables().first());<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    //verify removed table is removed from group<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    TEST_UTIL.deleteTable(tableName);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    Assert.assertEquals(0, rsGroupAdmin.getRSGroupInfo(newGroup.getName()).getTables().size());<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>  @Test<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  public void testGroupBalance() throws Exception {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    LOG.info(name.getMethodName());<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    String newGroupName = getGroupName(name.getMethodName());<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    final RSGroupInfo newGroup = addGroup(newGroupName, 3);<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>    final TableName tableName = TableName.valueOf(tablePrefix+"_ns", name.getMethodName());<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    admin.createNamespace(<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        NamespaceDescriptor.create(tableName.getNamespaceAsString())<a name="line.407"></a>
-<span class="sourceLineNo">408</span>            .addConfiguration(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP, newGroupName).build());<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    final byte[] familyNameBytes = Bytes.toBytes("f");<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    final HTableDescriptor desc = new HTableDescriptor(tableName);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    desc.addFamily(new HColumnDescriptor("f"));<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    byte [] startKey = Bytes.toBytes("aaaaa");<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    byte [] endKey = Bytes.toBytes("zzzzz");<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    admin.createTable(desc, startKey, endKey, 6);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      @Override<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      public boolean evaluate() throws Exception {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        List&lt;String&gt; regions = getTableRegionMap().get(tableName);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        if (regions == null) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          return false;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        return regions.size() &gt;= 6;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      }<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    });<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    //make assignment uneven, move all regions to one server<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Map&lt;ServerName,List&lt;String&gt;&gt; assignMap =<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        getTableServerRegionMap().get(tableName);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    final ServerName first = assignMap.entrySet().iterator().next().getKey();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    for(RegionInfo region: admin.getTableRegions(tableName)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      if(!assignMap.get(first).contains(region.getRegionNameAsString())) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        admin.move(region.getEncodedNameAsBytes(), Bytes.toBytes(first.getServerName()));<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_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      public boolean evaluate() throws Exception {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        Map&lt;ServerName, List&lt;String&gt;&gt; map = getTableServerRegionMap().get(tableName);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        if (map == null) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>          return true;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        }<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        List&lt;String&gt; regions = map.get(first);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>        if (regions == null) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          return true;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        return regions.size() &gt;= 6;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    });<a name="line.448"></a>
-<span class="sourceLineNo">449</span><a name="line.449"></a>
-<span class="sourceLineNo">450</span>    //balance the other group and make sure it doesn't affect the new group<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    admin.setBalancerRunning(true,true);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    rsGroupAdmin.balanceRSGroup(RSGroupInfo.DEFAULT_GROUP);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    assertEquals(6, getTableServerRegionMap().get(tableName).get(first).size());<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span>    //disable balance, balancer will not be run and return false<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    admin.setBalancerRunning(false,true);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    assertFalse(rsGroupAdmin.balanceRSGroup(newGroupName));<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    assertEquals(6, getTableServerRegionMap().get(tableName).get(first).size());<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>    //enable balance<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    admin.setBalancerRunning(true,true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    rsGroupAdmin.balanceRSGroup(newGroupName);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      @Override<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      public boolean evaluate() throws Exception {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        for (List&lt;String&gt; regions : getTableServerRegionMap().get(tableName).values()) {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          if (2 != regions.size()) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>            return false;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>        }<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        return true;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    });<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    admin.setBalancerRunning(false,true);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>  @Test<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  public void testRegionMove() throws Exception {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    final RSGroupInfo newGroup = addGroup(getGroupName(name.getMethodName()), 1);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    final byte[] familyNameBytes = Bytes.toBytes("f");<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    // All the regions created below will be assigned to the default group.<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    TEST_UTIL.createMultiRegionTable(tableName, familyNameBytes, 6);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      @Override<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      public boolean evaluate() throws Exception {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        List&lt;String&gt; regions = getTableRegionMap().get(tableName);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        if (regions == null) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          return false;<a name="line.488"></a>
-<span class="sourceLineNo">489</span>        }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>        return getTableRegionMap().get(tableName).size() &gt;= 6;<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    });<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>    //get target region to move<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    Map&lt;ServerName,List&lt;String&gt;&gt; assignMap =<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        getTableServerRegionMap().get(tableName);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    String targetRegion = null;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    for(ServerName server : assignMap.keySet()) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      targetRegion = assignMap.get(server).size() &gt; 0 ? assignMap.get(server).get(0) : null;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      if(targetRegion != null) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        break;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    //get server which is not a member of new group<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    ServerName targetServer = null;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    for (ServerName server : admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))<a name="line.507"></a>
-<span class="sourceLineNo">508</span>                                  .getLiveServerMetrics().keySet()) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      if (!newGroup.containsServer(server.getAddress())) {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        targetServer = server;<a name="line.510"></a>
-<span class="sourceLineNo">511</span>        break;<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      }<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>    final AdminProtos.AdminService.BlockingInterface targetRS =<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      ((ClusterConnection) admin.getConnection()).getAdmin(targetServer);<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>    //move target server to group<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    rsGroupAdmin.moveServers(Sets.newHashSet(targetServer.getAddress()),<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        newGroup.getName());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      public boolean evaluate() throws Exception {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        return ProtobufUtil.getOnlineRegions(targetRS).size() &lt;= 0;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    });<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    // Lets move this region to the new group.<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    TEST_UTIL.getAdmin().move(Bytes.toBytes(RegionInfo.encodeRegionName(<a name="line.529"></a>
-<span class="sourceLineNo">530</span>            Bytes.toBytes(targetRegion))), Bytes.toBytes(targetServer.getServerName()));<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      @Override<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      public boolean evaluate() throws Exception {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        return<a name="line.534"></a>
-<span class="sourceLineNo">535</span>            getTableRegionMap().get(tableName) != null &amp;&amp;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>                getTableRegionMap().get(tableName).size() == 6 &amp;&amp;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>                admin.getClusterMetrics(EnumSet.of(Option.REGIONS_IN_TRANSITION))<a name="line.537"></a>
-<span class="sourceLineNo">538</span>                     .getRegionStatesInTransition().size() &lt; 1;<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    });<a name="line.540"></a>
-<span class="sourceLineNo">541</span><a name="line.541"></a>
-<span class="sourceLineNo">542</span>    //verify that targetServer didn't open it<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    for (RegionInfo region: ProtobufUtil.getOnlineRegions(targetRS)) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      if (targetRegion.equals(region.getRegionNameAsString())) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>        fail("Target server opened region");<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>  @Test<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  public void testFailRemoveGroup() throws IOException, InterruptedException {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    int initNumGroups = rsGroupAdmin.listRSGroups().size();<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    addGroup("bar", 3);<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    TEST_UTIL.createTable(tableName, Bytes.toBytes("f"));<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    rsGroupAdmin.moveTables(Sets.newHashSet(tableName), "bar");<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    RSGroupInfo barGroup = rsGroupAdmin.getRSGroupInfo("bar");<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    //group is not empty therefore it should fail<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    try {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      rsGroupAdmin.removeRSGroup(barGroup.getName());<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      fail("Expected remove group to fail");<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    } catch(IOException e) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    }<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    //group cannot lose all it's servers therefore it should fail<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      rsGroupAdmin.moveServers(barGroup.getServers(), RSGroupInfo.DEFAULT_GROUP);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      fail("Expected move servers to fail");<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    } catch(IOException e) {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>    rsGroupAdmin.moveTables(barGroup.getTables(), RSGroupInfo.DEFAULT_GROUP);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    try {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      rsGroupAdmin.removeRSGroup(barGroup.getName());<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      fail("Expected move servers to fail");<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    } catch(IOException e) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>    rsGroupAdmin.moveServers(barGroup.getServers(), RSGroupInfo.DEFAULT_GROUP);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    rsGroupAdmin.removeRSGroup(barGroup.getName());<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>    Assert.assertEquals(initNumGroups, rsGroupAdmin.listRSGroups().size());<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>  @Test<a name="line.583"></a>
-<span class="sourceLineNo">584</span>  public void testKillRS() throws Exception {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    RSGroupInfo appInfo = addGroup("appInfo", 1);<a name="line.585"></a>
-<span class="sourceLineNo">586</span><a name="line.586"></a>
-<span class="sourceLineNo">587</span>    final TableName tableName = TableName.valueOf(tablePrefix+"_ns", name.getMethodName());<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    admin.createNamespace(<a name="line.588"></a>
-<span class="sourceLineNo">589</span>        NamespaceDescriptor.create(tableName.getNamespaceAsString())<a name="line.589"></a>
-<span class="sourceLineNo">590</span>            .addConfiguration(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP, appInfo.getName()).build());<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    final HTableDescriptor desc = new HTableDescriptor(tableName);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    desc.addFamily(new HColumnDescriptor("f"));<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    admin.createTable(desc);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    //wait for created table to be assigned<a name="line.594"></a>
-<span class="sourceLineNo">595</span>    TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      @Override<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      public boolean evaluate() throws Exception {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        return getTableRegionMap().get(desc.getTableName()) != null;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      }<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    });<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>    ServerName targetServer = ServerName.parseServerName(<a name="line.602"></a>
-<span class="sourceLineNo">603</span>        appInfo.getServers().iterator().next().toString());<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    AdminProtos.AdminService.BlockingInterface targetRS =<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      ((ClusterConnection) admin.getConnection()).getAdmin(targetServer);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    RegionInfo targetRegion = ProtobufUtil.getOnlineRegions(targetRS).get(0);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    Assert.assertEquals(1, ProtobufUtil.getOnlineRegions(targetRS).size());<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>    try {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      //stopping may cause an exception<a name="line.610"></a>
-<span class="sourceLineNo">611</span>      //due to the connection loss<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      targetRS.stopServer(null,<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          AdminProtos.StopServerRequest.newBuilder().setReason("Die").build());<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    } catch(Exception e) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    assertFalse(cluster.getClusterMetrics().getLiveServerMetrics().containsKey(targetServer));<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>    //wait for created table to be assigned<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      @Override<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      public boolean evaluate() throws Exception {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>        return cluster.getClusterMetrics().getRegionStatesInTransition().isEmpty();<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      }<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    });<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    Set&lt;Address&gt; newServers = Sets.newHashSet();<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    newServers.add(<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        rsGroupAdmin.getRSGroupInfo(RSGroupInfo.DEFAULT_GROUP).getServers().iterator().next());<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    rsGroupAdmin.moveServers(newServers, appInfo.getName());<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>    //Make sure all the table's regions get reassigned<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    //disabling the table guarantees no conflicting assign/unassign (ie SSH) happens<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    admin.disableTable(tableName);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    admin.enableTable(tableName);<a name="line.633"></a>
-<span class="sourceLineNo">634</span><a name="line.634"></a>
-<span class="sourceLineNo">635</span>    //wait for region to be assigned<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      @Override<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      public boolean evaluate() throws Exception {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        return cluster.getClusterMetrics().getRegionStatesInTransition().isEmpty();<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><a name="line.642"></a>
-<span class="sourceLineNo">643</span>    targetServer = ServerName.parseServerName(<a name="line.643"></a>
-<span class="sourceLineNo">644</span>        newServers.iterator().next().toString());<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    targetRS =<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      ((ClusterConnection) admin.getConnection()).getAdmin(targetServer);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    Assert.assertEquals(1, ProtobufUtil.getOnlineRegions(targetRS).size());<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    Assert.assertEquals(tableName,<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        ProtobufUtil.getOnlineRegions(targetRS).get(0).getTable());<a name="line.649"></a>
-<span class="sourceLineNo">650</span>  }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  @Test<a name="line.652"></a>
-<span class="sourceLineNo">653</span>  public void testValidGroupNames() throws IOException {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    String[] badNames = {"foo*","foo@","-"};<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    String[] goodNames = {"foo_123"};<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
-<span class="sourceLineNo">657</span>    for(String entry: badNames) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      try {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        rsGroupAdmin.addRSGroup(entry);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>        fail("Expected a constraint exception for: "+entry);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      } catch(ConstraintException ex) {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>        //expected<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    }<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span>    for(String entry: goodNames) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      rsGroupAdmin.addRSGroup(entry);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>  }<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>  private String getGroupName(String baseName) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    return groupPrefix+"_"+baseName+"_"+rand.nextInt(Integer.MAX_VALUE);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>  }<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>  @Test<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  public void testMultiTableMove() throws Exception {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    final TableName tableNameA = TableName.valueOf(tablePrefix + name.getMethodName() + "A");<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    final TableName tableNameB = TableName.valueOf(tablePrefix + name.getMethodName() + "B");<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    final byte[] familyNameBytes = Bytes.toBytes("f");<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    String newGroupName = getGroupName(name.getMethodName());<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    final RSGroupInfo newGroup = addGroup(newGroupName, 1);<a name="line.681"></a>
-<span class="sourceLineNo">682</span><a name="line.682"></a>
-<span class="sourceLineNo">683</span>    TEST_UTIL.createTable(tableNameA, familyNameBytes);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    TEST_UTIL.createTable(tableNameB, familyNameBytes);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      @Override<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      public boolean evaluate() throws Exception {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        List&lt;String&gt; regionsA = getTableRegionMap().get(tableNameA);<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        if (regionsA == null) {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>          return false;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>        }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>        List&lt;String&gt; regionsB = getTableRegionMap().get(tableNameB);<a name="line.693"></a>
-<span class="sourceLineNo">694</span>        if (regionsB == null) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>          return false;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        }<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span>        return getTableRegionMap().get(tableNameA).size() &gt;= 1<a name="line.698"></a>
-<span class="sourceLineNo">699</span>                &amp;&amp; getTableRegionMap().get(tableNameB).size() &gt;= 1;<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    });<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>    RSGroupInfo tableGrpA = rsGroupAdmin.getRSGroupInfoOfTable(tableNameA);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    assertTrue(tableGrpA.getName().equals(RSGroupInfo.DEFAULT_GROUP));<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span>    RSGroupInfo tableGrpB = rsGroupAdmin.getRSGroupInfoOfTable(tableNameB);<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    assertTrue(tableGrpB.getName().equals(RSGroupInfo.DEFAULT_GROUP));<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    //change table's group<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    LOG.info("Moving table [" + tableNameA + "," + tableNameB + "] to " + newGroup.getName());<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    rsGroupAdmin.moveTables(Sets.newHashSet(tableNameA, tableNameB), newGroup.getName());<a name="line.710"></a>
-<span class="sourceLineNo">711</span><a name="line.711"></a>
-<span class="sourceLineNo">712</span>    //verify group change<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    Assert.assertEquals(newGroup.getName(),<a name="line.713"></a>
-<span class="sourceLineNo">714</span>            rsGroupAdmin.getRSGroupInfoOfTable(tableNameA).getName());<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>    Assert.assertEquals(newGroup.getName(),<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            rsGroupAdmin.getRSGroupInfoOfTable(tableNameB).getName());<a name="line.717"></a>
-<span class="sourceLineNo">718</span><a name="line.718"></a>
-<span class="sourceLineNo">719</span>    //verify tables' not exist in old group<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    Set&lt;TableName&gt; DefaultTables = rsGroupAdmin.getRSGroupInfo(RSGroupInfo.DEFAULT_GROUP)<a name="line.720"></a>
-<span class="sourceLineNo">721</span>            .getTables();<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    assertFalse(DefaultTables.contains(tableNameA));<a name="line.722"></a>
-<span class="sourceLineNo">723</span>    assertFalse(DefaultTables.contains(tableNameB));<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>    //verify tables' exist in new group<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    Set&lt;TableName&gt; newGroupTables = rsGroupAdmin.getRSGroupInfo(newGroupName).getTables();<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    assertTrue(newGroupTables.contains(tableNameA));<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    assertTrue(newGroupTables.contains(tableNameB));<a name="line.728"></a>
-<span class="sourceLineNo">729</span>  }<a name="line.729"></a>
-<span class="sourceLineNo">730</span><a name="line.730"></a>
-<span class="sourceLineNo">731</span>  @Test<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  public void testDisabledTableMove() throws Exception {<a name

<TRUNCATED>

[14/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HRegion.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HRegion.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HRegion.html
index 90598a0..0cc6a93 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HRegion.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HRegion.html
@@ -354,12 +354,12 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreOfRegionReplica-java.util.SortedMap-java.util.Set-">getBiggestMemStoreOfRegionReplica</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;regionsBySize,
+<td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreOfRegionReplica-java.util.SortedMap-java.util.Set-">getBiggestMemStoreOfRegionReplica</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;regionsBySize,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;excludedRegions)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreRegion-java.util.SortedMap-java.util.Set-boolean-">getBiggestMemStoreRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;regionsBySize,
+<td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreRegion-java.util.SortedMap-java.util.Set-boolean-">getBiggestMemStoreRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;regionsBySize,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;excludedRegions,
                         boolean&nbsp;checkStoreFileCount)</code>&nbsp;</td>
 </tr>
@@ -526,11 +526,11 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;</code></td>
+<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">HRegionServer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCopyOfOnlineRegionsSortedByOffHeapSize--">getCopyOfOnlineRegionsSortedByOffHeapSize</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;</code></td>
+<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">HRegionServer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCopyOfOnlineRegionsSortedByOnHeapSize--">getCopyOfOnlineRegionsSortedByOnHeapSize</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
@@ -576,6 +576,12 @@
 <td class="colLast"><span class="typeNameLabel">HRegionServer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-">addRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">HRegionServer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#addRegion-java.util.SortedMap-org.apache.hadoop.hbase.regionserver.HRegion-long-">addRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;sortedRegions,
+         <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+         long&nbsp;size)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a></code></td>
 <td class="colLast"><span class="typeNameLabel">RSRpcServices.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#addScanner-java.lang.String-org.apache.hadoop.hbase.regionserver.RegionScanner-org.apache.hadoop.hbase.regionserver.Shipper-org.apache.hadoop.hbase.regionserver.HRegion-boolean-">addScanner</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;scannerName,
           <a href="../../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;s,
@@ -583,7 +589,7 @@
           <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
           boolean&nbsp;needCursor)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></code></td>
 <td class="colLast"><span class="typeNameLabel">RSRpcServices.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#append-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.quotas.OperationQuota-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto-org.apache.hadoop.hbase.CellScanner-long-org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement-">append</a></span>(<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/quotas/OperationQuota.html" title="interface in org.apache.hadoop.hbase.quotas">OperationQuota</a>&nbsp;quota,
@@ -594,7 +600,7 @@
 <div class="block">Execute an append mutation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">RSRpcServices.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#checkAndRowMutate-org.apache.hadoop.hbase.regionserver.HRegion-java.util.List-org.apache.hadoop.hbase.CellScanner-byte:A-byte:A-byte:A-org.apache.hadoop.hbase.CompareOperator-org.apache.hadoop.hbase.filter.ByteArrayComparable-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder-org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement-">checkAndRowMutate</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                  <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,
@@ -609,85 +615,85 @@
 <div class="block">Mutate a list of rows atomically.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">RSRpcServices.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#checkCellSizeLimit-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.client.Mutation-">checkCellSizeLimit</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
                   <a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;m)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">SecureBulkLoadManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#cleanupBulkLoad-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest-">cleanupBulkLoad</a></span>(<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.CleanupBulkLoadRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">RSRpcServices.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#closeScanner-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.regionserver.RegionScanner-java.lang.String-org.apache.hadoop.hbase.ipc.RpcCallContext-">closeScanner</a></span>(<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)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">KeyPrefixRegionSplitPolicy.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyPrefixRegionSplitPolicy.html#configureForRegion-org.apache.hadoop.hbase.regionserver.HRegion-">configureForRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionSplitPolicy.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#configureForRegion-org.apache.hadoop.hbase.regionserver.HRegion-">configureForRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>
 <div class="block">Upon construction, this method will be called with the region
  to be governed.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">DelimitedKeyPrefixRegionSplitPolicy.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/DelimitedKeyPrefixRegionSplitPolicy.html#configureForRegion-org.apache.hadoop.hbase.regionserver.HRegion-">configureForRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">IncreasingToUpperBoundRegionSplitPolicy.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.html#configureForRegion-org.apache.hadoop.hbase.regionserver.HRegion-">configureForRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">FlushAllLargeStoresPolicy.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/FlushAllLargeStoresPolicy.html#configureForRegion-org.apache.hadoop.hbase.regionserver.HRegion-">configureForRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">FlushPolicy.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/FlushPolicy.html#configureForRegion-org.apache.hadoop.hbase.regionserver.HRegion-">configureForRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>
 <div class="block">Upon construction, this method will be called with the region to be governed.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">ConstantSizeRegionSplitPolicy.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ConstantSizeRegionSplitPolicy.html#configureForRegion-org.apache.hadoop.hbase.regionserver.HRegion-">configureForRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">FlushNonSloppyStoresFirstPolicy.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/FlushNonSloppyStoresFirstPolicy.html#configureForRegion-org.apache.hadoop.hbase.regionserver.HRegion-">configureForRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">BusyRegionSplitPolicy.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/BusyRegionSplitPolicy.html#configureForRegion-org.apache.hadoop.hbase.regionserver.HRegion-">configureForRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/FlushPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">FlushPolicy</a></code></td>
 <td class="colLast"><span class="typeNameLabel">FlushPolicyFactory.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/FlushPolicyFactory.html#create-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.conf.Configuration-">create</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
       org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <div class="block">Create the FlushPolicy configured for the given table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">RegionSplitPolicy</a></code></td>
 <td class="colLast"><span class="typeNameLabel">RegionSplitPolicy.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html#create-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.conf.Configuration-">create</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
       org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <div class="block">Create the RegionSplitPolicy configured for the given table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad</code></td>
 <td class="colLast"><span class="typeNameLabel">HRegionServer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createRegionLoad-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad.Builder-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.Builder-">createRegionLoad</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
                 org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad.Builder&nbsp;regionLoadBldr,
                 org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.Builder&nbsp;regionSpecifier)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">RSRpcServices.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#doAtomicBatchOp-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.quotas.OperationQuota-java.util.List-org.apache.hadoop.hbase.CellScanner-org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement-">doAtomicBatchOp</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder&nbsp;builder,
                <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
@@ -696,7 +702,7 @@
                <a href="../../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cells,
                <a href="../../../../../../org/apache/hadoop/hbase/quotas/ActivePolicyEnforcement.html" title="class in org.apache.hadoop.hbase.quotas">ActivePolicyEnforcement</a>&nbsp;spaceQuotaEnforcement)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">RSRpcServices.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#doBatchOp-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.quotas.OperationQuota-java.util.List-org.apache.hadoop.hbase.CellScanner-org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement-boolean-">doBatchOp</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder&nbsp;builder,
          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
@@ -708,7 +714,7 @@
 <div class="block">Execute a list of Put/Delete mutations.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">RSRpcServices.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#doNonAtomicBatchOp-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.quotas.OperationQuota-java.util.List-org.apache.hadoop.hbase.CellScanner-org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement-">doNonAtomicBatchOp</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder&nbsp;builder,
                   <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
@@ -717,7 +723,7 @@
                   <a href="../../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cells,
                   <a href="../../../../../../org/apache/hadoop/hbase/quotas/ActivePolicyEnforcement.html" title="class in org.apache.hadoop.hbase.quotas">ActivePolicyEnforcement</a>&nbsp;spaceQuotaEnforcement)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/CellScannable.html" title="interface in org.apache.hadoop.hbase">CellScannable</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RSRpcServices.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#doNonAtomicRegionMutation-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.quotas.OperationQuota-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction-org.apache.hadoop.hbase.CellScanner-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder-java.util.List-long-org.apache.hadoop.hbase.regionserver.RSRpcServices.RegionScannersCloseCallBack-org.apache.hadoop.hbase.ipc.RpcCallContext-org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement-">doNonAtomicRegionMutation</a></span>(<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/quotas/OperationQuota.html" title="interface in org.apache.hadoop.hbase.quotas">OperationQuota</a>&nbsp;quota,
@@ -733,7 +739,7 @@
  done, add an instance of a <code>ClientProtos.ResultOrException</code> that corresponds to each Mutation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#doProcessRowWithTimeout-org.apache.hadoop.hbase.regionserver.RowProcessor-long-org.apache.hadoop.hbase.regionserver.HRegion-java.util.List-org.apache.hadoop.hbase.wal.WALEdit-long-">doProcessRowWithTimeout</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
                        long&nbsp;now,
@@ -742,7 +748,7 @@
                        <a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit,
                        long&nbsp;timeout)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]</code></td>
 <td class="colLast"><span class="typeNameLabel">RSRpcServices.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#doReplayBatchOp-org.apache.hadoop.hbase.regionserver.HRegion-java.util.List-long-">doReplayBatchOp</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.MutationReplay</a>&gt;&nbsp;mutations,
@@ -750,12 +756,12 @@
 <div class="block">Execute a list of Put/Delete mutations.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private com.google.protobuf.Message</code></td>
 <td class="colLast"><span class="typeNameLabel">RSRpcServices.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#execServiceOnRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceCall-">execServiceOnRegion</a></span>(<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)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#flushRegion-org.apache.hadoop.hbase.regionserver.HRegion-boolean-boolean-org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker-">flushRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
            boolean&nbsp;emergencyFlush,
@@ -764,26 +770,26 @@
 <div class="block">Flush a region.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></code></td>
 <td class="colLast"><span class="typeNameLabel">RSRpcServices.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#get-org.apache.hadoop.hbase.client.Get-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.regionserver.RSRpcServices.RegionScannersCloseCallBack-org.apache.hadoop.hbase.ipc.RpcCallContext-">get</a></span>(<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)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static long</code></td>
 <td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getMemStoreDataSize-org.apache.hadoop.hbase.regionserver.HRegion-">getMemStoreDataSize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static long</code></td>
 <td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getMemStoreHeapSize-org.apache.hadoop.hbase.regionserver.HRegion-">getMemStoreHeapSize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static long</code></td>
 <td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getMemStoreOffHeapSize-org.apache.hadoop.hbase.regionserver.HRegion-">getMemStoreOffHeapSize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></code></td>
 <td class="colLast"><span class="typeNameLabel">RSRpcServices.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#increment-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.quotas.OperationQuota-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto-org.apache.hadoop.hbase.CellScanner-long-org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement-">increment</a></span>(<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/quotas/OperationQuota.html" title="interface in org.apache.hadoop.hbase.quotas">OperationQuota</a>&nbsp;quota,
@@ -794,43 +800,43 @@
 <div class="block">Execute an increment mutation.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">HRegion.RegionScannerImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#initializeKVHeap-java.util.List-java.util.List-org.apache.hadoop.hbase.regionserver.HRegion-">initializeKVHeap</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;joinedScanners,
                 <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">ReversedRegionScannerImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.html#initializeKVHeap-java.util.List-java.util.List-org.apache.hadoop.hbase.regionserver.HRegion-">initializeKVHeap</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;joinedScanners,
                 <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
 <td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#openHRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.util.CancelableProgressable-">openHRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;other,
            <a href="../../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)</code>
 <div class="block">Useful when reopening a closed region (normally for unit tests)</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">BaseRowProcessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/BaseRowProcessor.html#postBatchMutate-org.apache.hadoop.hbase.regionserver.HRegion-">postBatchMutate</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RowProcessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html#postBatchMutate-org.apache.hadoop.hbase.regionserver.HRegion-">postBatchMutate</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 <div class="block">The hook to be executed after the process() and applying the Mutations to region.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">BaseRowProcessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/BaseRowProcessor.html#postProcess-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.wal.WALEdit-boolean-">postProcess</a></span>(<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/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit,
            boolean&nbsp;success)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RowProcessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html#postProcess-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.wal.WALEdit-boolean-">postProcess</a></span>(<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/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit,
@@ -839,12 +845,12 @@
 <div class="block">The hook to be executed after process() and applying the Mutations to region.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">BaseRowProcessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/BaseRowProcessor.html#preBatchMutate-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.wal.WALEdit-">preBatchMutate</a></span>(<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/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RowProcessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html#preBatchMutate-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.wal.WALEdit-">preBatchMutate</a></span>(<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/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit)</code>
@@ -852,17 +858,17 @@
 <div class="block">The hook to be executed after the process() but before applying the Mutations to region.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><span class="typeNameLabel">SecureBulkLoadManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#prepareBulkLoad-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest-">prepareBulkLoad</a></span>(<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.PrepareBulkLoadRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">BaseRowProcessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/BaseRowProcessor.html#preProcess-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.wal.WALEdit-">preProcess</a></span>(<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/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RowProcessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html#preProcess-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.wal.WALEdit-">preProcess</a></span>(<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/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit)</code>
@@ -870,7 +876,7 @@
 <div class="block">The hook to be executed before process().</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RowProcessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html#process-long-org.apache.hadoop.hbase.regionserver.HRegion-java.util.List-org.apache.hadoop.hbase.wal.WALEdit-">process</a></span>(long&nbsp;now,
        <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
@@ -880,19 +886,19 @@
 <div class="block">HRegion handles the locks and MVCC and invokes this method properly.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">MutableOnlineRegions.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MutableOnlineRegions.html#removeRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.ServerName-">removeRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
             <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;destination)</code>
 <div class="block">Removes the given Region from the list of onlineRegions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">HRegionServer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#removeRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.ServerName-">removeRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
             <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;destination)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">CompactSplit.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html#requestCompaction-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.regionserver.HStore-java.lang.String-int-org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker-org.apache.hadoop.hbase.security.User-">requestCompaction</a></span>(<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/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store,
@@ -901,7 +907,7 @@
                  <a href="../../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionLifeCycleTracker</a>&nbsp;tracker,
                  <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">CompactSplit.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html#requestCompaction-org.apache.hadoop.hbase.regionserver.HRegion-java.lang.String-int-org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker-org.apache.hadoop.hbase.security.User-">requestCompaction</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                  <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;why,
@@ -909,7 +915,7 @@
                  <a href="../../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionLifeCycleTracker</a>&nbsp;tracker,
                  <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">CompactSplit.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html#requestCompactionInternal-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.regionserver.HStore-java.lang.String-int-boolean-org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker-org.apache.hadoop.hbase.regionserver.CompactSplit.CompactionCompleteTracker-org.apache.hadoop.hbase.security.User-">requestCompactionInternal</a></span>(<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/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store,
@@ -920,7 +926,7 @@
                          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.CompactionCompleteTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">CompactSplit.CompactionCompleteTracker</a>&nbsp;completeTracker,
                          <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">CompactSplit.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html#requestCompactionInternal-org.apache.hadoop.hbase.regionserver.HRegion-java.lang.String-int-boolean-org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker-org.apache.hadoop.hbase.regionserver.CompactSplit.CompactionCompleteTracker-org.apache.hadoop.hbase.security.User-">requestCompactionInternal</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                          <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;why,
@@ -930,7 +936,7 @@
                          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.CompactionCompleteTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">CompactSplit.CompactionCompleteTracker</a>&nbsp;completeTracker,
                          <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">FlushRequester.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html#requestDelayedFlush-org.apache.hadoop.hbase.regionserver.HRegion-long-boolean-">requestDelayedFlush</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                    long&nbsp;delay,
@@ -938,13 +944,13 @@
 <div class="block">Tell the listener the cache needs to be flushed after a delay</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#requestDelayedFlush-org.apache.hadoop.hbase.regionserver.HRegion-long-boolean-">requestDelayedFlush</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
                    long&nbsp;delay,
                    boolean&nbsp;forceFlushAllStores)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">FlushRequester.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html#requestFlush-org.apache.hadoop.hbase.regionserver.HRegion-boolean-org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker-">requestFlush</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
             boolean&nbsp;forceFlushAllStores,
@@ -952,29 +958,29 @@
 <div class="block">Tell the listener the cache needs to be flushed.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#requestFlush-org.apache.hadoop.hbase.regionserver.HRegion-boolean-org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker-">requestFlush</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
             boolean&nbsp;forceFlushAllStores,
             <a href="../../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a>&nbsp;tracker)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">CompactSplit.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html#requestSystemCompaction-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.regionserver.HStore-java.lang.String-">requestSystemCompaction</a></span>(<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/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store,
                        <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;why)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">CompactSplit.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html#requestSystemCompaction-org.apache.hadoop.hbase.regionserver.HRegion-java.lang.String-">requestSystemCompaction</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                        <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;why)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<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.fs.Path&gt;&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">SecureBulkLoadManager.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html#secureBulkLoadHFiles-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest-">secureBulkLoadHFiles</a></span>(<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.BulkLoadHFileRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">CompactSplit.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html#selectCompaction-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.regionserver.HStore-int-org.apache.hadoop.hbase.regionserver.compactions.CompactionLifeCycleTracker-org.apache.hadoop.hbase.regionserver.CompactSplit.CompactionCompleteTracker-org.apache.hadoop.hbase.security.User-">selectCompaction</a></span>(<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/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store,
@@ -983,17 +989,17 @@
                 <a href="../../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.CompactionCompleteTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">CompactSplit.CompactionCompleteTracker</a>&nbsp;completeTracker,
                 <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">FlushLargeStoresPolicy.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/FlushLargeStoresPolicy.html#setFlushSizeLowerBounds-org.apache.hadoop.hbase.regionserver.HRegion-">setFlushSizeLowerBounds</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><span class="typeNameLabel">HRegionServer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#triggerFlushInPrimaryRegion-org.apache.hadoop.hbase.regionserver.HRegion-">triggerFlushInPrimaryRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>
 <div class="block">Trigger a flush in the primary region replica if this region is a secondary replica.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">RSRpcServices.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#updateMutationMetrics-org.apache.hadoop.hbase.regionserver.HRegion-long-boolean-boolean-">updateMutationMetrics</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                      long&nbsp;starttime,
@@ -1010,24 +1016,30 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreOfRegionReplica-java.util.SortedMap-java.util.Set-">getBiggestMemStoreOfRegionReplica</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;regionsBySize,
-                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;excludedRegions)</code>&nbsp;</td>
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">HRegionServer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#addRegion-java.util.SortedMap-org.apache.hadoop.hbase.regionserver.HRegion-long-">addRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;sortedRegions,
+         <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+         long&nbsp;size)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreOfRegionReplica-java.util.SortedMap-java.util.Set-">getBiggestMemStoreOfRegionReplica</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;regionsBySize,
+<td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreOfRegionReplica-java.util.SortedMap-java.util.Set-">getBiggestMemStoreOfRegionReplica</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;regionsBySize,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;excludedRegions)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreRegion-java.util.SortedMap-java.util.Set-boolean-">getBiggestMemStoreRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;regionsBySize,
+<td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreOfRegionReplica-java.util.SortedMap-java.util.Set-">getBiggestMemStoreOfRegionReplica</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;regionsBySize,
+                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;excludedRegions)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
+<td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreRegion-java.util.SortedMap-java.util.Set-boolean-">getBiggestMemStoreRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;regionsBySize,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;excludedRegions,
                         boolean&nbsp;checkStoreFileCount)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
-<td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreRegion-java.util.SortedMap-java.util.Set-boolean-">getBiggestMemStoreRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;regionsBySize,
+<td class="colLast"><span class="typeNameLabel">MemStoreFlusher.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreRegion-java.util.SortedMap-java.util.Set-boolean-">getBiggestMemStoreRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;regionsBySize,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;excludedRegions,
                         boolean&nbsp;checkStoreFileCount)</code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 9fb7b1eb..74784bb 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -704,20 +704,20 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index 23060c2..b377318 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -131,8 +131,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index c20ff47..034077c 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -110,8 +110,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 </ul>
 </li>
 </ul>


[09/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
index b1c7be8..7f2e325 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
@@ -2767,1025 +2767,1030 @@
 <span class="sourceLineNo">2759</span>    configurationManager.registerObserver(region);<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>  }<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span><a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>  /**<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>   *   the biggest.  If two regions are the same size, then the last one found wins; i.e. this<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>   *   method may NOT return all regions.<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>   */<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>  SortedMap&lt;Long, HRegion&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>    // we'll sort the regions in reverse<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    SortedMap&lt;Long, HRegion&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>        new Comparator&lt;Long&gt;() {<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>          @Override<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>          public int compare(Long a, Long b) {<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>            return -1 * a.compareTo(b);<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>          }<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        });<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      sortedRegions.put(region.getMemStoreOffHeapSize(), region);<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>    }<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>    return sortedRegions;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>  }<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span><a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>  /**<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>   *   biggest.  If two regions are the same size, then the last one found wins; i.e. this method<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>   *   may NOT return all regions.<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>   */<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>  SortedMap&lt;Long, HRegion&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>    // we'll sort the regions in reverse<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>    SortedMap&lt;Long, HRegion&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>        new Comparator&lt;Long&gt;() {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>          @Override<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>          public int compare(Long a, Long b) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>            return -1 * a.compareTo(b);<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>          }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>        });<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>      sortedRegions.put(region.getMemStoreHeapSize(), region);<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>    }<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>    return sortedRegions;<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>  }<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span><a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>  /**<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>   * @return time stamp in millis of when this region server was started<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>   */<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>  public long getStartcode() {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>    return this.startcode;<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>  }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span><a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>  /** @return reference to FlushRequester */<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>  @Override<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>  public FlushRequester getFlushRequester() {<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>    return this.cacheFlusher;<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>  }<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span><a name="line.2816"></a>
+<span class="sourceLineNo">2762</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>      long size) {<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>    }<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>    sortedRegions.get(size).add(region);<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>  }<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>  /**<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>   *   the biggest.<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>   */<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>    // we'll sort the regions in reverse<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>        new Comparator&lt;Long&gt;() {<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>          @Override<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>          public int compare(Long a, Long b) {<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>            return -1 * a.compareTo(b);<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>          }<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>        });<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>    }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>    return sortedRegions;<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>  }<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span><a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>  /**<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>   *   biggest.<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>   */<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>    // we'll sort the regions in reverse<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>        new Comparator&lt;Long&gt;() {<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>          @Override<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>          public int compare(Long a, Long b) {<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>            return -1 * a.compareTo(b);<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>          }<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>        });<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>    }<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>    return sortedRegions;<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>  }<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span><a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>  /**<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>   * @return time stamp in millis of when this region server was started<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>   */<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>  public long getStartcode() {<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>    return this.startcode;<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>  }<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span><a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>  /** @return reference to FlushRequester */<a name="line.2816"></a>
 <span class="sourceLineNo">2817</span>  @Override<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>    return this.compactSplitThread;<a name="line.2819"></a>
+<span class="sourceLineNo">2818</span>  public FlushRequester getFlushRequester() {<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>    return this.cacheFlusher;<a name="line.2819"></a>
 <span class="sourceLineNo">2820</span>  }<a name="line.2820"></a>
 <span class="sourceLineNo">2821</span><a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  /**<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>   * Get the top N most loaded regions this server is serving so we can tell the<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>   * master which regions it can reallocate if we're overloaded. TODO: actually<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>   * calculate which regions are most loaded. (Right now, we're just grabbing<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>   * the first N regions being served regardless of load.)<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>   */<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>  protected RegionInfo[] getMostLoadedRegions() {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>    ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;&gt;();<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>    for (Region r : onlineRegions.values()) {<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>      if (!r.isAvailable()) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>        continue;<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      }<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      if (regions.size() &lt; numRegionsToReport) {<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>        regions.add(r.getRegionInfo());<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      } else {<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>        break;<a name="line.2837"></a>
+<span class="sourceLineNo">2822</span>  @Override<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>    return this.compactSplitThread;<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>  }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span><a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>  /**<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>   * Get the top N most loaded regions this server is serving so we can tell the<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>   * master which regions it can reallocate if we're overloaded. TODO: actually<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>   * calculate which regions are most loaded. (Right now, we're just grabbing<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>   * the first N regions being served regardless of load.)<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>   */<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>  protected RegionInfo[] getMostLoadedRegions() {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>    ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;&gt;();<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>    for (Region r : onlineRegions.values()) {<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>      if (!r.isAvailable()) {<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>        continue;<a name="line.2837"></a>
 <span class="sourceLineNo">2838</span>      }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    }<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>    return regions.toArray(new RegionInfo[regions.size()]);<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>  }<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span><a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>  @Override<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>  public Leases getLeases() {<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>    return leases;<a name="line.2845"></a>
+<span class="sourceLineNo">2839</span>      if (regions.size() &lt; numRegionsToReport) {<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>        regions.add(r.getRegionInfo());<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>      } else {<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>        break;<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>      }<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>    }<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>    return regions.toArray(new RegionInfo[regions.size()]);<a name="line.2845"></a>
 <span class="sourceLineNo">2846</span>  }<a name="line.2846"></a>
 <span class="sourceLineNo">2847</span><a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  /**<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>   * @return Return the rootDir.<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>   */<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>  protected Path getRootDir() {<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    return rootDir;<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>  }<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span><a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>  /**<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>   * @return Return the fs.<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>   */<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>  @Override<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>  public FileSystem getFileSystem() {<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>    return fs;<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>  }<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span><a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>  /**<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>   * @return Return the walRootDir.<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>   */<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>  protected Path getWALRootDir() {<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>    return walRootDir;<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>  }<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span><a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>  /**<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>   * @return Return the walFs.<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>   */<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>  protected FileSystem getWALFileSystem() {<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>    return walFs;<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>  }<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span><a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>  @Override<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>  public String toString() {<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>    return getServerName().toString();<a name="line.2879"></a>
+<span class="sourceLineNo">2848</span>  @Override<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>  public Leases getLeases() {<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>    return leases;<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>  }<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span><a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>  /**<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>   * @return Return the rootDir.<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>   */<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>  protected Path getRootDir() {<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>    return rootDir;<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>  }<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span><a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>  /**<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>   * @return Return the fs.<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>   */<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>  @Override<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>  public FileSystem getFileSystem() {<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>    return fs;<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>  }<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span><a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>  /**<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>   * @return Return the walRootDir.<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>   */<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>  protected Path getWALRootDir() {<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>    return walRootDir;<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>  }<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span><a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>  /**<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>   * @return Return the walFs.<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>   */<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>  protected FileSystem getWALFileSystem() {<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>    return walFs;<a name="line.2879"></a>
 <span class="sourceLineNo">2880</span>  }<a name="line.2880"></a>
 <span class="sourceLineNo">2881</span><a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>  /**<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>   * Interval at which threads should run<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>   *<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>   * @return the interval<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>   */<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>  public int getThreadWakeFrequency() {<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    return threadWakeFrequency;<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>  }<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span><a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>  @Override<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>  public ZKWatcher getZooKeeper() {<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>    return zooKeeper;<a name="line.2893"></a>
+<span class="sourceLineNo">2882</span>  @Override<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>  public String toString() {<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>    return getServerName().toString();<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>  }<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span><a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>  /**<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>   * Interval at which threads should run<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span>   *<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>   * @return the interval<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>   */<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>  public int getThreadWakeFrequency() {<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>    return threadWakeFrequency;<a name="line.2893"></a>
 <span class="sourceLineNo">2894</span>  }<a name="line.2894"></a>
 <span class="sourceLineNo">2895</span><a name="line.2895"></a>
 <span class="sourceLineNo">2896</span>  @Override<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>    return csm;<a name="line.2898"></a>
+<span class="sourceLineNo">2897</span>  public ZKWatcher getZooKeeper() {<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>    return zooKeeper;<a name="line.2898"></a>
 <span class="sourceLineNo">2899</span>  }<a name="line.2899"></a>
 <span class="sourceLineNo">2900</span><a name="line.2900"></a>
 <span class="sourceLineNo">2901</span>  @Override<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>  public ServerName getServerName() {<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span>    return serverName;<a name="line.2903"></a>
+<span class="sourceLineNo">2902</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>    return csm;<a name="line.2903"></a>
 <span class="sourceLineNo">2904</span>  }<a name="line.2904"></a>
 <span class="sourceLineNo">2905</span><a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>    return this.rsHost;<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>  }<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span><a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>  @Override<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>    return this.regionsInTransitionInRS;<a name="line.2912"></a>
+<span class="sourceLineNo">2906</span>  @Override<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span>  public ServerName getServerName() {<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>    return serverName;<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>  }<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span><a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span>    return this.rsHost;<a name="line.2912"></a>
 <span class="sourceLineNo">2913</span>  }<a name="line.2913"></a>
 <span class="sourceLineNo">2914</span><a name="line.2914"></a>
 <span class="sourceLineNo">2915</span>  @Override<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>  public ExecutorService getExecutorService() {<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>    return executorService;<a name="line.2917"></a>
+<span class="sourceLineNo">2916</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>    return this.regionsInTransitionInRS;<a name="line.2917"></a>
 <span class="sourceLineNo">2918</span>  }<a name="line.2918"></a>
 <span class="sourceLineNo">2919</span><a name="line.2919"></a>
 <span class="sourceLineNo">2920</span>  @Override<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>  public ChoreService getChoreService() {<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>    return choreService;<a name="line.2922"></a>
+<span class="sourceLineNo">2921</span>  public ExecutorService getExecutorService() {<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>    return executorService;<a name="line.2922"></a>
 <span class="sourceLineNo">2923</span>  }<a name="line.2923"></a>
 <span class="sourceLineNo">2924</span><a name="line.2924"></a>
 <span class="sourceLineNo">2925</span>  @Override<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>    return rsQuotaManager;<a name="line.2927"></a>
+<span class="sourceLineNo">2926</span>  public ChoreService getChoreService() {<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>    return choreService;<a name="line.2927"></a>
 <span class="sourceLineNo">2928</span>  }<a name="line.2928"></a>
 <span class="sourceLineNo">2929</span><a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>  //<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>  // Main program and support routines<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>  //<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>  /**<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>   * Load the replication executorService objects, if any<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>   */<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    if ((server instanceof HMaster) &amp;&amp;<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>      (!LoadBalancer.isTablesOnMaster(conf) || LoadBalancer.isSystemTablesOnlyOnMaster(conf))) {<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>      return;<a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>    }<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span><a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>    // read in the name of the source replication class from the config file.<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span><a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>    // read in the name of the sink replication class from the config file.<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span><a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>    // only one object.<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>    } else {<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>    }<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>  }<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span><a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>    Class&lt;? extends T&gt; clazz = null;<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>    try {<a name="line.2969"></a>
-<span class="sourceLineNo">2970</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>      throw new IOException("Could not find class for " + classname);<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>    }<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>    return service;<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>  }<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span><a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>  /**<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>   *<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>   * @param regionServerClass<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>   * @param conf2<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>   * @return HRegionServer instance.<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span>   */<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>  public static HRegionServer constructRegionServer(<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span>      Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>      final Configuration conf2) {<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>    try {<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>      Constructor&lt;? extends HRegionServer&gt; c = regionServerClass<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>          .getConstructor(Configuration.class);<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span>      return c.newInstance(conf2);<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>    } catch (Exception e) {<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>          + regionServerClass.toString(), e);<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>    }<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>  }<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span><a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>  /**<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>   */<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>  public static void main(String[] args) throws Exception {<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>    VersionInfo.logVersion();<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>    @SuppressWarnings("unchecked")<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span><a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>  }<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span><a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>  /**<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>   * Gets the online regions of the specified table.<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>   * all the ONLINE regions in the table.<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>   * @param tableName<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>   */<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span>  @Override<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>     synchronized (this.onlineRegions) {<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span>           tableRegions.add(region);<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>         }<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>       }<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span>     }<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>     return tableRegions;<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>   }<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span><a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>  @Override<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>    List&lt;HRegion&gt; allRegions = new ArrayList&lt;&gt;();<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>    synchronized (this.onlineRegions) {<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>      // Return a clone copy of the onlineRegions<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>      allRegions.addAll(onlineRegions.values());<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>    }<a name="line.3044"></a>
-<span class="sourceLineNo">3045</span>    return allRegions;<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>  }<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span><a name="line.3047"></a>
-<span class="sourceLineNo">3048</span>  /**<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>   * Gets the online tables in this RS.<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>   * This method looks at the in-memory onlineRegions.<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>   * @return all the online tables in this RS<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>   */<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>    synchronized (this.onlineRegions) {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span>      }<a name="line.3058"></a>
-<span class="sourceLineNo">3059</span>    }<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span>    return tables;<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>  }<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span><a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>  // used by org/apache/hbase/tmpl/regionserver/RSStatusTmpl.jamon (HBASE-4070).<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>  public String[] getRegionServerCoprocessors() {<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>    try {<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>    } catch (IOException exception) {<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span>          "skipping.");<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>    }<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span>    for (HRegion region: regions) {<a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>      try {<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>      } catch (IOException exception) {<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>            "; skipping.");<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>      }<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>    }<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>    return coprocessors.toArray(new String[coprocessors.size()]);<a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>  }<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span><a name="line.3087"></a>
-<span class="sourceLineNo">3088</span>  /**<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>   * @param region Region to close<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>   */<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>    try {<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>            " - ignoring and continuing");<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>      }<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>    } catch (IOException e) {<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>          " - ignoring and continuing", e);<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>    }<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>  }<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span><a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>  /**<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>   * when stopping. If called from the master, the region will update the znode status.<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>   *<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>   * &lt;p&gt;<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>   * &lt;/p&gt;<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span><a name="line.3112"></a>
+<span class="sourceLineNo">2930</span>  @Override<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>    return rsQuotaManager;<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>  }<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span><a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>  //<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span>  // Main program and support routines<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>  //<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>  /**<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>   * Load the replication executorService objects, if any<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>   */<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span>    if ((server instanceof HMaster) &amp;&amp;<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>      (!LoadBalancer.isTablesOnMaster(conf) || LoadBalancer.isSystemTablesOnlyOnMaster(conf))) {<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>      return;<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>    }<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span><a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>    // read in the name of the source replication class from the config file.<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span><a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>    // read in the name of the sink replication class from the config file.<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span><a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>    // only one object.<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>    } else {<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>    }<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>  }<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span><a name="line.2969"></a>
+<span class="sourceLineNo">2970</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>    Class&lt;? extends T&gt; clazz = null;<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>    try {<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>      throw new IOException("Could not find class for " + classname);<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>    }<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>    return service;<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>  }<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span><a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>  /**<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>   *<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>   * @param regionServerClass<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>   * @param conf2<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>   * @return HRegionServer instance.<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>   */<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>  public static HRegionServer constructRegionServer(<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>      Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span>      final Configuration conf2) {<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>    try {<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>      Constructor&lt;? extends HRegionServer&gt; c = regionServerClass<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>          .getConstructor(Configuration.class);<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>      return c.newInstance(conf2);<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>    } catch (Exception e) {<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>          + regionServerClass.toString(), e);<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>    }<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>  }<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span><a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>  /**<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>   */<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>  public static void main(String[] args) throws Exception {<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>    VersionInfo.logVersion();<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>    @SuppressWarnings("unchecked")<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span><a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>  }<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span><a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>  /**<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>   * Gets the online regions of the specified table.<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>   * all the ONLINE regions in the table.<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>   * @param tableName<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>   */<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>  @Override<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span>     synchronized (this.onlineRegions) {<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>           tableRegions.add(region);<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span>         }<a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>       }<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>     }<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>     return tableRegions;<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>   }<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span><a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>  @Override<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>    List&lt;HRegion&gt; allRegions = new ArrayList&lt;&gt;();<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>    synchronized (this.onlineRegions) {<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>      // Return a clone copy of the onlineRegions<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>      allRegions.addAll(onlineRegions.values());<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>    }<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>    return allRegions;<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span>  }<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span><a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  /**<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>   * Gets the online tables in this RS.<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>   * This method looks at the in-memory onlineRegions.<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span>   * @return all the online tables in this RS<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>   */<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>    synchronized (this.onlineRegions) {<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>      }<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>    }<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>    return tables;<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span>  }<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span><a name="line.3067"></a>
+<span class="sourceLineNo">3068</span>  // used by org/apache/hbase/tmpl/regionserver/RSStatusTmpl.jamon (HBASE-4070).<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>  public String[] getRegionServerCoprocessors() {<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>    try {<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>    } catch (IOException exception) {<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>          "skipping.");<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>    }<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>    for (HRegion region: regions) {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>      try {<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span>      } catch (IOException exception) {<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>            "; skipping.");<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span>      }<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>    }<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>    return coprocessors.toArray(new String[coprocessors.size()]);<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>  }<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span><a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>  /**<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>   * @param region Region to close<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>   */<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3097"></a>
+<span class="sourceLineNo">3098</span>    try {<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>            " - ignoring and continuing");<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span>      }<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span>    } catch (IOException e) {<a name="line.3103"></a>
+<span class="sourceLineNo">3104</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>          " - ignoring and continuing", e);<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>    }<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>  }<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span><a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>  /**<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>   * when stopping. If called from the master, the region will update the znode status.<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>   *<a name="line.3112"></a>
 <span class="sourceLineNo">3113</span>   * &lt;p&gt;<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>   * &lt;/p&gt;<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>   *<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>   * @param encodedName Region to close<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>   * @param abort True if we are aborting<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>   * @return True if closed a region.<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>   * @throws NotServingRegionException if the region is not online<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>   */<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>  protected boolean closeRegion(String encodedName, final boolean abort, final ServerName sn)<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>      throws NotServingRegionException {<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>    //Check for permissions to close.<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>    // Can be null if we're calling close on a region that's not online<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>      try {<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>      } catch (IOException exp) {<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>        return false;<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>      }<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>    }<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span><a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>        Boolean.FALSE);<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span><a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>        // We're going to try to do a standard close then.<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>            " Doing a standard close now");<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>        return closeRegion(encodedName, abort, sn);<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span>      }<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span>      // Let's get the region from the online region list again<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>      actualRegion = this.getRegion(encodedName);<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>        // The master deletes the znode when it receives this exception.<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>      }<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>      return true;<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>    }<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span><a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>    if (actualRegion == null) {<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>      // The master deletes the znode when it receives this exception.<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>          " is not online, and is not opening.");<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>    }<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span><a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>    CloseRegionHandler crh;<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>    if (hri.isMetaRegion()) {<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>    } else {<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>      crh = new CloseRegionHandler(this, this, hri, abort, sn);<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>    }<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>    this.executorService.submit(crh);<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>    return true;<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>  }<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span><a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>  /**<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>   * Close and offline the region for split or merge<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>   *<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>   * @param regionEncodedName the name of the region(s) to close<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>   * @return true if closed the region successfully.<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>   * @throws IOException<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>  */<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>  protected boolean closeAndOfflineRegionForSplitOrMerge(final List&lt;String&gt; regionEncodedName)<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>      throws IOException {<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>    for (int i = 0; i &lt; regionEncodedName.size(); ++i) {<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>      HRegion regionToClose = this.getRegion(regionEncodedName.get(i));<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>      if (regionToClose != null) {<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>        Map&lt;byte[], List&lt;HStoreFile&gt;&gt; hstoreFiles = null;<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>        Exception exceptionToThrow = null;<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>        try {<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>          hstoreFiles = regionToClose.close(false);<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>        } catch (Exception e) {<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>          exceptionToThrow = e;<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>        }<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>        if (exceptionToThrow == null &amp;&amp; hstoreFiles == null) {<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>          // The region was closed by someone else<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>          exceptionToThrow =<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>            new IOException("Failed to close region: already closed by another thread");<a name="line.3204"></a>
+<span class="sourceLineNo">3114</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>   * &lt;/p&gt;<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span><a name="line.3117"></a>
+<span class="sourceLineNo">3118</span>   * &lt;p&gt;<a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>   * &lt;/p&gt;<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>   *<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>   * @param encodedName Region to close<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>   * @param abort True if we are aborting<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>   * @return True if closed a region.<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>   * @throws NotServingRegionException if the region is not online<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>   */<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>  protected boolean closeRegion(String encodedName, final boolean abort, final ServerName sn)<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>      throws NotServingRegionException {<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>    //Check for permissions to close.<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>    // Can be null if we're calling close on a region that's not online<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>      try {<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>      } catch (IOException exp) {<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>        return false;<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>      }<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>    }<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span><a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>        Boolean.FALSE);<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span><a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span>        // We're going to try to do a standard close then.<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>            " Doing a standard close now");<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>        return closeRegion(encodedName, abort, sn);<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>      }<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span>      // Let's get the region from the online region list again<a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>      actualRegion = this.getRegion(encodedName);<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>        // The master deletes the znode when it receives this exception.<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>      }<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>      return true;<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>    }<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span><a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>    if (actualRegion == null) {<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>      // The master deletes the znode when it receives this exception.<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>          " is not online, and is not opening.");<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>    }<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span><a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>    CloseRegionHandler crh;<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>    if (hri.isMetaRegion()) {<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>    } else {<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>      crh = new CloseRegionHandler(this, this, hri, abort, sn);<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>    }<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>    this.executorService.submit(crh);<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>    return true;<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>  }<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span><a name="line.3186"></a>
+<span class="sourceLineNo">3187</span>  /**<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>   * Close and offline the region for split or merge<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>   *<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>   * @param regionEncodedName the name of the region(s) to close<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>   * @return true if closed the region successfully.<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>   * @throws IOException<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>  */<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span>  protected boolean closeAndOfflineRegionForSplitOrMerge(final List&lt;String&gt; regionEncodedName)<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span>      throws IOException {<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span>    for (int i = 0; i &lt; regionEncodedName.size(); ++i) {<a name="line.3196"></a>
+<span class="sourceLineNo">3197</span>      HRegion regionToClose = this.getRegion(regionEncodedName.get(i));<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span>      if (regionToClose != null) {<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span>        Map&lt;byte[], List&lt;HStoreFile&gt;&gt; hstoreFiles = null;<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>        Exception exceptionToThrow = null;<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span>        try {<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>          hstoreFiles = regionToClose.close(false);<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span>        } catch (Exception e) {<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>          exceptionToThrow = e;<a name="line.3204"></a>
 <span class="sourceLineNo">3205</span>        }<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>        if (exceptionToThrow != null) {<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>          if (exceptionToThrow instanceof IOException) {<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>            throw (IOException) exceptionToThrow;<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>          }<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>          throw new IOException(exceptionToThrow);<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>        }<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>        // Offline the region<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>        this.removeRegion(regionToClose, null);<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>      }<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>    }<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>    return true;<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>  }<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span><a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>   /**<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>   * @param regionName<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>   *         named region is not member of the online regions.<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>   */<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>  }<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span><a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>  public InetSocketAddress[] getRegionBlockLocations(final String encodedRegionName) {<a name=

<TRUNCATED>

[16/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
index adccbc4..e5e9803 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":9,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":9,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":9,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":9,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i109"
 :10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":9,"i130":10,"i131":9,"i132":10,"i133":10,"i134":10,"i135":10,"i136":10,"i137":10,"i138":10,"i139":10,"i140":10,"i141":10,"i142":10,"i143":10,"i144":10,"i145":10,"i146":10,"i147":10,"i148":10,"i149":10,"i150":9,"i151":10,"i152":9,"i153":10,"i154":10,"i155":10,"i156":10,"i157":10,"i158":10,"i159":10,"i160":10,"i161":10,"i162":10,"i163":10,"i164":10,"i165":10,"i166":10,"i167":10,"i168":10,"i169":10,"i170":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":9,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":9,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":9,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":9,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i109"
 :10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":9,"i131":10,"i132":9,"i133":10,"i134":10,"i135":10,"i136":10,"i137":10,"i138":10,"i139":10,"i140":10,"i141":10,"i142":10,"i143":10,"i144":10,"i145":10,"i146":10,"i147":10,"i148":10,"i149":10,"i150":10,"i151":9,"i152":10,"i153":9,"i154":10,"i155":10,"i156":10,"i157":10,"i158":10,"i159":10,"i160":10,"i161":10,"i162":10,"i163":10,"i164":10,"i165":10,"i166":10,"i167":10,"i168":10,"i169":10,"i170":10,"i171":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";
@@ -645,94 +645,100 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 </td>
 </tr>
 <tr id="i3" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#addRegion-java.util.SortedMap-org.apache.hadoop.hbase.regionserver.HRegion-long-">addRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;sortedRegions,
+         <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+         long&nbsp;size)</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#addToMovedRegions-java.lang.String-org.apache.hadoop.hbase.ServerName-long-">addToMovedRegions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedName,
                  <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;destination,
                  long&nbsp;closeSeqNum)</code>&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#areAllUserRegionsOffline--">areAllUserRegionsOffline</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#blockAndCheckIfStopped-org.apache.hadoop.hbase.zookeeper.ZKNodeTracker-">blockAndCheckIfStopped</a></span>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKNodeTracker</a>&nbsp;tracker)</code>
 <div class="block">Utilty method to wait indefinitely on a znode availability while checking
  if the region server is shut down</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>(package private) org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportRequest</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#buildRegionSpaceUseReportRequest-org.apache.hadoop.hbase.quotas.RegionSizeStore-">buildRegionSpaceUseReportRequest</a></span>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizes)</code>
 <div class="block">Builds a <code>RegionServerStatusProtos.RegionSpaceUseReportRequest</code> protobuf message from the region size map.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#buildReportAndSend-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService.BlockingInterface-org.apache.hadoop.hbase.quotas.RegionSizeStore-">buildReportAndSend</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService.BlockingInterface&nbsp;rss,
                   <a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizeStore)</code>
 <div class="block">Builds the region size report and sends it to the master.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>(package private) org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.ServerLoad</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#buildServerLoad-long-long-">buildServerLoad</a></span>(long&nbsp;reportStartTime,
                long&nbsp;reportEndTime)</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#canCreateBaseZNode--">canCreateBaseZNode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#canUpdateTableDescriptor--">canUpdateTableDescriptor</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#checkCodecs-org.apache.hadoop.conf.Configuration-">checkCodecs</a></span>(org.apache.hadoop.conf.Configuration&nbsp;c)</code>
 <div class="block">Run test on configured codecs to make sure supporting libs are in place.</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#checkFileSystem--">checkFileSystem</a></span>()</code>
 <div class="block">Checks to see if the file system is still accessible.</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#cleanMovedRegions--">cleanMovedRegions</a></span>()</code>
 <div class="block">Remove the expired entries from the moved regions list.</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#cleanup-java.lang.Throwable-java.lang.String-">cleanup</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t,
        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/CacheEvictionStats.html" title="class in org.apache.hadoop.hbase">CacheEvictionStats</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#clearRegionBlockCache-org.apache.hadoop.hbase.regionserver.Region-">clearRegionBlockCache</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#closeAllRegions-boolean-">closeAllRegions</a></span>(boolean&nbsp;abort)</code>
 <div class="block">Closes all regions.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#closeAndOfflineRegionForSplitOrMerge-java.util.List-">closeAndOfflineRegionForSplitOrMerge</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;regionEncodedName)</code>
 <div class="block">Close and offline the region for split or merge</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#closeMetaTableRegions-boolean-">closeMetaTableRegions</a></span>(boolean&nbsp;abort)</code>
 <div class="block">Close meta region if we carry it</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#closeRegion-java.lang.String-boolean-org.apache.hadoop.hbase.ServerName-">closeRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedName,
            boolean&nbsp;abort,
@@ -741,35 +747,35 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
  when stopping.</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#closeRegionIgnoreErrors-org.apache.hadoop.hbase.client.RegionInfo-boolean-">closeRegionIgnoreErrors</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                        boolean&nbsp;abort)</code>
 <div class="block">Try to close the region, logs a warning on failure but continues.</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#closeUserRegions-boolean-">closeUserRegions</a></span>(boolean&nbsp;abort)</code>
 <div class="block">Schedule closes on all user regions.</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#configureInfoServer--">configureInfoServer</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#constructRegionServer-java.lang.Class-org.apache.hadoop.conf.Configuration-">constructRegionServer</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&gt;&nbsp;regionServerClass,
                      org.apache.hadoop.conf.Configuration&nbsp;conf2)</code>
 <div class="block">Utility for constructing an instance of the passed HRegionServer class.</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#containsMetaTableRegions--">containsMetaTableRegions</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>(package private) org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#convertRegionSize-org.apache.hadoop.hbase.client.RegionInfo-java.lang.Long-">convertRegionSize</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;sizeInBytes)</code>
@@ -777,27 +783,27 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
  protobuf message.</div>
 </td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>protected <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></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#convertThrowableToIOE-java.lang.Throwable-java.lang.String-">convertThrowableToIOE</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t,
                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</code>&nbsp;</td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createClusterConnection--">createClusterConnection</a></span>()</code>
 <div class="block">Create a 'smarter' Connection, one that is capable of by-passing RPC if the request is to
  the local server; i.e.</div>
 </td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createConnection-org.apache.hadoop.conf.Configuration-">createConnection</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createMyEphemeralNode--">createMyEphemeralNode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createNewReplicationInstance-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.regionserver.HRegionServer-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.wal.WALProvider-">createNewReplicationInstance</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                             <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;server,
@@ -808,465 +814,465 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <div class="block">Load the replication executorService objects, if any</div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>(package private) org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createRegionLoad-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad.Builder-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.Builder-">createRegionLoad</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
                 org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad.Builder&nbsp;regionLoadBldr,
                 org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.Builder&nbsp;regionSpecifier)</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createRegionLoad-java.lang.String-">createRegionLoad</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</code>&nbsp;</td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createRegionServerStatusStub--">createRegionServerStatusStub</a></span>()</code>
 <div class="block">Get the current master from ZooKeeper and open the RPC connection to it.</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createRegionServerStatusStub-boolean-">createRegionServerStatusStub</a></span>(boolean&nbsp;refresh)</code>
 <div class="block">Get the current master from ZooKeeper and open the RPC connection to it.</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createRpcServices--">createRpcServices</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>(package private) static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#decorateRegionServerConfiguration-org.apache.hadoop.conf.Configuration-">decorateRegionServerConfiguration</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <div class="block">This method modifies the region server's configuration in order to inject replication-related
  features</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#deleteMyEphemeralNode--">deleteMyEphemeralNode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#execRegionServerService-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest-">execRegionServerService</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                        org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest&nbsp;serviceRequest)</code>&nbsp;</td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#executeProcedure-long-org.apache.hadoop.hbase.procedure2.RSProcedureCallable-">executeProcedure</a></span>(long&nbsp;procId,
                 <a href="../../../../../org/apache/hadoop/hbase/procedure2/RSProcedureCallable.html" title="interface in org.apache.hadoop.hbase.procedure2">RSProcedureCallable</a>&nbsp;callable)</code>&nbsp;</td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCacheConfig--">getCacheConfig</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getChoreService--">getChoreService</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getClusterConnection--">getClusterConnection</a></span>()</code>
 <div class="block">Returns a reference to the servers' cluster connection.</div>
 </td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getClusterId--">getClusterId</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code>double</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCompactionPressure--">getCompactionPressure</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequester.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequester</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCompactionRequestor--">getCompactionRequestor</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html" title="class in org.apache.hadoop.hbase.regionserver">CompactSplit</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCompactSplitThread--">getCompactSplitThread</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.conf.Configuration</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getConfiguration--">getConfiguration</a></span>()</code>
 <div class="block">Gets the configuration object for this server.</div>
 </td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getConfigurationManager--">getConfigurationManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getConnection--">getConnection</a></span>()</code>
 <div class="block">Returns a reference to the servers' connection.</div>
 </td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/CoordinatedStateManager.html" title="interface in org.apache.hadoop.hbase">CoordinatedStateManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCoordinatedStateManager--">getCoordinatedStateManager</a></span>()</code>
 <div class="block">Get CoordinatedStateManager instance for this server.</div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
-<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;</code></td>
+<tr id="i52" class="altColor">
+<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCopyOfOnlineRegionsSortedByOffHeapSize--">getCopyOfOnlineRegionsSortedByOffHeapSize</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i52" class="altColor">
-<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;</code></td>
+<tr id="i53" class="rowColor">
+<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCopyOfOnlineRegionsSortedByOnHeapSize--">getCopyOfOnlineRegionsSortedByOnHeapSize</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends javax.servlet.http.HttpServlet&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getDumpServlet--">getDumpServlet</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getEventLoopGroupConfig--">getEventLoopGroupConfig</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getExecutorService--">getExecutorService</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getFavoredNodesForRegion-java.lang.String-">getFavoredNodesForRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</code>
 <div class="block">Return the favored nodes for a region given its encoded name.</div>
 </td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.fs.FileSystem</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getFileSystem--">getFileSystem</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code>double</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getFlushPressure--">getFlushPressure</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getFlushRequester--">getFlushRequester</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getFlushThroughputController--">getFlushThroughputController</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getFsTableDescriptors--">getFsTableDescriptors</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getHeapMemoryManager--">getHeapMemoryManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getInfoServer--">getInfoServer</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getLastSequenceId-byte:A-">getLastSequenceId</a></span>(byte[]&nbsp;encodedRegionName)</code>&nbsp;</td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.html" title="class in org.apache.hadoop.hbase.regionserver">Leases</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getLeases--">getLeases</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterAddressTracker</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMasterAddressTracker--">getMasterAddressTracker</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html" title="class in org.apache.hadoop.hbase.zookeeper">MetaTableLocator</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMetaTableLocator--">getMetaTableLocator</a></span>()</code>
 <div class="block">Returns instance of <a href="../../../../../org/apache/hadoop/hbase/zookeeper/MetaTableLocator.html" title="class in org.apache.hadoop.hbase.zookeeper"><code>MetaTableLocator</code></a>
  running inside this server.</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html?is-external=true" title="class or interface in java.util.function">Function</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>,<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMetaTableObserver--">getMetaTableObserver</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMetrics--">getMetrics</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMostLoadedRegions--">getMostLoadedRegions</a></span>()</code>
 <div class="block">Get the top N most loaded regions this server is serving so we can tell the
  master which regions it can reallocate if we're overloaded.</div>
 </td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMovedRegion-java.lang.String-">getMovedRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</code>&nbsp;</td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMyEphemeralNodePath--">getMyEphemeralNodePath</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ServerNonceManager.html" title="class in org.apache.hadoop.hbase.regionserver">ServerNonceManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getNonceManager--">getNonceManager</a></span>()</code>
 <div class="block">Only required for "old" log replay; if it's removed, remove this.</div>
 </td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getNumberOfOnlineRegions--">getNumberOfOnlineRegions</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i75" class="rowColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getOnlineRegion-byte:A-">getOnlineRegion</a></span>(byte[]&nbsp;regionName)</code>&nbsp;</td>
 </tr>
-<tr id="i76" class="altColor">
+<tr id="i77" class="rowColor">
 <td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getOnlineRegionsAsPrintableString--">getOnlineRegionsAsPrintableString</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i77" class="rowColor">
+<tr id="i78" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getOnlineRegionsLocalContext--">getOnlineRegionsLocalContext</a></span>()</code>
 <div class="block">For tests, web ui and metrics.</div>
 </td>
 </tr>
-<tr id="i78" class="altColor">
+<tr id="i79" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getOnlineTables--">getOnlineTables</a></span>()</code>
 <div class="block">Gets the online tables in this RS.</div>
 </td>
 </tr>
-<tr id="i79" class="rowColor">
+<tr id="i80" class="altColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getProcessName--">getProcessName</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i80" class="altColor">
+<tr id="i81" class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegion-byte:A-">getRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Protected Utility method for safely obtaining an HRegion handle.</div>
 </td>
 </tr>
-<tr id="i81" class="rowColor">
+<tr id="i82" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegion-java.lang.String-">getRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</code>
 <div class="block">Return <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver"><code>Region</code></a> instance.</div>
 </td>
 </tr>
-<tr id="i82" class="altColor">
+<tr id="i83" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionBlockLocations-java.lang.String-">getRegionBlockLocations</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</code>&nbsp;</td>
 </tr>
-<tr id="i83" class="rowColor">
+<tr id="i84" class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionByEncodedName-byte:A-java.lang.String-">getRegionByEncodedName</a></span>(byte[]&nbsp;regionName,
                       <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;encodedRegionName)</code>&nbsp;</td>
 </tr>
-<tr id="i84" class="altColor">
+<tr id="i85" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionByEncodedName-java.lang.String-">getRegionByEncodedName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</code>&nbsp;</td>
 </tr>
-<tr id="i85" class="rowColor">
+<tr id="i86" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegions--">getRegions</a></span>()</code>
 <div class="block">Get all online regions in this RS.</div>
 </td>
 </tr>
-<tr id="i86" class="altColor">
+<tr id="i87" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegions-org.apache.hadoop.hbase.TableName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Gets the online regions of the specified table.</div>
 </td>
 </tr>
-<tr id="i87" class="rowColor">
+<tr id="i88" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionServerAccounting--">getRegionServerAccounting</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i88" class="altColor">
+<tr id="i89" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionServerCoprocessorHost--">getRegionServerCoprocessorHost</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i89" class="rowColor">
+<tr id="i90" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionServerCoprocessors--">getRegionServerCoprocessors</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i90" class="altColor">
+<tr id="i91" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionServerMetrics--">getRegionServerMetrics</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i91" class="rowColor">
+<tr id="i92" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerRpcQuotaManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionServerRpcQuotaManager--">getRegionServerRpcQuotaManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i92" class="altColor">
+<tr id="i93" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerSpaceQuotaManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionServerSpaceQuotaManager--">getRegionServerSpaceQuotaManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i93" class="rowColor">
+<tr id="i94" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionsInTransitionInRS--">getRegionsInTransitionInRS</a></span>()</code>
 <div class="block">Get the regions that are currently being opened or closed in the RS</div>
 </td>
 </tr>
-<tr id="i94" class="altColor">
+<tr id="i95" class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getReplicationSinkService--">getReplicationSinkService</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i95" class="rowColor">
+<tr id="i96" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getReplicationSourceService--">getReplicationSourceService</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i96" class="altColor">
+<tr id="i97" class="rowColor">
 <td class="colFirst"><code>protected org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRootDir--">getRootDir</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i97" class="rowColor">
+<tr id="i98" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRpcServer--">getRpcServer</a></span>()</code>
 <div class="block">Returns a reference to the region server's RPC server</div>
 </td>
 </tr>
-<tr id="i98" class="altColor">
+<tr id="i99" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRSRpcServices--">getRSRpcServices</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i99" class="rowColor">
+<tr id="i100" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html" title="class in org.apache.hadoop.hbase.regionserver">SecureBulkLoadManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getSecureBulkLoadManager--">getSecureBulkLoadManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i100" class="altColor">
+<tr id="i101" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getServerName--">getServerName</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i101" class="rowColor">
+<tr id="i102" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getStartcode--">getStartcode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i102" class="altColor">
+<tr id="i103" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getTableDescriptors--">getTableDescriptors</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i103" class="rowColor">
+<tr id="i104" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getThreadWakeFrequency--">getThreadWakeFrequency</a></span>()</code>
 <div class="block">Interval at which threads should run</div>
 </td>
 </tr>
-<tr id="i104" class="altColor">
+<tr id="i105" class="rowColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getUseThisHostnameInstead-org.apache.hadoop.conf.Configuration-">getUseThisHostnameInstead</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
-<tr id="i105" class="rowColor">
+<tr id="i106" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWAL-org.apache.hadoop.hbase.client.RegionInfo-">getWAL</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr id="i106" class="altColor">
+<tr id="i107" class="rowColor">
 <td class="colFirst"><code>protected org.apache.hadoop.fs.FileSystem</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWALFileSystem--">getWALFileSystem</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i107" class="rowColor">
+<tr id="i108" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWalRoller--">getWalRoller</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i108" class="altColor">
+<tr id="i109" class="rowColor">
 <td class="colFirst"><code>protected org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWALRootDir--">getWALRootDir</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i109" class="rowColor">
+<tr id="i110" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWALs--">getWALs</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i110" class="altColor">
+<tr id="i111" class="rowColor">
 <td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantReadWriteLock.WriteLock</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWriteLock--">getWriteLock</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i111" class="rowColor">
+<tr id="i112" class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWriteRequestCount--">getWriteRequestCount</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i112" class="altColor">
+<tr id="i113" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getZooKeeper--">getZooKeeper</a></span>()</code>
 <div class="block">Gets the ZooKeeper instance for this server.</div>
 </td>
 </tr>
-<tr id="i113" class="rowColor">
+<tr id="i114" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#handleReportForDutyResponse-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse-">handleReportForDutyResponse</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&nbsp;c)</code>&nbsp;</td>
 </tr>
-<tr id="i114" class="altColor">
+<tr id="i115" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#initializeFileSystem--">initializeFileSystem</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i115" class="rowColor">
+<tr id="i116" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#initializeMemStoreChunkCreator--">initializeMemStoreChunkCreator</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i116" class="altColor">
+<tr id="i117" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#initializeThreads--">initializeThreads</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i117" class="rowColor">
+<tr id="i118" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#initializeZooKeeper--">initializeZooKeeper</a></span>()</code>
 <div class="block">Bring up connection to zk ensemble and then wait until a master for this cluster and then after
  that, wait until cluster 'up' flag has been set.</div>
 </td>
 </tr>
-<tr id="i118" class="altColor">
+<tr id="i119" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isAborted--">isAborted</a></span>()</code>
 <div class="block">Check if the server or client was aborted.</div>
 </td>
 </tr>
-<tr id="i119" class="rowColor">
+<tr id="i120" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isClusterUp--">isClusterUp</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i120" class="altColor">
+<tr id="i121" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isHealthCheckerConfigured--">isHealthCheckerConfigured</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i121" class="rowColor">
+<tr id="i122" class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isHealthy--">isHealthy</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i122" class="altColor">
+<tr id="i123" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isOnline--">isOnline</a></span>()</code>
 <div class="block">Report the status of the server.</div>
 </td>
 </tr>
-<tr id="i123" class="rowColor">
+<tr id="i124" class="altColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isOnlineRegionsEmpty--">isOnlineRegionsEmpty</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i124" class="altColor">
+<tr id="i125" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isStopped--">isStopped</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i125" class="rowColor">
+<tr id="i126" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isStopping--">isStopping</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i126" class="altColor">
+<tr id="i127" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#keepLooping--">keepLooping</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i127" class="rowColor">
+<tr id="i128" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#kill--">kill</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i128" class="altColor">
+<tr id="i129" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#login-org.apache.hadoop.hbase.security.UserProvider-java.lang.String-">login</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;user,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;host)</code>&nbsp;</td>
 </tr>
-<tr id="i129" class="rowColor">
+<tr id="i130" class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#main-java.lang.String:A-">main</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>&nbsp;</td>
 </tr>
-<tr id="i130" class="altColor">
+<tr id="i131" class="rowColor">
 <td class="colFirst"><code>protected int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#movedRegionCleanerPeriod--">movedRegionCleanerPeriod</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i131" class="rowColor">
+<tr id="i132" class="altColor">
 <td class="colFirst"><code>private static &lt;T extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a>&gt;<br>T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#newReplicationInstance-java.lang.String-java.lang.Class-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.regionserver.HRegionServer-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.wal.WALProvider-">newReplicationInstance</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;classname,
                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;xface,
@@ -1277,34 +1283,34 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
                       org.apache.hadoop.fs.Path&nbsp;oldLogDir,
                       <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;walProvider)</code>&nbsp;</td>
 </tr>
-<tr id="i132" class="altColor">
+<tr id="i133" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">onConfigurationChange</a></span>(org.apache.hadoop.conf.Configuration&nbsp;newConf)</code>
 <div class="block">This method would be called by the <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf"><code>ConfigurationManager</code></a>
  object when the <code>Configuration</code> object is reloaded from disk.</div>
 </td>
 </tr>
-<tr id="i133" class="rowColor">
+<tr id="i134" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#postOpenDeployTasks-org.apache.hadoop.hbase.regionserver.RegionServerServices.PostOpenDeployContext-">postOpenDeployTasks</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.PostOpenDeployContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.PostOpenDeployContext</a>&nbsp;context)</code>
 <div class="block">Tasks to perform after region open to complete deploy of region on
  regionserver</div>
 </td>
 </tr>
-<tr id="i134" class="altColor">
+<tr id="i135" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#preRegistrationInitialization--">preRegistrationInitialization</a></span>()</code>
 <div class="block">All initialization needed before we go register with Master.<br>
  Do bare minimum.</div>
 </td>
 </tr>
-<tr id="i135" class="rowColor">
+<tr id="i136" class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#putUpWebUI--">putUpWebUI</a></span>()</code>
 <div class="block">Puts up the webui.</div>
 </td>
 </tr>
-<tr id="i136" class="altColor">
+<tr id="i137" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/locking/EntityLock.html" title="class in org.apache.hadoop.hbase.client.locking">EntityLock</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#regionLock-java.util.List-java.lang.String-org.apache.hadoop.hbase.Abortable-">regionLock</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regionInfos,
           <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;description,
@@ -1312,34 +1318,34 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <div class="block">Master based locks on namespaces/tables/regions.</div>
 </td>
 </tr>
-<tr id="i137" class="rowColor">
+<tr id="i138" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#registerConfigurationObservers--">registerConfigurationObservers</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i138" class="altColor">
+<tr id="i139" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#registerService-com.google.protobuf.Service-">registerService</a></span>(com.google.protobuf.Service&nbsp;instance)</code>
 <div class="block">Registers a new protocol buffer <code>Service</code> subclass as a coprocessor endpoint to be
  available for handling</div>
 </td>
 </tr>
-<tr id="i139" class="rowColor">
+<tr id="i140" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#remoteProcedureComplete-long-java.lang.Throwable-">remoteProcedureComplete</a></span>(long&nbsp;procId,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</code>&nbsp;</td>
 </tr>
-<tr id="i140" class="altColor">
+<tr id="i141" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#removeFromMovedRegions-java.lang.String-">removeFromMovedRegions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedName)</code>&nbsp;</td>
 </tr>
-<tr id="i141" class="rowColor">
+<tr id="i142" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#removeRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.ServerName-">removeRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
             <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;destination)</code>
 <div class="block">Removes the given Region from the list of onlineRegions.</div>
 </td>
 </tr>
-<tr id="i142" class="altColor">
+<tr id="i143" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#reportFileArchivalForQuotas-org.apache.hadoop.hbase.TableName-java.util.Collection-">reportFileArchivalForQuotas</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                            <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;&nbsp;archivedFiles)</code>
@@ -1347,90 +1353,90 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
  just moved to the archive directory.</div>
 </td>
 </tr>
-<tr id="i143" class="rowColor">
+<tr id="i144" class="altColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#reportForDuty--">reportForDuty</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i144" class="altColor">
+<tr id="i145" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#reportProcedureDone-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest-">reportProcedureDone</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i145" class="rowColor">
+<tr id="i146" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#reportRegionSizesForQuotas-org.apache.hadoop.hbase.quotas.RegionSizeStore-">reportRegionSizesForQuotas</a></span>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizeStore)</code>
 <div class="block">Reports the given map of Regions and their size on the filesystem to the active Master.</div>
 </td>
 </tr>
-<tr id="i146" class="altColor">
+<tr id="i147" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#reportRegionStateTransition-org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext-">reportRegionStateTransition</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionStateTransitionContext</a>&nbsp;context)</code>
 <div class="block">Notify master that a handler requests to change a region state</div>
 </td>
 </tr>
-<tr id="i147" class="rowColor">
+<tr id="i148" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#run--">run</a></span>()</code>
 <div class="block">The HRegionServer sticks in this loop until closed.</div>
 </td>
 </tr>
-<tr id="i148" class="altColor">
+<tr id="i149" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#sendShutdownInterrupt--">sendShutdownInterrupt</a></span>()</code>
 <div class="block">Called on stop/abort before closing the cluster connection and meta locator.</div>
 </td>
 </tr>
-<tr id="i149" class="rowColor">
+<tr id="i150" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#setupClusterConnection--">setupClusterConnection</a></span>()</code>
 <div class="block">Setup our cluster connection if not already initialized.</div>
 </td>
 </tr>
-<tr id="i150" class="altColor">
+<tr id="i151" class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#setupNetty-org.apache.hadoop.conf.Configuration-">setupNetty</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
-<tr id="i151" class="rowColor">
+<tr id="i152" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#setupWALAndReplication--">setupWALAndReplication</a></span>()</code>
 <div class="block">Setup WAL log and replication if enabled.</div>
 </td>
 </tr>
-<tr id="i152" class="altColor">
+<tr id="i153" class="rowColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#setupWindows-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.conf.ConfigurationManager-">setupWindows</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
             <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;cm)</code>
 <div class="block">If running on Windows, do windows-specific setup.</div>
 </td>
 </tr>
-<tr id="i153" class="rowColor">
+<tr id="i154" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#shutdownWAL-boolean-">shutdownWAL</a></span>(boolean&nbsp;close)</code>&nbsp;</td>
 </tr>
-<tr id="i154" class="altColor">
+<tr id="i155" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#sleep-long-">sleep</a></span>(long&nbsp;millis)</code>&nbsp;</td>
 </tr>
-<tr id="i155" class="rowColor">
+<tr id="i156" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#startHeapMemoryManager--">startHeapMemoryManager

<TRUNCATED>

[13/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html
index 7dcec5c..b2f1969 100644
--- a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html
+++ b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.56">RSGroupAdminClient</a>
+class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.58">RSGroupAdminClient</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/rsgroup/RSGroupAdmin.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupAdmin</a></pre>
 <div class="block">Client used for managing region server group information.</div>
@@ -137,6 +137,10 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#admin">admin</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdminService.BlockingInterface</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#stub">stub</a></span></code>&nbsp;</td>
 </tr>
@@ -267,10 +271,19 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <a name="stub">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>stub</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdminService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.57">stub</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdminService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.59">stub</a></pre>
+</li>
+</ul>
+<a name="admin">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>admin</h4>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.60">admin</a></pre>
 </li>
 </ul>
 </li>
@@ -287,7 +300,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RSGroupAdminClient</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.59">RSGroupAdminClient</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;conn)
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.62">RSGroupAdminClient</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;conn)
                    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>
@@ -309,7 +322,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSGroupInfo</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.64">getRSGroupInfo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.68">getRSGroupInfo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName)
                            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/rsgroup/RSGroupAdmin.html#getRSGroupInfo-java.lang.String-">RSGroupAdmin</a></code></span></div>
 <div class="block">Gets <code>RSGroupInfo</code> for given group name.</div>
@@ -327,7 +340,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSGroupInfoOfTable</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.78">getRSGroupInfoOfTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.82">getRSGroupInfoOfTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.html#getRSGroupInfoOfTable-org.apache.hadoop.hbase.TableName-">RSGroupAdmin</a></code></span></div>
 <div class="block">Gets <code>RSGroupInfo</code> for the given table's group.</div>
@@ -345,7 +358,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>moveServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.93">moveServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.97">moveServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
                         <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;targetGroup)
                  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/rsgroup/RSGroupAdmin.html#moveServers-java.util.Set-java.lang.String-">RSGroupAdmin</a></code></span></div>
@@ -364,7 +377,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>moveTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.113">moveTables</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tables,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.117">moveTables</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tables,
                        <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;targetGroup)
                 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/rsgroup/RSGroupAdmin.html#moveTables-java.util.Set-java.lang.String-">RSGroupAdmin</a></code></span></div>
@@ -384,7 +397,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>addRSGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.126">addRSGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.133">addRSGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName)
                 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/rsgroup/RSGroupAdmin.html#addRSGroup-java.lang.String-">RSGroupAdmin</a></code></span></div>
 <div class="block">Creates a new RegionServer group with the given name.</div>
@@ -402,7 +415,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>removeRSGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.136">removeRSGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.143">removeRSGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.html#removeRSGroup-java.lang.String-">RSGroupAdmin</a></code></span></div>
 <div class="block">Removes RegionServer group associated with the given name.</div>
@@ -420,7 +433,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>balanceRSGroup</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.146">balanceRSGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.153">balanceRSGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName)
                        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/rsgroup/RSGroupAdmin.html#balanceRSGroup-java.lang.String-">RSGroupAdmin</a></code></span></div>
 <div class="block">Balance regions in the given RegionServer group.</div>
@@ -440,7 +453,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>listRSGroups</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.157">listRSGroups</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.164">listRSGroups</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.html#listRSGroups--">RSGroupAdmin</a></code></span></div>
 <div class="block">Lists current set of RegionServer groups.</div>
@@ -458,7 +471,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSGroupOfServer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.172">getRSGroupOfServer</a>(<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&nbsp;hostPort)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.179">getRSGroupOfServer</a>(<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&nbsp;hostPort)
                                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/rsgroup/RSGroupAdmin.html#getRSGroupOfServer-org.apache.hadoop.hbase.net.Address-">RSGroupAdmin</a></code></span></div>
 <div class="block">Retrieve the RSGroupInfo a server is affiliated to</div>
@@ -478,7 +491,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockList">
 <li class="blockList">
 <h4>moveServersAndTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.191">moveServersAndTables</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.198">moveServersAndTables</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tables,
                                  <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;targetGroup)
                           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>
@@ -502,7 +515,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>removeServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.212">removeServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#line.222">removeServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers)
                    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/rsgroup/RSGroupAdmin.html#removeServers-java.util.Set-">RSGroupAdmin</a></code></span></div>
 <div class="block">Remove decommissioned servers from rsgroup.

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index bf7ef69..e0eb9a0 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -137,9 +137,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.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 7ba3a64..dfa02b5 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -191,8 +191,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 9e8cf87..b3c8be7 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -532,14 +532,14 @@
 <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.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/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 5534e43..538dfb3 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 = "67f013430c9ba051385c45d72ee680c44eb88470";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "2a3f4a0a4eb7bb67985050b0e007576c468f217e";<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 = "Mon Mar 19 14:41:28 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Tue Mar 20 14:41:21 UTC 2018";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://asf920.gq1.ygridcore.net/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String srcChecksum = "02c8452e3f190dde4f27b36be9661beb";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "1875b6188f146a29b921f647138ace23";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html
index 3cec2fd..d654af2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html
@@ -29,289 +29,312 @@
 <span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.util.Collection;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.Collections;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.HashMap;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.List;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.Map;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.concurrent.Callable;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.concurrent.ExecutionException;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.Executors;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.TimeUnit;<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.commons.collections4.CollectionUtils;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.commons.collections4.MultiValuedMap;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.commons.collections4.multimap.ArrayListValuedHashMap;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.conf.Configuration;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<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.RegionInfo;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.slf4j.Logger;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.slf4j.LoggerFactory;<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hbase.thirdparty.com.google.common.cache.CacheBuilder;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hbase.thirdparty.com.google.common.cache.CacheLoader;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.Futures;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ListenableFuture;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ListeningExecutorService;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.MoreExecutors;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>/**<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * This will find where data for a region is located in HDFS. It ranks<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * {@link ServerName}'s by the size of the store files they are holding for a<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * given region.<a name="line.63"></a>
-<span class="sourceLineNo">064</span> *<a name="line.64"></a>
-<span class="sourceLineNo">065</span> */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>@InterfaceAudience.Private<a name="line.66"></a>
-<span class="sourceLineNo">067</span>class RegionLocationFinder {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private static final Logger LOG = LoggerFactory.getLogger(RegionLocationFinder.class);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private static final long CACHE_TIME = 240 * 60 * 1000;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private static final HDFSBlocksDistribution EMPTY_BLOCK_DISTRIBUTION = new HDFSBlocksDistribution();<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private Configuration conf;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private volatile ClusterMetrics status;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private MasterServices services;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private final ListeningExecutorService executor;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  // Do not scheduleFullRefresh at master startup<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private long lastFullRefresh = EnvironmentEdgeManager.currentTime();<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private CacheLoader&lt;RegionInfo, HDFSBlocksDistribution&gt; loader =<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      new CacheLoader&lt;RegionInfo, HDFSBlocksDistribution&gt;() {<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>    @Override<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    public ListenableFuture&lt;HDFSBlocksDistribution&gt; reload(final RegionInfo hri,<a name="line.82"></a>
-<span class="sourceLineNo">083</span>        HDFSBlocksDistribution oldValue) throws Exception {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      return executor.submit(new Callable&lt;HDFSBlocksDistribution&gt;() {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>        @Override<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        public HDFSBlocksDistribution call() throws Exception {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>          return internalGetTopBlockLocation(hri);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>        }<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      });<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">024</span>import java.util.HashMap;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.Callable;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.concurrent.ExecutionException;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.concurrent.Executors;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.concurrent.TimeUnit;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.conf.Configuration;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.ServerName;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.TableName;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.slf4j.Logger;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.slf4j.LoggerFactory;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hbase.thirdparty.com.google.common.cache.CacheBuilder;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hbase.thirdparty.com.google.common.cache.CacheLoader;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.Futures;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ListenableFuture;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ListeningExecutorService;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.MoreExecutors;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<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 will find where data for a region is located in HDFS. It ranks<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * {@link ServerName}'s by the size of the store files they are holding for a<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * given region.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> *<a name="line.58"></a>
+<span class="sourceLineNo">059</span> */<a name="line.59"></a>
+<span class="sourceLineNo">060</span>@InterfaceAudience.Private<a name="line.60"></a>
+<span class="sourceLineNo">061</span>class RegionLocationFinder {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private static final Logger LOG = LoggerFactory.getLogger(RegionLocationFinder.class);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static final long CACHE_TIME = 240 * 60 * 1000;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private static final HDFSBlocksDistribution EMPTY_BLOCK_DISTRIBUTION = new HDFSBlocksDistribution();<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private Configuration conf;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private volatile ClusterMetrics status;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private MasterServices services;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private final ListeningExecutorService executor;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  // Do not scheduleFullRefresh at master startup<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private long lastFullRefresh = EnvironmentEdgeManager.currentTime();<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private CacheLoader&lt;RegionInfo, HDFSBlocksDistribution&gt; loader =<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      new CacheLoader&lt;RegionInfo, HDFSBlocksDistribution&gt;() {<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>    @Override<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    public ListenableFuture&lt;HDFSBlocksDistribution&gt; reload(final RegionInfo hri,<a name="line.76"></a>
+<span class="sourceLineNo">077</span>        HDFSBlocksDistribution oldValue) throws Exception {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      return executor.submit(new Callable&lt;HDFSBlocksDistribution&gt;() {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        @Override<a name="line.79"></a>
+<span class="sourceLineNo">080</span>        public HDFSBlocksDistribution call() throws Exception {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>          return internalGetTopBlockLocation(hri);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        }<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      });<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>    @Override<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    public HDFSBlocksDistribution load(RegionInfo key) throws Exception {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      return internalGetTopBlockLocation(key);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  };<a name="line.90"></a>
 <span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>    @Override<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    public HDFSBlocksDistribution load(RegionInfo key) throws Exception {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      return internalGetTopBlockLocation(key);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  };<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  // The cache for where regions are located.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private LoadingCache&lt;RegionInfo, HDFSBlocksDistribution&gt; cache = null;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  RegionLocationFinder() {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    this.cache = createCache();<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    executor = MoreExecutors.listeningDecorator(<a name="line.103"></a>
-<span class="sourceLineNo">104</span>        Executors.newScheduledThreadPool(<a name="line.104"></a>
-<span class="sourceLineNo">105</span>            5,<a name="line.105"></a>
-<span class="sourceLineNo">106</span>            new ThreadFactoryBuilder().<a name="line.106"></a>
-<span class="sourceLineNo">107</span>                setDaemon(true)<a name="line.107"></a>
-<span class="sourceLineNo">108</span>                .setNameFormat("region-location-%d")<a name="line.108"></a>
-<span class="sourceLineNo">109</span>                .build()));<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>  /**<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * Create a cache for region to list of servers<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * @return A new Cache.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  private LoadingCache&lt;RegionInfo, HDFSBlocksDistribution&gt; createCache() {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    return CacheBuilder.newBuilder()<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        .expireAfterWrite(CACHE_TIME, TimeUnit.MILLISECONDS)<a name="line.118"></a>
-<span class="sourceLineNo">119</span>        .build(loader);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public Configuration getConf() {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    return conf;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public void setConf(Configuration conf) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    this.conf = conf;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>  public void setServices(MasterServices services) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    this.services = services;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  public void setClusterMetrics(ClusterMetrics status) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    this.status = status;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    if (currentTime &gt; lastFullRefresh + (CACHE_TIME / 2)) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      // Only count the refresh if it includes user tables ( eg more than meta and namespace ).<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      lastFullRefresh = scheduleFullRefresh()?currentTime:lastFullRefresh;<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><a name="line.142"></a>
-<span class="sourceLineNo">143</span>  /**<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * Refresh all the region locations.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   *<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @return true if user created regions got refreshed.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private boolean scheduleFullRefresh() {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    // Protect from anything being null while starting up.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    if (services == null) {<a name="line.150"></a>
+<span class="sourceLineNo">092</span>  // The cache for where regions are located.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private LoadingCache&lt;RegionInfo, HDFSBlocksDistribution&gt; cache = null;<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  RegionLocationFinder() {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    this.cache = createCache();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    executor = MoreExecutors.listeningDecorator(<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        Executors.newScheduledThreadPool(<a name="line.98"></a>
+<span class="sourceLineNo">099</span>            5,<a name="line.99"></a>
+<span class="sourceLineNo">100</span>            new ThreadFactoryBuilder().<a name="line.100"></a>
+<span class="sourceLineNo">101</span>                setDaemon(true)<a name="line.101"></a>
+<span class="sourceLineNo">102</span>                .setNameFormat("region-location-%d")<a name="line.102"></a>
+<span class="sourceLineNo">103</span>                .build()));<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<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>   * Create a cache for region to list of servers<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * @return A new Cache.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  private LoadingCache&lt;RegionInfo, HDFSBlocksDistribution&gt; createCache() {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    return CacheBuilder.newBuilder()<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        .expireAfterWrite(CACHE_TIME, TimeUnit.MILLISECONDS)<a name="line.112"></a>
+<span class="sourceLineNo">113</span>        .build(loader);<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>  public Configuration getConf() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    return conf;<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>  public void setConf(Configuration conf) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    this.conf = conf;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  }<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public void setServices(MasterServices services) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    this.services = services;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public void setClusterMetrics(ClusterMetrics status) {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    this.status = status;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    if (currentTime &gt; lastFullRefresh + (CACHE_TIME / 2)) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      // Only count the refresh if it includes user tables ( eg more than meta and namespace ).<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      lastFullRefresh = scheduleFullRefresh()?currentTime:lastFullRefresh;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><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>  /**<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * Refresh all the region locations.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   *<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * @return true if user created regions got refreshed.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  private boolean scheduleFullRefresh() {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    // Protect from anything being null while starting up.<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    if (services == null) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      return false;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>    final AssignmentManager am = services.getAssignmentManager();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (am == null) {<a name="line.150"></a>
 <span class="sourceLineNo">151</span>      return false;<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>    final AssignmentManager am = services.getAssignmentManager();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    if (am == null) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      return false;<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>    // TODO: Should this refresh all the regions or only the ones assigned?<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    boolean includesUserTables = false;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    for (final RegionInfo hri : am.getAssignedRegions()) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      cache.refresh(hri);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      includesUserTables = includesUserTables || !hri.getTable().isSystemTable();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    return includesUserTables;<a name="line.165"></a>
+<span class="sourceLineNo">154</span>    // TODO: Should this refresh all the regions or only the ones assigned?<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    boolean includesUserTables = false;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    for (final RegionInfo hri : am.getAssignedRegions()) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      cache.refresh(hri);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      includesUserTables = includesUserTables || !hri.getTable().isSystemTable();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    return includesUserTables;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>  protected List&lt;ServerName&gt; getTopBlockLocations(RegionInfo region) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    List&lt;String&gt; topHosts = getBlockDistribution(region).getTopHosts();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    return mapHostNameToServerName(topHosts);<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>  protected List&lt;ServerName&gt; getTopBlockLocations(RegionInfo region) {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    List&lt;String&gt; topHosts = getBlockDistribution(region).getTopHosts();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    return mapHostNameToServerName(topHosts);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>  /**<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * Returns an ordered list of hosts which have better locality for this region<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * than the current host.<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  protected List&lt;ServerName&gt; getTopBlockLocations(RegionInfo region, String currentHost) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    HDFSBlocksDistribution blocksDistribution = getBlockDistribution(region);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    List&lt;String&gt; topHosts = blocksDistribution.getTopHosts();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    int toIndex = topHosts.indexOf(currentHost);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    List&lt;String&gt; subTopHosts = (toIndex &lt; 0) ? topHosts : topHosts.subList(0, toIndex);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    return mapHostNameToServerName(subTopHosts);<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>   * Returns an ordered list of hosts that are hosting the blocks for this<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * region. The weight of each host is the sum of the block lengths of all<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * files on that host, so the first host in the list is the server which holds<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * the most bytes of the given region's HFiles.<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   *<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param region region<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @return ordered list of hosts holding blocks of the specified region<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  protected HDFSBlocksDistribution internalGetTopBlockLocation(RegionInfo region) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    try {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      TableDescriptor tableDescriptor = getTableDescriptor(region.getTable());<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      if (tableDescriptor != null) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        HDFSBlocksDistribution blocksDistribution =<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            HRegion.computeHDFSBlocksDistribution(getConf(), tableDescriptor, region);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        return blocksDistribution;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    } catch (IOException ioe) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      LOG.warn("IOException during HDFSBlocksDistribution computation. for " + "region = "<a name="line.203"></a>
-<span class="sourceLineNo">204</span>          + region.getEncodedName(), ioe);<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>    return EMPTY_BLOCK_DISTRIBUTION;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  }<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>  /**<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * return TableDescriptor for a given tableName<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   *<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * @param tableName the table name<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * @return TableDescriptor<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   * @throws IOException if table descriptor cannot be loaded<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  protected TableDescriptor getTableDescriptor(TableName tableName) throws IOException {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    TableDescriptor tableDescriptor = null;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    try {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      if (this.services != null &amp;&amp; this.services.getTableDescriptors() != null) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        tableDescriptor = this.services.getTableDescriptors().get(tableName);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    } catch (FileNotFoundException fnfe) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      LOG.debug("FileNotFoundException during getTableDescriptors. Current table name =  {}",<a name="line.224"></a>
-<span class="sourceLineNo">225</span>          tableName, fnfe);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>    return tableDescriptor;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * Map hostname to ServerName, The output ServerName list will have the same<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * order as input hosts.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   *<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * @param hosts the list of hosts<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * @return ServerName list<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected List&lt;ServerName&gt; mapHostNameToServerName(List&lt;String&gt; hosts) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    if (hosts == null) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      LOG.warn("RegionLocationFinder top hosts is null");<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return Collections.emptyList();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    if (status == null) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return Collections.emptyList();<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>    List&lt;ServerName&gt; topServerNames = new ArrayList&lt;&gt;();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    Collection&lt;ServerName&gt; regionServers = status.getLiveServerMetrics().keySet();<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>    // create a mapping from hostname to ServerName for fast lookup<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    MultiValuedMap&lt;String, ServerName&gt; hostToServerName = new ArrayListValuedHashMap&lt;&gt;();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    for (ServerName sn : regionServers) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      String hostName = sn.getHostname();<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      hostToServerName.put(hostName, sn);<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>    for (String host : hosts) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      for (ServerName sn : hostToServerName.get(host)) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        // it is possible that HDFS is up ( thus host is valid ),<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        // but RS is down ( thus sn is null )<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        CollectionUtils.addIgnoreNull(topServerNames, sn);<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>    return topServerNames;<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>  public HDFSBlocksDistribution getBlockDistribution(RegionInfo hri) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    return cache.getUnchecked(hri);<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>  private ListenableFuture&lt;HDFSBlocksDistribution&gt; asyncGetBlockDistribution(<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      RegionInfo hri) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    try {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return loader.reload(hri, EMPTY_BLOCK_DISTRIBUTION);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    } catch (Exception e) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      return Futures.immediateFuture(EMPTY_BLOCK_DISTRIBUTION);<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><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  public void refreshAndWait(Collection&lt;RegionInfo&gt; hris) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    Map&lt;RegionInfo, ListenableFuture&lt;HDFSBlocksDistribution&gt;&gt; regionLocationFutures =<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        new HashMap&lt;&gt;(hris.size() * 2);<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    for (RegionInfo hregionInfo : hris) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      regionLocationFutures.put(hregionInfo, asyncGetBlockDistribution(hregionInfo));<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    for (RegionInfo hregionInfo : hris) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      ListenableFuture&lt;HDFSBlocksDistribution&gt; future = regionLocationFutures<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          .get(hregionInfo);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      try {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        cache.put(hregionInfo, future.get());<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      } catch (InterruptedException ite) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        Thread.currentThread().interrupt();<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      } catch (ExecutionException ee) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        LOG.debug(<a name="line.295"></a>
-<span class="sourceLineNo">296</span>            "ExecutionException during HDFSBlocksDistribution computation. for region = {}",<a name="line.296"></a>
-<span class="sourceLineNo">297</span>                hregionInfo.getEncodedName(), ee);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      }<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>  // For test<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  LoadingCache&lt;RegionInfo, HDFSBlocksDistribution&gt; getCache() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    return cache;<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">168</span>  /**<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * Returns an ordered list of hosts which have better locality for this region<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * than the current host.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  protected List&lt;ServerName&gt; getTopBlockLocations(RegionInfo region, String currentHost) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    HDFSBlocksDistribution blocksDistribution = getBlockDistribution(region);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    List&lt;String&gt; topHosts = new ArrayList&lt;&gt;();<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    for (String host : blocksDistribution.getTopHosts()) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      if (host.equals(currentHost)) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        break;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      }<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      topHosts.add(host);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    return mapHostNameToServerName(topHosts);<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>   * Returns an ordered list of hosts that are hosting the blocks for this<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * region. The weight of each host is the sum of the block lengths of all<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   * files on that host, so the first host in the list is the server which holds<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * the most bytes of the given region's HFiles.<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   *<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * @param region region<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * @return ordered list of hosts holding blocks of the specified region<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  protected HDFSBlocksDistribution internalGetTopBlockLocation(RegionInfo region) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    try {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      TableDescriptor tableDescriptor = getTableDescriptor(region.getTable());<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (tableDescriptor != null) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        HDFSBlocksDistribution blocksDistribution =<a name="line.197"></a>
+<span class="sourceLineNo">198</span>            HRegion.computeHDFSBlocksDistribution(getConf(), tableDescriptor, region);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        return blocksDistribution;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    } catch (IOException ioe) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      LOG.warn("IOException during HDFSBlocksDistribution computation. for " + "region = "<a name="line.202"></a>
+<span class="sourceLineNo">203</span>          + region.getEncodedName(), ioe);<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>    return EMPTY_BLOCK_DISTRIBUTION;<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>  /**<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * return TableDescriptor for a given tableName<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   *<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * @param tableName the table name<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * @return TableDescriptor<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * @throws IOException<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   */<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  protected TableDescriptor getTableDescriptor(TableName tableName) throws IOException {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    TableDescriptor tableDescriptor = null;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    try {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      if (this.services != null &amp;&amp; this.services.getTableDescriptors() != null) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        tableDescriptor = this.services.getTableDescriptors().get(tableName);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    } catch (FileNotFoundException fnfe) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      LOG.debug("FileNotFoundException during getTableDescriptors." + " Current table name = "<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          + tableName, fnfe);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>    return tableDescriptor;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>  /**<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * Map hostname to ServerName, The output ServerName list will have the same<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * order as input hosts.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   *<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * @param hosts the list of hosts<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * @return ServerName list<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  protected List&lt;ServerName&gt; mapHostNameToServerName(List&lt;String&gt; hosts) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    if (hosts == null || status == null) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      if (hosts == null) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        LOG.warn("RegionLocationFinder top hosts is null");<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      }<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      return Lists.newArrayList();<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>    List&lt;ServerName&gt; topServerNames = new ArrayList&lt;&gt;();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    Collection&lt;ServerName&gt; regionServers = status.getLiveServerMetrics().keySet();<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>    // create a mapping from hostname to ServerName for fast lookup<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    HashMap&lt;String, List&lt;ServerName&gt;&gt; hostToServerName = new HashMap&lt;&gt;();<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    for (ServerName sn : regionServers) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      String host = sn.getHostname();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      if (!hostToServerName.containsKey(host)) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        hostToServerName.put(host, new ArrayList&lt;&gt;());<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      hostToServerName.get(host).add(sn);<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>    for (String host : hosts) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      if (!hostToServerName.containsKey(host)) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        continue;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      for (ServerName sn : hostToServerName.get(host)) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        // it is possible that HDFS is up ( thus host is valid ),<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        // but RS is down ( thus sn is null )<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        if (sn != null) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          topServerNames.add(sn);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      }<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return topServerNames;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  public HDFSBlocksDistribution getBlockDistribution(RegionInfo hri) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    HDFSBlocksDistribution blockDistbn = null;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    try {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      if (cache.asMap().containsKey(hri)) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        blockDistbn = cache.get(hri);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        return blockDistbn;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      } else {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        LOG.debug("HDFSBlocksDistribution not found in cache for region "<a name="line.280"></a>
+<span class="sourceLineNo">281</span>            + hri.getRegionNameAsString());<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        blockDistbn = internalGetTopBlockLocation(hri);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>        cache.put(hri, blockDistbn);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        return blockDistbn;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      }<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    } catch (ExecutionException e) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      LOG.warn("Error while fetching cache entry ", e);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      blockDistbn = internalGetTopBlockLocation(hri);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      cache.put(hri, blockDistbn);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      return blockDistbn;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    }<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 ListenableFuture&lt;HDFSBlocksDistribution&gt; asyncGetBlockDistribution(<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      RegionInfo hri) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    try {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      return loader.reload(hri, EMPTY_BLOCK_DISTRIBUTION);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    } catch (Exception e) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      return Futures.immediateFuture(EMPTY_BLOCK_DISTRIBUTION);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public void refreshAndWait(Collection&lt;RegionInfo&gt; hris) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    ArrayList&lt;ListenableFuture&lt;HDFSBlocksDistribution&gt;&gt; regionLocationFutures = new ArrayList&lt;&gt;(hris.size());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    for (RegionInfo hregionInfo : hris) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      regionLocationFutures.add(asyncGetBlockDistribution(hregionInfo));<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    }<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    int index = 0;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    for (RegionInfo hregionInfo : hris) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      ListenableFuture&lt;HDFSBlocksDistribution&gt; future = regionLocationFutures<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          .get(index);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      try {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        cache.put(hregionInfo, future.get());<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      } catch (InterruptedException ite) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        Thread.currentThread().interrupt();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      } catch (ExecutionException ee) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        LOG.debug(<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            "ExecutionException during HDFSBlocksDistribution computation. for region = "<a name="line.318"></a>
+<span class="sourceLineNo">319</span>                + hregionInfo.getEncodedName(), ee);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      index++;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>  // For test<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  LoadingCache&lt;RegionInfo, HDFSBlocksDistribution&gt; getCache() {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    return cache;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>}<a name="line.329"></a>
 
 
 


[15/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html
index 9ae7fb8..1b6c6d1 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.319">MemStoreFlusher.FlushHandler</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.320">MemStoreFlusher.FlushHandler</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" title="class in org.apache.hadoop.hbase.util">HasThread</a></pre>
 </li>
 </ul>
@@ -200,7 +200,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FlushHandler</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html#line.321">FlushHandler</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html#line.322">FlushHandler</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 </li>
 </ul>
 </li>
@@ -217,7 +217,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html#line.326">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html#line.327">run</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><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></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushQueueEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushQueueEntry.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushQueueEntry.html
index f55aeb0..89f548d 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushQueueEntry.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushQueueEntry.html
@@ -107,7 +107,7 @@
 </dl>
 <hr>
 <br>
-<pre>static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.809">MemStoreFlusher.FlushQueueEntry</a>
+<pre>static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.814">MemStoreFlusher.FlushQueueEntry</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Delayed.html?is-external=true" title="class or interface in java.util.concurrent">Delayed</a></pre>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html
index 9a2d503..aee5adb 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.820">MemStoreFlusher.FlushRegionEntry</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.825">MemStoreFlusher.FlushRegionEntry</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/regionserver/MemStoreFlusher.FlushQueueEntry.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushQueueEntry</a></pre>
 <div class="block">Datastructure used in the flush queue.  Holds region and retry count.
@@ -270,7 +270,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>region</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.821">region</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.826">region</a></pre>
 </li>
 </ul>
 <a name="createTime">
@@ -279,7 +279,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>createTime</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.823">createTime</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.828">createTime</a></pre>
 </li>
 </ul>
 <a name="whenToExpire">
@@ -288,7 +288,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>whenToExpire</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.824">whenToExpire</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.829">whenToExpire</a></pre>
 </li>
 </ul>
 <a name="requeueCount">
@@ -297,7 +297,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>requeueCount</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.825">requeueCount</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.830">requeueCount</a></pre>
 </li>
 </ul>
 <a name="forceFlushAllStores">
@@ -306,7 +306,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>forceFlushAllStores</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.827">forceFlushAllStores</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.832">forceFlushAllStores</a></pre>
 </li>
 </ul>
 <a name="tracker">
@@ -315,7 +315,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockListLast">
 <li class="blockList">
 <h4>tracker</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.829">tracker</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.834">tracker</a></pre>
 </li>
 </ul>
 </li>
@@ -332,7 +332,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FlushRegionEntry</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.831">FlushRegionEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.836">FlushRegionEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
                  boolean&nbsp;forceFlushAllStores,
                  <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a>&nbsp;tracker)</pre>
 </li>
@@ -351,7 +351,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>isMaximumWait</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.843">isMaximumWait</a>(long&nbsp;maximumWait)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.848">isMaximumWait</a>(long&nbsp;maximumWait)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>maximumWait</code> - </dd>
@@ -366,7 +366,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>getRequeueCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.851">getRequeueCount</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.856">getRequeueCount</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Count of times <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#requeue-long-"><code>requeue(long)</code></a> was called; i.e this is
@@ -380,7 +380,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>isForceFlushAllStores</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.858">isForceFlushAllStores</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.863">isForceFlushAllStores</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>whether we need to flush all stores.</dd>
@@ -393,7 +393,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>getTracker</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.862">getTracker</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.867">getTracker</a>()</pre>
 </li>
 </ul>
 <a name="requeue-long-">
@@ -402,7 +402,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>requeue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushRegionEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.872">requeue</a>(long&nbsp;when)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushRegionEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.877">requeue</a>(long&nbsp;when)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>when</code> - When to expire, when to come up out of the queue.
@@ -419,7 +419,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>getDelay</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.879">getDelay</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.884">getDelay</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Delayed.html?is-external=true#getDelay-java.util.concurrent.TimeUnit-" title="class or interface in java.util.concurrent">getDelay</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Delayed.html?is-external=true" title="class or interface in java.util.concurrent">Delayed</a></code></dd>
@@ -432,7 +432,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.885">compareTo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Delayed.html?is-external=true" title="class or interface in java.util.concurrent">Delayed</a>&nbsp;other)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.890">compareTo</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Delayed.html?is-external=true" title="class or interface in java.util.concurrent">Delayed</a>&nbsp;other)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true#compareTo-T-" title="class or interface in java.lang">compareTo</a></code>&nbsp;in interface&nbsp;<code><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;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Delayed.html?is-external=true" title="class or interface in java.util.concurrent">Delayed</a>&gt;</code></dd>
@@ -445,7 +445,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <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/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.897">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/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.902">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>
@@ -458,7 +458,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStore
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.902">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.907">hashCode</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#hashCode--" title="class or interface in java.lang">hashCode</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/regionserver/MemStore
 <ul class="blockListLast">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.908">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html#line.913">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</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#equals-java.lang.Object-" title="class or interface in java.lang">equals</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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html
index 84c8529..2b6dc7b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.69">MemStoreFlusher</a>
+class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.70">MemStoreFlusher</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/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a></pre>
 <div class="block">Thread that flushes cache on request
@@ -295,12 +295,12 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreOfRegionReplica-java.util.SortedMap-java.util.Set-">getBiggestMemStoreOfRegionReplica</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;regionsBySize,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreOfRegionReplica-java.util.SortedMap-java.util.Set-">getBiggestMemStoreOfRegionReplica</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;regionsBySize,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;excludedRegions)</code>&nbsp;</td>
 </tr>
 <tr id="i5" class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreRegion-java.util.SortedMap-java.util.Set-boolean-">getBiggestMemStoreRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;regionsBySize,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreRegion-java.util.SortedMap-java.util.Set-boolean-">getBiggestMemStoreRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;regionsBySize,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;excludedRegions,
                         boolean&nbsp;checkStoreFileCount)</code>&nbsp;</td>
 </tr>
@@ -458,7 +458,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <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/regionserver/MemStoreFlusher.html#line.70">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.71">LOG</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -467,7 +467,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.72">conf</a></pre>
+<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.73">conf</a></pre>
 </li>
 </ul>
 <a name="flushQueue">
@@ -476,7 +476,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>flushQueue</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushQueueEntry.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushQueueEntry</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.75">flushQueue</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushQueueEntry.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushQueueEntry</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.76">flushQueue</a></pre>
 </li>
 </ul>
 <a name="regionsInQueue">
@@ -485,7 +485,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsInQueue</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushRegionEntry</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.76">regionsInQueue</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushRegionEntry</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.77">regionsInQueue</a></pre>
 </li>
 </ul>
 <a name="wakeupPending">
@@ -494,7 +494,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>wakeupPending</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.77">wakeupPending</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.78">wakeupPending</a></pre>
 </li>
 </ul>
 <a name="threadWakeFrequency">
@@ -503,7 +503,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>threadWakeFrequency</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.79">threadWakeFrequency</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.80">threadWakeFrequency</a></pre>
 </li>
 </ul>
 <a name="server">
@@ -512,7 +512,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>server</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.80">server</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.81">server</a></pre>
 </li>
 </ul>
 <a name="lock">
@@ -521,7 +521,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>lock</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantReadWriteLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.81">lock</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantReadWriteLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.82">lock</a></pre>
 </li>
 </ul>
 <a name="blockSignal">
@@ -530,7 +530,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>blockSignal</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.82">blockSignal</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.83">blockSignal</a></pre>
 </li>
 </ul>
 <a name="blockingWaitTime">
@@ -539,7 +539,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>blockingWaitTime</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.84">blockingWaitTime</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.85">blockingWaitTime</a></pre>
 </li>
 </ul>
 <a name="updatesBlockedMsHighWater">
@@ -548,7 +548,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>updatesBlockedMsHighWater</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.85">updatesBlockedMsHighWater</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.86">updatesBlockedMsHighWater</a></pre>
 </li>
 </ul>
 <a name="flushHandlers">
@@ -557,7 +557,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>flushHandlers</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushHandler</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.87">flushHandlers</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushHandler</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.88">flushHandlers</a></pre>
 </li>
 </ul>
 <a name="flushRequestListeners">
@@ -566,7 +566,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>flushRequestListeners</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequestListener.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequestListener</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.88">flushRequestListeners</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequestListener.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequestListener</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.89">flushRequestListeners</a></pre>
 </li>
 </ul>
 <a name="flushType">
@@ -575,7 +575,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>flushType</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver">FlushType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.90">flushType</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver">FlushType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.91">flushType</a></pre>
 </li>
 </ul>
 <a name="WAKEUPFLUSH_INSTANCE">
@@ -584,7 +584,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WAKEUPFLUSH_INSTANCE</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushQueueEntry.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushQueueEntry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.95">WAKEUPFLUSH_INSTANCE</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushQueueEntry.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushQueueEntry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.96">WAKEUPFLUSH_INSTANCE</a></pre>
 <div class="block">Singleton instance inserted into flush queue used for signaling.</div>
 </li>
 </ul>
@@ -602,7 +602,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MemStoreFlusher</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.122">MemStoreFlusher</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.123">MemStoreFlusher</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;server)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -625,7 +625,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>getUpdatesBlockedMsHighWater</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.143">getUpdatesBlockedMsHighWater</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.144">getUpdatesBlockedMsHighWater</a>()</pre>
 </li>
 </ul>
 <a name="setFlushType-org.apache.hadoop.hbase.regionserver.FlushType-">
@@ -634,7 +634,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>setFlushType</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.147">setFlushType</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver">FlushType</a>&nbsp;flushType)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.148">setFlushType</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver">FlushType</a>&nbsp;flushType)</pre>
 </li>
 </ul>
 <a name="flushOneForGlobalPressure--">
@@ -643,7 +643,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>flushOneForGlobalPressure</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.157">flushOneForGlobalPressure</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.158">flushOneForGlobalPressure</a>()</pre>
 <div class="block">The memstore across all regions has exceeded the low water mark. Pick
  one region to flush and flush it synchronously (this is called from the
  flush thread)</div>
@@ -659,7 +659,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>getMemStoreOffHeapSize</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.301">getMemStoreOffHeapSize</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.302">getMemStoreOffHeapSize</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return memstore offheap size or null if <code>r</code> is null</dd>
@@ -672,7 +672,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>getMemStoreHeapSize</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.308">getMemStoreHeapSize</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.309">getMemStoreHeapSize</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return memstore heap size or null if <code>r</code> is null</dd>
@@ -685,7 +685,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>getMemStoreDataSize</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.315">getMemStoreDataSize</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.316">getMemStoreDataSize</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return memstore data size or null if <code>r</code> is null</dd>
@@ -698,7 +698,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>wakeupFlushThread</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.383">wakeupFlushThread</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.384">wakeupFlushThread</a>()</pre>
 </li>
 </ul>
 <a name="getBiggestMemStoreRegion-java.util.SortedMap-java.util.Set-boolean-">
@@ -707,7 +707,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>getBiggestMemStoreRegion</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.389">getBiggestMemStoreRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;regionsBySize,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.390">getBiggestMemStoreRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;regionsBySize,
                                          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;excludedRegions,
                                          boolean&nbsp;checkStoreFileCount)</pre>
 </li>
@@ -718,7 +718,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>getBiggestMemStoreOfRegionReplica</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.412">getBiggestMemStoreOfRegionReplica</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;regionsBySize,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.415">getBiggestMemStoreOfRegionReplica</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&gt;&nbsp;regionsBySize,
                                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;excludedRegions)</pre>
 </li>
 </ul>
@@ -728,7 +728,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshStoreFilesAndReclaimMemory</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.430">refreshStoreFilesAndReclaimMemory</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.435">refreshStoreFilesAndReclaimMemory</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
 </li>
 </ul>
 <a name="isAboveHighWaterMark--">
@@ -737,7 +737,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>isAboveHighWaterMark</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver">FlushType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.442">isAboveHighWaterMark</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver">FlushType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.447">isAboveHighWaterMark</a>()</pre>
 <div class="block">Return true if global memory usage is above the high watermark</div>
 </li>
 </ul>
@@ -747,7 +747,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>isAboveLowWaterMark</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver">FlushType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.449">isAboveLowWaterMark</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver">FlushType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.454">isAboveLowWaterMark</a>()</pre>
 <div class="block">Return true if we're above the low watermark</div>
 </li>
 </ul>
@@ -757,7 +757,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>requestFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.454">requestFlush</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.459">requestFlush</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
                          boolean&nbsp;forceFlushAllStores,
                          <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a>&nbsp;tracker)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html#requestFlush-org.apache.hadoop.hbase.regionserver.HRegion-boolean-org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker-">FlushRequester</a></code></span></div>
@@ -778,7 +778,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>requestDelayedFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.470">requestDelayedFlush</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.475">requestDelayedFlush</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
                                 long&nbsp;delay,
                                 boolean&nbsp;forceFlushAllStores)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html#requestDelayedFlush-org.apache.hadoop.hbase.regionserver.HRegion-long-boolean-">FlushRequester</a></code></span></div>
@@ -800,7 +800,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushQueueSize</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.484">getFlushQueueSize</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.489">getFlushQueueSize</a>()</pre>
 </li>
 </ul>
 <a name="interruptIfNecessary--">
@@ -809,7 +809,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>interruptIfNecessary</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.491">interruptIfNecessary</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.496">interruptIfNecessary</a>()</pre>
 <div class="block">Only interrupt once it's done with a run through the work loop.</div>
 </li>
 </ul>
@@ -819,7 +819,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.502">start</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.UncaughtExceptionHandler.html?is-external=true" title="class or interface in java.lang">Thread.UncaughtExceptionHandler</a>&nbsp;eh)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.507">start</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.UncaughtExceptionHandler.html?is-external=true" title="class or interface in java.lang">Thread.UncaughtExceptionHandler</a>&nbsp;eh)</pre>
 </li>
 </ul>
 <a name="isAlive--">
@@ -828,7 +828,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>isAlive</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.512">isAlive</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.517">isAlive</a>()</pre>
 </li>
 </ul>
 <a name="join--">
@@ -837,7 +837,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>join</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.521">join</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.526">join</a>()</pre>
 </li>
 </ul>
 <a name="flushRegion-org.apache.hadoop.hbase.regionserver.MemStoreFlusher.FlushRegionEntry-">
@@ -846,7 +846,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>flushRegion</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.537">flushRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushRegionEntry</a>&nbsp;fqe)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.542">flushRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher.FlushRegionEntry</a>&nbsp;fqe)</pre>
 <div class="block">A flushRegion that checks store file count.  If too many, puts the flush
  on delay queue to retry later.</div>
 <dl>
@@ -865,7 +865,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>flushRegion</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.586">flushRegion</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;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.591">flushRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                             boolean&nbsp;emergencyFlush,
                             boolean&nbsp;forceFlushAllStores,
                             <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a>&nbsp;tracker)</pre>
@@ -891,7 +891,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>notifyFlushRequest</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.637">notifyFlushRequest</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.642">notifyFlushRequest</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
                                 boolean&nbsp;emergencyFlush)</pre>
 </li>
 </ul>
@@ -901,7 +901,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>wakeUpIfBlocking</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.650">wakeUpIfBlocking</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.655">wakeUpIfBlocking</a>()</pre>
 </li>
 </ul>
 <a name="isTooManyStoreFiles-org.apache.hadoop.hbase.regionserver.Region-">
@@ -910,7 +910,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>isTooManyStoreFiles</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.656">isTooManyStoreFiles</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.661">isTooManyStoreFiles</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
 </li>
 </ul>
 <a name="reclaimMemStoreMemory--">
@@ -919,7 +919,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>reclaimMemStoreMemory</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.677">reclaimMemStoreMemory</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.682">reclaimMemStoreMemory</a>()</pre>
 <div class="block">Check if the regionserver's memstore memory usage is greater than the
  limit. If so, flush regions with the biggest memstores until we're down
  to the lower limit. This method blocks callers until we're down to a safe
@@ -932,7 +932,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>logMsg</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.754">logMsg</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;string1,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.759">logMsg</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;string1,
                     long&nbsp;val,
                     long&nbsp;max)</pre>
 </li>
@@ -943,7 +943,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <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/regionserver/MemStoreFlusher.html#line.761">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/regionserver/MemStoreFlusher.html#line.766">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>
@@ -956,7 +956,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>dumpQueue</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/regionserver/MemStoreFlusher.html#line.766">dumpQueue</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/regionserver/MemStoreFlusher.html#line.771">dumpQueue</a>()</pre>
 </li>
 </ul>
 <a name="registerFlushRequestListener-org.apache.hadoop.hbase.regionserver.FlushRequestListener-">
@@ -965,7 +965,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>registerFlushRequestListener</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.785">registerFlushRequestListener</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequestListener.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequestListener</a>&nbsp;listener)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.790">registerFlushRequestListener</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequestListener.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequestListener</a>&nbsp;listener)</pre>
 <div class="block">Register a MemstoreFlushListener</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -981,7 +981,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockList">
 <li class="blockList">
 <h4>unregisterFlushRequestListener</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.795">unregisterFlushRequestListener</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequestListener.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequestListener</a>&nbsp;listener)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.800">unregisterFlushRequestListener</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequestListener.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequestListener</a>&nbsp;listener)</pre>
 <div class="block">Unregister the listener from MemstoreFlushListeners</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -999,7 +999,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushReq
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setGlobalMemStoreLimit</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.804">setGlobalMemStoreLimit</a>(long&nbsp;globalMemStoreSize)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#line.809">setGlobalMemStoreLimit</a>(long&nbsp;globalMemStoreSize)</pre>
 <div class="block">Sets the global memstore limit to a new size.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>


[18/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.


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

Branch: refs/heads/asf-site
Commit: 648c9317b05761e039f46bbe99283eb88e799dc3
Parents: 509df2d
Author: jenkins <bu...@apache.org>
Authored: Tue Mar 20 14:53:18 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Tue Mar 20 14:53:18 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |    6 +-
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       |  176 +-
 checkstyle.rss                                  |    4 +-
 coc.html                                        |    4 +-
 cygwin.html                                     |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/constant-values.html                 |    6 +-
 devapidocs/index-all.html                       |    8 +-
 .../hadoop/hbase/backup/package-tree.html       |    6 +-
 .../hadoop/hbase/client/class-use/Admin.html    |   32 +-
 .../hadoop/hbase/client/package-tree.html       |   22 +-
 .../apache/hadoop/hbase/client/package-use.html |   17 +-
 .../hadoop/hbase/executor/package-tree.html     |    2 +-
 .../hadoop/hbase/filter/package-tree.html       |    8 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    6 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |    2 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |    2 +-
 .../master/balancer/RegionLocationFinder.html   |   56 +-
 .../hadoop/hbase/master/package-tree.html       |    4 +-
 .../hbase/master/procedure/package-tree.html    |    4 +-
 .../hadoop/hbase/monitoring/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   14 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    4 +-
 .../hadoop/hbase/quotas/package-tree.html       |    4 +-
 .../HRegionServer.MovedRegionInfo.html          |   16 +-
 .../HRegionServer.MovedRegionsCleaner.html      |   16 +-
 .../hbase/regionserver/HRegionServer.html       |  521 ++---
 .../MemStoreFlusher.FlushHandler.html           |    6 +-
 .../MemStoreFlusher.FlushQueueEntry.html        |    2 +-
 .../MemStoreFlusher.FlushRegionEntry.html       |   36 +-
 .../hbase/regionserver/MemStoreFlusher.html     |  100 +-
 .../hbase/regionserver/class-use/HRegion.html   |  154 +-
 .../hadoop/hbase/regionserver/package-tree.html |   20 +-
 .../regionserver/querymatcher/package-tree.html |    2 +-
 .../hadoop/hbase/rest/model/package-tree.html   |    2 +-
 .../hbase/rsgroup/RSGroupAdminClient.html       |   43 +-
 .../hbase/security/access/package-tree.html     |    2 +-
 .../hadoop/hbase/security/package-tree.html     |    2 +-
 .../apache/hadoop/hbase/util/package-tree.html  |    8 +-
 .../org/apache/hadoop/hbase/Version.html        |    6 +-
 .../master/balancer/RegionLocationFinder.html   |  577 ++---
 .../HRegionServer.CompactionChecker.html        | 1913 ++++++++---------
 .../HRegionServer.MovedRegionInfo.html          | 1913 ++++++++---------
 .../HRegionServer.MovedRegionsCleaner.html      | 1913 ++++++++---------
 .../HRegionServer.PeriodicMemStoreFlusher.html  | 1913 ++++++++---------
 .../hbase/regionserver/HRegionServer.html       | 1913 ++++++++---------
 .../MemStoreFlusher.FlushHandler.html           | 1785 ++++++++--------
 .../MemStoreFlusher.FlushQueueEntry.html        | 1785 ++++++++--------
 .../MemStoreFlusher.FlushRegionEntry.html       | 1785 ++++++++--------
 .../hbase/regionserver/MemStoreFlusher.html     | 1785 ++++++++--------
 .../hbase/rsgroup/RSGroupAdminClient.html       |  412 ++--
 export_control.html                             |    4 +-
 index.html                                      |    4 +-
 integration.html                                |    4 +-
 issue-tracking.html                             |    4 +-
 license.html                                    |    4 +-
 mail-lists.html                                 |    4 +-
 metrics.html                                    |    4 +-
 old_news.html                                   |    4 +-
 plugin-management.html                          |    4 +-
 plugins.html                                    |    4 +-
 poweredbyhbase.html                             |    4 +-
 project-info.html                               |    4 +-
 project-reports.html                            |    4 +-
 project-summary.html                            |    4 +-
 pseudo-distributed.html                         |    4 +-
 replication.html                                |    4 +-
 resources.html                                  |    4 +-
 source-repository.html                          |    4 +-
 sponsors.html                                   |    4 +-
 supportingprojects.html                         |    4 +-
 team-list.html                                  |    4 +-
 testdevapidocs/index-all.html                   |    2 +
 .../hadoop/hbase/io/hfile/package-tree.html     |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   10 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    2 +-
 .../hadoop/hbase/regionserver/package-tree.html |    4 +-
 .../hbase/rsgroup/IntegrationTestRSGroup.html   |    2 +-
 .../hadoop/hbase/rsgroup/TestRSGroups.html      |    2 +-
 .../hadoop/hbase/rsgroup/TestRSGroupsBase.html  |  114 +-
 .../hadoop/hbase/rsgroup/TestRSGroupsBase.html  | 2012 +++++++++---------
 87 files changed, 10748 insertions(+), 10535 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 1d05e40..e9e10da 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -594,7 +594,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index c7c31e9..75f2999 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20180319144648+00'00')
-/CreationDate (D:20180319144648+00'00')
+/ModDate (D:20180320144638+00'00')
+/CreationDate (D:20180320144638+00'00')
 >>
 endobj
 2 0 obj
@@ -27896,7 +27896,7 @@ endobj
 endobj
 136 0 obj
 << /Limits [(__anchor-top) (adding.new.node)]
-/Names [(__anchor-top) 25 0 R (__indexterm-7408244) 3454 0 R (__indexterm-7410648) 3456 0 R (__indexterm-7412188) 3458 0 R (__indexterm-7414372) 3459 0 R (acid) 916 0 R (acl) 3275 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3557 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3559 0 R (add.metrics) 3555 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3797 0 R (adding.new.node) 3024 0 R]
+/Names [(__anchor-top) 25 0 R (__indexterm-7408242) 3454 0 R (__indexterm-7410646) 3456 0 R (__indexterm-7412186) 3458 0 R (__indexterm-7414370) 3459 0 R (acid) 916 0 R (acl) 3275 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3557 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3559 0 R (add.metrics) 3555 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3797 0 R (adding.new.node) 3024 0 R]
 >>
 endobj
 137 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 3014d7d..6319c1e 100644
--- a/book.html
+++ b/book.html
@@ -37288,7 +37288,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-19 14:29:44 UTC
+Last updated 2018-03-20 14:29:42 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 9b1185b..5e1499a 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -299,7 +299,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index a640de7..5373c92 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -277,7 +277,7 @@
 <td>3585</td>
 <td>0</td>
 <td>0</td>
-<td>16084</td></tr></table></div>
+<td>16086</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -5135,7 +5135,7 @@
 <td><a href="#org.apache.hadoop.hbase.master.balancer.RegionLocationFinder.java">org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>1</td></tr>
+<td>3</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.ServerAndLoad.java">org/apache/hadoop/hbase/master/balancer/ServerAndLoad.java</a></td>
 <td>0</td>
@@ -10375,12 +10375,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="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3855</td>
+<td>3842</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>misc</td>
@@ -10398,7 +10398,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>1623</td>
+<td>1624</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
@@ -14823,7 +14823,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>43</td></tr></table></div>
 <div class="section">
@@ -15459,7 +15459,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">
@@ -17271,7 +17271,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 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">
@@ -20178,7 +20178,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 2 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>83</td></tr>
 <tr class="a">
@@ -34212,7 +34212,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 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">
@@ -50622,7 +50622,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 24 has parse error. Details: no viable alternative at input '&lt;key,' while parsing HTML_ELEMENT</td>
 <td>25</td></tr>
 <tr class="b">
@@ -54222,7 +54222,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 2 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>587</td></tr>
 <tr class="a">
@@ -68429,7 +68429,19 @@
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
-<td>70</td></tr></table></div>
+<td>64</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>214</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 109).</td>
+<td>304</td></tr></table></div>
 <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">
@@ -74022,7 +74034,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 60 has parse error. Missed HTML close tag 'Comparable'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>29</td></tr>
 <tr class="a">
@@ -78210,7 +78222,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 0 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>74</td></tr>
 <tr class="b">
@@ -82421,181 +82433,181 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2983</td></tr>
+<td>2988</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>2984</td></tr>
+<td>2989</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>3021</td></tr>
+<td>3026</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 5, expected level should be 4.</td>
-<td>3026</td></tr>
+<td>3031</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'synchronized' have incorrect indentation level 5, expected level should be 4.</td>
-<td>3027</td></tr>
+<td>3032</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' have incorrect indentation level 7, expected level should be 6.</td>
-<td>3028</td></tr>
+<td>3033</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' child have incorrect indentation level 9, expected level should be 8.</td>
-<td>3029</td></tr>
+<td>3034</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 9, expected level should be 8.</td>
-<td>3030</td></tr>
+<td>3035</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 11, expected level should be 10.</td>
-<td>3031</td></tr>
+<td>3036</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 9, expected level should be 8.</td>
-<td>3032</td></tr>
+<td>3037</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for rcurly' have incorrect indentation level 7, expected level should be 6.</td>
-<td>3033</td></tr>
+<td>3038</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'synchronized rcurly' have incorrect indentation level 5, expected level should be 4.</td>
-<td>3034</td></tr>
+<td>3039</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>3035</td></tr>
+<td>3040</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>3036</td></tr>
+<td>3041</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>3187</td></tr>
+<td>3192</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>3220</td></tr>
+<td>3225</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>3247</td></tr>
+<td>3252</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>3261</td></tr>
+<td>3266</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>3369</td></tr>
+<td>3374</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def rcurly' have incorrect indentation level 5, expected level should be 4.</td>
-<td>3391</td></tr>
+<td>3396</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 8, expected level should be 4.</td>
-<td>3463</td></tr>
+<td>3468</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 48 should have line break after.</td>
-<td>3484</td></tr>
+<td>3489</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 46 should have line break after.</td>
-<td>3485</td></tr>
+<td>3490</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
-<td>3532</td></tr>
+<td>3537</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>3552</td></tr>
+<td>3557</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>3554</td></tr>
+<td>3559</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>3555</td></tr>
+<td>3560</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>3556</td></tr>
+<td>3561</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>3557</td></tr>
+<td>3562</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' have incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>3558</td></tr></table></div>
+<td>3563</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.java">org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.java</h3>
 <table border="0" class="table table-striped">
@@ -83441,181 +83453,181 @@
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.trace.TraceUtil' import.</td>
-<td>46</td></tr>
+<td>47</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>119</td></tr>
+<td>120</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>120</td></tr>
+<td>121</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class FlushHandler should be declared as final.</td>
-<td>319</td></tr>
+<td>320</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 101).</td>
-<td>338</td></tr>
+<td>339</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>495</td></tr>
+<td>500</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>532</td></tr>
+<td>537</td></tr>
 <tr class="b">
 <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>534</td></tr>
+<td>539</td></tr>
 <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>535</td></tr>
+<td>540</td></tr>
 <tr class="b">
 <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>578</td></tr>
+<td>583</td></tr>
 <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>579</td></tr>
+<td>584</td></tr>
 <tr class="b">
 <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>580</td></tr>
+<td>585</td></tr>
 <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>583</td></tr>
+<td>588</td></tr>
 <tr class="b">
 <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>584</td></tr>
+<td>589</td></tr>
 <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 16, expected level should be 18.</td>
-<td>699</td></tr>
+<td>704</td></tr>
 <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 18, expected level should be 20.</td>
-<td>700</td></tr>
+<td>705</td></tr>
 <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 18, expected level should be 20.</td>
-<td>703</td></tr>
+<td>708</td></tr>
 <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 16, expected level should be 18.</td>
-<td>704</td></tr>
+<td>709</td></tr>
 <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 18, expected level should be 20.</td>
-<td>705</td></tr>
+<td>710</td></tr>
 <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 18, expected level should be 20.</td>
-<td>708</td></tr>
+<td>713</td></tr>
 <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 16, expected level should be 18.</td>
-<td>709</td></tr>
+<td>714</td></tr>
 <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 18, expected level should be 20.</td>
-<td>710</td></tr>
+<td>715</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>782</td></tr>
+<td>787</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>791</td></tr>
+<td>796</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>801</td></tr>
+<td>806</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>840</td></tr>
+<td>845</td></tr>
 <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>849</td></tr>
+<td>854</td></tr>
 <tr class="b">
 <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>868</td></tr>
+<td>873</td></tr>
 <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>869</td></tr>
+<td>874</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 3, expected level should be 4.</td>
-<td>907</td></tr></table></div>
+<td>912</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MemStoreLAB.java">org/apache/hadoop/hbase/regionserver/MemStoreLAB.java</h3>
 <table border="0" class="table table-striped">
@@ -88698,7 +88710,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 33 has parse error. Missed HTML close tag 'number'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>127</td></tr>
 <tr class="a">
@@ -117387,7 +117399,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 23 has parse error. Details: no viable alternative at input '&lt;expected,' while parsing HTML_ELEMENT</td>
 <td>143</td></tr>
 <tr class="a">
@@ -117597,7 +117609,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 78 has parse error. Details: no viable alternative at input '&lt;Object&gt;, Map&lt;String,' while parsing HTML_TAG</td>
 <td>33</td></tr>
 <tr class="b">
@@ -118218,7 +118230,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 35 has parse error. Missed HTML close tag 'index'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>796</td></tr>
 <tr class="b">
@@ -122025,7 +122037,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 58 has parse error. Details: no viable alternative at input '&lt;byte[' while parsing HTML_ELEMENT</td>
 <td>426</td></tr>
 <tr class="a">
@@ -124884,7 +124896,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 38dac95..6d90dba 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: 3585,
-             Errors: 16084,
+             Errors: 16086,
              Warnings: 0,
              Infos: 0
       </title>
@@ -3275,7 +3275,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  3
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index deb618b..4c7b148 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -368,7 +368,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/cygwin.html
----------------------------------------------------------------------
diff --git a/cygwin.html b/cygwin.html
index cb059c4..d4c7ee4 100644
--- a/cygwin.html
+++ b/cygwin.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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Installing Apache HBase (TM) on Windows using Cygwin</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -667,7 +667,7 @@ Now your <b>HBase </b>server is running, <b>start coding</b> and build that next
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-03-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 1a633fb..47335be 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -433,7 +433,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index be26553..8ca052c 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -1098,7 +1098,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index b29ad94..4811d60 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -306,7 +306,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 9d76dd4..a205147 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -974,7 +974,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index ede06a4..301b6af 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>"Mon Mar 19 14:41:28 UTC 2018"</code></td>
+<td class="colLast"><code>"Tue Mar 20 14:41:21 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>"67f013430c9ba051385c45d72ee680c44eb88470"</code></td>
+<td class="colLast"><code>"2a3f4a0a4eb7bb67985050b0e007576c468f217e"</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>"02c8452e3f190dde4f27b36be9661beb"</code></td>
+<td class="colLast"><code>"1875b6188f146a29b921f647138ace23"</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/648c9317/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index d5d1c54..677ffb0 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -2095,6 +2095,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-">addRegion(HRegion)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html#addRegion-java.util.SortedMap-org.apache.hadoop.hbase.regionserver.HRegion-long-">addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt;, HRegion, long)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MutableOnlineRegions.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-">addRegion(HRegion)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MutableOnlineRegions.html" title="interface in org.apache.hadoop.hbase.regionserver">MutableOnlineRegions</a></dt>
 <dd>
 <div class="block">Add to online regions.</div>
@@ -2622,6 +2624,8 @@
 <dd>
 <div class="block">The <a href="org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client"><code>Admin</code></a>.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#admin">admin</a></span> - Variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupAdminClient</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/Canary.Monitor.html#admin">admin</a></span> - Variable in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.Monitor</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/ConnectionCache.ConnectionInfo.html#admin">admin</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ConnectionCache.ConnectionInfo.html" title="class in org.apache.hadoop.hbase.util">ConnectionCache.ConnectionInfo</a></dt>
@@ -34569,9 +34573,9 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.html#getBestLocations-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.HDFSBlocksDistribution-">getBestLocations(Configuration, HDFSBlocksDistribution)</a></span> - Static method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.html" title="class in org.apache.hadoop.hbase.mapreduce">TableSnapshotInputFormatImpl</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreOfRegionReplica-java.util.SortedMap-java.util.Set-">getBiggestMemStoreOfRegionReplica(SortedMap&lt;Long, HRegion&gt;, Set&lt;HRegion&gt;)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreOfRegionReplica-java.util.SortedMap-java.util.Set-">getBiggestMemStoreOfRegionReplica(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt;, Set&lt;HRegion&gt;)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreRegion-java.util.SortedMap-java.util.Set-boolean-">getBiggestMemStoreRegion(SortedMap&lt;Long, HRegion&gt;, Set&lt;HRegion&gt;, boolean)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getBiggestMemStoreRegion-java.util.SortedMap-java.util.Set-boolean-">getBiggestMemStoreRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt;, Set&lt;HRegion&gt;, boolean)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/RowResource.html#getBinary-javax.ws.rs.core.UriInfo-">getBinary(UriInfo)</a></span> - Method in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/RowResource.html" title="class in org.apache.hadoop.hbase.rest">RowResource</a></dt>
 <dd>&nbsp;</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 01efc59..51d84c3 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -167,10 +167,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.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/client/class-use/Admin.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/Admin.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/Admin.html
index 0847be1..cec98df 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Admin.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Admin.html
@@ -126,25 +126,29 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.rsgroup">org.apache.hadoop.hbase.rsgroup</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <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>
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.thrift">org.apache.hadoop.hbase.thrift</a></td>
 <td class="colLast">
 <div class="block">Provides an HBase <a href="http://incubator.apache.org/thrift/">Thrift</a>
 service.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.tool">org.apache.hadoop.hbase.tool</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hbase.archetypes.exemplars.client">org.apache.hbase.archetypes.exemplars.client</a></td>
 <td class="colLast">
 <div class="block">This package provides fully-functional exemplar Java code demonstrating
@@ -152,7 +156,7 @@ service.</div>
  archetype with hbase-client dependency.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hbase.archetypes.exemplars.shaded_client">org.apache.hbase.archetypes.exemplars.shaded_client</a></td>
 <td class="colLast">
 <div class="block">This package provides fully-functional exemplar Java code demonstrating
@@ -482,6 +486,24 @@ service.</div>
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.rsgroup">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> in <a href="../../../../../../org/apache/hadoop/hbase/rsgroup/package-summary.html">org.apache.hadoop.hbase.rsgroup</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../org/apache/hadoop/hbase/rsgroup/package-summary.html">org.apache.hadoop.hbase.rsgroup</a> declared as <a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></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>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></code></td>
+<td class="colLast"><span class="typeNameLabel">RSGroupAdminClient.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html#admin">admin</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.security.access">
 <!--   -->
 </a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 891147f..9a0cb5a 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -550,24 +550,24 @@
 <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.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/client/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-use.html b/devapidocs/org/apache/hadoop/hbase/client/package-use.html
index 89ee7fa..77b87e9 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-use.html
@@ -3024,35 +3024,40 @@ service.</div>
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/Admin.html#org.apache.hadoop.hbase.rsgroup">Admin</a>
+<div class="block">The administrative API for HBase.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/ClusterConnection.html#org.apache.hadoop.hbase.rsgroup">ClusterConnection</a>
 <div class="block">Internal methods on Connection that should not be used by user code.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/Connection.html#org.apache.hadoop.hbase.rsgroup">Connection</a>
 <div class="block">A cluster connection encapsulating lower level individual connections to actual servers and
  a connection to zookeeper.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/Mutation.html#org.apache.hadoop.hbase.rsgroup">Mutation</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/RegionInfo.html#org.apache.hadoop.hbase.rsgroup">RegionInfo</a>
 <div class="block">Information about a region.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/SnapshotDescription.html#org.apache.hadoop.hbase.rsgroup">SnapshotDescription</a>
 <div class="block">The POJO equivalent of HBaseProtos.SnapshotDescription</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/Table.html#org.apache.hadoop.hbase.rsgroup">Table</a>
 <div class="block">Used to communicate with a single HBase table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TableDescriptor.html#org.apache.hadoop.hbase.rsgroup">TableDescriptor</a>
 <div class="block">TableDescriptor contains the details about an HBase table such as the descriptors of
  all the column families, is the table a catalog table, <code> hbase:meta </code>,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
index ae0124e..ce950b0 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -104,8 +104,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index e77d029..fc1124d 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -183,14 +183,14 @@
 <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.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 2deb46d..0916f37 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -273,12 +273,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index a6039ad..7600159 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -350,8 +350,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index 626507e..f930505 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -294,8 +294,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
 </ul>
 </li>


[12/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
index b1c7be8..7f2e325 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
@@ -2767,1025 +2767,1030 @@
 <span class="sourceLineNo">2759</span>    configurationManager.registerObserver(region);<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>  }<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span><a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>  /**<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>   *   the biggest.  If two regions are the same size, then the last one found wins; i.e. this<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>   *   method may NOT return all regions.<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>   */<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>  SortedMap&lt;Long, HRegion&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>    // we'll sort the regions in reverse<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    SortedMap&lt;Long, HRegion&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>        new Comparator&lt;Long&gt;() {<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>          @Override<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>          public int compare(Long a, Long b) {<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>            return -1 * a.compareTo(b);<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>          }<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        });<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      sortedRegions.put(region.getMemStoreOffHeapSize(), region);<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>    }<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>    return sortedRegions;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>  }<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span><a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>  /**<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>   *   biggest.  If two regions are the same size, then the last one found wins; i.e. this method<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>   *   may NOT return all regions.<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>   */<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>  SortedMap&lt;Long, HRegion&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>    // we'll sort the regions in reverse<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>    SortedMap&lt;Long, HRegion&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>        new Comparator&lt;Long&gt;() {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>          @Override<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>          public int compare(Long a, Long b) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>            return -1 * a.compareTo(b);<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>          }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>        });<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>      sortedRegions.put(region.getMemStoreHeapSize(), region);<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>    }<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>    return sortedRegions;<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>  }<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span><a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>  /**<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>   * @return time stamp in millis of when this region server was started<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>   */<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>  public long getStartcode() {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>    return this.startcode;<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>  }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span><a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>  /** @return reference to FlushRequester */<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>  @Override<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>  public FlushRequester getFlushRequester() {<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>    return this.cacheFlusher;<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>  }<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span><a name="line.2816"></a>
+<span class="sourceLineNo">2762</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>      long size) {<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>    }<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>    sortedRegions.get(size).add(region);<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>  }<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>  /**<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>   *   the biggest.<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>   */<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>    // we'll sort the regions in reverse<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>        new Comparator&lt;Long&gt;() {<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>          @Override<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>          public int compare(Long a, Long b) {<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>            return -1 * a.compareTo(b);<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>          }<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>        });<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>    }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>    return sortedRegions;<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>  }<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span><a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>  /**<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>   *   biggest.<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>   */<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>    // we'll sort the regions in reverse<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>        new Comparator&lt;Long&gt;() {<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>          @Override<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>          public int compare(Long a, Long b) {<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>            return -1 * a.compareTo(b);<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>          }<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>        });<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>    }<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>    return sortedRegions;<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>  }<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span><a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>  /**<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>   * @return time stamp in millis of when this region server was started<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>   */<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>  public long getStartcode() {<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>    return this.startcode;<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>  }<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span><a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>  /** @return reference to FlushRequester */<a name="line.2816"></a>
 <span class="sourceLineNo">2817</span>  @Override<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>    return this.compactSplitThread;<a name="line.2819"></a>
+<span class="sourceLineNo">2818</span>  public FlushRequester getFlushRequester() {<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>    return this.cacheFlusher;<a name="line.2819"></a>
 <span class="sourceLineNo">2820</span>  }<a name="line.2820"></a>
 <span class="sourceLineNo">2821</span><a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  /**<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>   * Get the top N most loaded regions this server is serving so we can tell the<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>   * master which regions it can reallocate if we're overloaded. TODO: actually<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>   * calculate which regions are most loaded. (Right now, we're just grabbing<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>   * the first N regions being served regardless of load.)<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>   */<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>  protected RegionInfo[] getMostLoadedRegions() {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>    ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;&gt;();<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>    for (Region r : onlineRegions.values()) {<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>      if (!r.isAvailable()) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>        continue;<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      }<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      if (regions.size() &lt; numRegionsToReport) {<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>        regions.add(r.getRegionInfo());<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      } else {<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>        break;<a name="line.2837"></a>
+<span class="sourceLineNo">2822</span>  @Override<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>    return this.compactSplitThread;<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>  }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span><a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>  /**<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>   * Get the top N most loaded regions this server is serving so we can tell the<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>   * master which regions it can reallocate if we're overloaded. TODO: actually<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>   * calculate which regions are most loaded. (Right now, we're just grabbing<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>   * the first N regions being served regardless of load.)<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>   */<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>  protected RegionInfo[] getMostLoadedRegions() {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>    ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;&gt;();<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>    for (Region r : onlineRegions.values()) {<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>      if (!r.isAvailable()) {<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>        continue;<a name="line.2837"></a>
 <span class="sourceLineNo">2838</span>      }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    }<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>    return regions.toArray(new RegionInfo[regions.size()]);<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>  }<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span><a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>  @Override<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>  public Leases getLeases() {<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>    return leases;<a name="line.2845"></a>
+<span class="sourceLineNo">2839</span>      if (regions.size() &lt; numRegionsToReport) {<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>        regions.add(r.getRegionInfo());<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>      } else {<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>        break;<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>      }<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>    }<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>    return regions.toArray(new RegionInfo[regions.size()]);<a name="line.2845"></a>
 <span class="sourceLineNo">2846</span>  }<a name="line.2846"></a>
 <span class="sourceLineNo">2847</span><a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  /**<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>   * @return Return the rootDir.<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>   */<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>  protected Path getRootDir() {<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    return rootDir;<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>  }<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span><a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>  /**<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>   * @return Return the fs.<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>   */<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>  @Override<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>  public FileSystem getFileSystem() {<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>    return fs;<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>  }<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span><a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>  /**<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>   * @return Return the walRootDir.<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>   */<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>  protected Path getWALRootDir() {<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>    return walRootDir;<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>  }<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span><a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>  /**<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>   * @return Return the walFs.<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>   */<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>  protected FileSystem getWALFileSystem() {<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>    return walFs;<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>  }<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span><a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>  @Override<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>  public String toString() {<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>    return getServerName().toString();<a name="line.2879"></a>
+<span class="sourceLineNo">2848</span>  @Override<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>  public Leases getLeases() {<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>    return leases;<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>  }<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span><a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>  /**<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>   * @return Return the rootDir.<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>   */<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>  protected Path getRootDir() {<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>    return rootDir;<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>  }<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span><a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>  /**<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>   * @return Return the fs.<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>   */<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>  @Override<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>  public FileSystem getFileSystem() {<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>    return fs;<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>  }<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span><a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>  /**<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>   * @return Return the walRootDir.<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>   */<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>  protected Path getWALRootDir() {<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>    return walRootDir;<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>  }<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span><a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>  /**<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>   * @return Return the walFs.<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>   */<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>  protected FileSystem getWALFileSystem() {<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>    return walFs;<a name="line.2879"></a>
 <span class="sourceLineNo">2880</span>  }<a name="line.2880"></a>
 <span class="sourceLineNo">2881</span><a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>  /**<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>   * Interval at which threads should run<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>   *<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>   * @return the interval<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>   */<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>  public int getThreadWakeFrequency() {<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    return threadWakeFrequency;<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>  }<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span><a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>  @Override<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>  public ZKWatcher getZooKeeper() {<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>    return zooKeeper;<a name="line.2893"></a>
+<span class="sourceLineNo">2882</span>  @Override<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>  public String toString() {<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>    return getServerName().toString();<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>  }<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span><a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>  /**<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>   * Interval at which threads should run<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span>   *<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>   * @return the interval<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>   */<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>  public int getThreadWakeFrequency() {<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>    return threadWakeFrequency;<a name="line.2893"></a>
 <span class="sourceLineNo">2894</span>  }<a name="line.2894"></a>
 <span class="sourceLineNo">2895</span><a name="line.2895"></a>
 <span class="sourceLineNo">2896</span>  @Override<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>    return csm;<a name="line.2898"></a>
+<span class="sourceLineNo">2897</span>  public ZKWatcher getZooKeeper() {<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>    return zooKeeper;<a name="line.2898"></a>
 <span class="sourceLineNo">2899</span>  }<a name="line.2899"></a>
 <span class="sourceLineNo">2900</span><a name="line.2900"></a>
 <span class="sourceLineNo">2901</span>  @Override<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>  public ServerName getServerName() {<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span>    return serverName;<a name="line.2903"></a>
+<span class="sourceLineNo">2902</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>    return csm;<a name="line.2903"></a>
 <span class="sourceLineNo">2904</span>  }<a name="line.2904"></a>
 <span class="sourceLineNo">2905</span><a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>    return this.rsHost;<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>  }<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span><a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>  @Override<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>    return this.regionsInTransitionInRS;<a name="line.2912"></a>
+<span class="sourceLineNo">2906</span>  @Override<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span>  public ServerName getServerName() {<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>    return serverName;<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>  }<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span><a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span>    return this.rsHost;<a name="line.2912"></a>
 <span class="sourceLineNo">2913</span>  }<a name="line.2913"></a>
 <span class="sourceLineNo">2914</span><a name="line.2914"></a>
 <span class="sourceLineNo">2915</span>  @Override<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>  public ExecutorService getExecutorService() {<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>    return executorService;<a name="line.2917"></a>
+<span class="sourceLineNo">2916</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>    return this.regionsInTransitionInRS;<a name="line.2917"></a>
 <span class="sourceLineNo">2918</span>  }<a name="line.2918"></a>
 <span class="sourceLineNo">2919</span><a name="line.2919"></a>
 <span class="sourceLineNo">2920</span>  @Override<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>  public ChoreService getChoreService() {<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>    return choreService;<a name="line.2922"></a>
+<span class="sourceLineNo">2921</span>  public ExecutorService getExecutorService() {<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>    return executorService;<a name="line.2922"></a>
 <span class="sourceLineNo">2923</span>  }<a name="line.2923"></a>
 <span class="sourceLineNo">2924</span><a name="line.2924"></a>
 <span class="sourceLineNo">2925</span>  @Override<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>    return rsQuotaManager;<a name="line.2927"></a>
+<span class="sourceLineNo">2926</span>  public ChoreService getChoreService() {<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>    return choreService;<a name="line.2927"></a>
 <span class="sourceLineNo">2928</span>  }<a name="line.2928"></a>
 <span class="sourceLineNo">2929</span><a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>  //<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>  // Main program and support routines<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>  //<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>  /**<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>   * Load the replication executorService objects, if any<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>   */<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    if ((server instanceof HMaster) &amp;&amp;<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>      (!LoadBalancer.isTablesOnMaster(conf) || LoadBalancer.isSystemTablesOnlyOnMaster(conf))) {<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>      return;<a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>    }<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span><a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>    // read in the name of the source replication class from the config file.<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span><a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>    // read in the name of the sink replication class from the config file.<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span><a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>    // only one object.<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>    } else {<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>    }<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>  }<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span><a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>    Class&lt;? extends T&gt; clazz = null;<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>    try {<a name="line.2969"></a>
-<span class="sourceLineNo">2970</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>      throw new IOException("Could not find class for " + classname);<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>    }<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>    return service;<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>  }<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span><a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>  /**<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>   *<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>   * @param regionServerClass<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>   * @param conf2<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>   * @return HRegionServer instance.<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span>   */<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>  public static HRegionServer constructRegionServer(<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span>      Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>      final Configuration conf2) {<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>    try {<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>      Constructor&lt;? extends HRegionServer&gt; c = regionServerClass<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>          .getConstructor(Configuration.class);<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span>      return c.newInstance(conf2);<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>    } catch (Exception e) {<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>          + regionServerClass.toString(), e);<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>    }<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>  }<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span><a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>  /**<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>   */<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>  public static void main(String[] args) throws Exception {<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>    VersionInfo.logVersion();<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>    @SuppressWarnings("unchecked")<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span><a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>  }<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span><a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>  /**<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>   * Gets the online regions of the specified table.<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>   * all the ONLINE regions in the table.<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>   * @param tableName<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>   */<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span>  @Override<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>     synchronized (this.onlineRegions) {<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span>           tableRegions.add(region);<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>         }<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>       }<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span>     }<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>     return tableRegions;<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>   }<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span><a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>  @Override<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>    List&lt;HRegion&gt; allRegions = new ArrayList&lt;&gt;();<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>    synchronized (this.onlineRegions) {<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>      // Return a clone copy of the onlineRegions<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>      allRegions.addAll(onlineRegions.values());<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>    }<a name="line.3044"></a>
-<span class="sourceLineNo">3045</span>    return allRegions;<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>  }<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span><a name="line.3047"></a>
-<span class="sourceLineNo">3048</span>  /**<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>   * Gets the online tables in this RS.<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>   * This method looks at the in-memory onlineRegions.<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>   * @return all the online tables in this RS<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>   */<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>    synchronized (this.onlineRegions) {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span>      }<a name="line.3058"></a>
-<span class="sourceLineNo">3059</span>    }<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span>    return tables;<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>  }<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span><a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>  // used by org/apache/hbase/tmpl/regionserver/RSStatusTmpl.jamon (HBASE-4070).<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>  public String[] getRegionServerCoprocessors() {<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>    try {<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>    } catch (IOException exception) {<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span>          "skipping.");<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>    }<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span>    for (HRegion region: regions) {<a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>      try {<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>      } catch (IOException exception) {<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>            "; skipping.");<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>      }<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>    }<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>    return coprocessors.toArray(new String[coprocessors.size()]);<a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>  }<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span><a name="line.3087"></a>
-<span class="sourceLineNo">3088</span>  /**<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>   * @param region Region to close<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>   */<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>    try {<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>            " - ignoring and continuing");<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>      }<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>    } catch (IOException e) {<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>          " - ignoring and continuing", e);<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>    }<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>  }<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span><a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>  /**<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>   * when stopping. If called from the master, the region will update the znode status.<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>   *<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>   * &lt;p&gt;<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>   * &lt;/p&gt;<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span><a name="line.3112"></a>
+<span class="sourceLineNo">2930</span>  @Override<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>    return rsQuotaManager;<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>  }<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span><a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>  //<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span>  // Main program and support routines<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>  //<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>  /**<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>   * Load the replication executorService objects, if any<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>   */<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span>    if ((server instanceof HMaster) &amp;&amp;<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>      (!LoadBalancer.isTablesOnMaster(conf) || LoadBalancer.isSystemTablesOnlyOnMaster(conf))) {<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>      return;<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>    }<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span><a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>    // read in the name of the source replication class from the config file.<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span><a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>    // read in the name of the sink replication class from the config file.<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span><a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>    // only one object.<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>    } else {<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>    }<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>  }<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span><a name="line.2969"></a>
+<span class="sourceLineNo">2970</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>    Class&lt;? extends T&gt; clazz = null;<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>    try {<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>      throw new IOException("Could not find class for " + classname);<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>    }<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>    return service;<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>  }<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span><a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>  /**<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>   *<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>   * @param regionServerClass<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>   * @param conf2<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>   * @return HRegionServer instance.<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>   */<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>  public static HRegionServer constructRegionServer(<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>      Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span>      final Configuration conf2) {<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>    try {<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>      Constructor&lt;? extends HRegionServer&gt; c = regionServerClass<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>          .getConstructor(Configuration.class);<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>      return c.newInstance(conf2);<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>    } catch (Exception e) {<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>          + regionServerClass.toString(), e);<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>    }<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>  }<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span><a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>  /**<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>   */<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>  public static void main(String[] args) throws Exception {<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>    VersionInfo.logVersion();<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>    @SuppressWarnings("unchecked")<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span><a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>  }<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span><a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>  /**<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>   * Gets the online regions of the specified table.<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>   * all the ONLINE regions in the table.<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>   * @param tableName<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>   */<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>  @Override<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span>     synchronized (this.onlineRegions) {<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>           tableRegions.add(region);<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span>         }<a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>       }<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>     }<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>     return tableRegions;<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>   }<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span><a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>  @Override<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>    List&lt;HRegion&gt; allRegions = new ArrayList&lt;&gt;();<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>    synchronized (this.onlineRegions) {<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>      // Return a clone copy of the onlineRegions<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>      allRegions.addAll(onlineRegions.values());<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>    }<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>    return allRegions;<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span>  }<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span><a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  /**<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>   * Gets the online tables in this RS.<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>   * This method looks at the in-memory onlineRegions.<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span>   * @return all the online tables in this RS<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>   */<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>    synchronized (this.onlineRegions) {<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>      }<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>    }<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>    return tables;<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span>  }<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span><a name="line.3067"></a>
+<span class="sourceLineNo">3068</span>  // used by org/apache/hbase/tmpl/regionserver/RSStatusTmpl.jamon (HBASE-4070).<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>  public String[] getRegionServerCoprocessors() {<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>    try {<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>    } catch (IOException exception) {<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>          "skipping.");<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>    }<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>    for (HRegion region: regions) {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>      try {<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span>      } catch (IOException exception) {<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>            "; skipping.");<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span>      }<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>    }<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>    return coprocessors.toArray(new String[coprocessors.size()]);<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>  }<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span><a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>  /**<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>   * @param region Region to close<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>   */<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3097"></a>
+<span class="sourceLineNo">3098</span>    try {<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>            " - ignoring and continuing");<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span>      }<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span>    } catch (IOException e) {<a name="line.3103"></a>
+<span class="sourceLineNo">3104</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>          " - ignoring and continuing", e);<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>    }<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>  }<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span><a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>  /**<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>   * when stopping. If called from the master, the region will update the znode status.<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>   *<a name="line.3112"></a>
 <span class="sourceLineNo">3113</span>   * &lt;p&gt;<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>   * &lt;/p&gt;<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>   *<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>   * @param encodedName Region to close<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>   * @param abort True if we are aborting<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>   * @return True if closed a region.<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>   * @throws NotServingRegionException if the region is not online<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>   */<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>  protected boolean closeRegion(String encodedName, final boolean abort, final ServerName sn)<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>      throws NotServingRegionException {<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>    //Check for permissions to close.<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>    // Can be null if we're calling close on a region that's not online<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>      try {<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>      } catch (IOException exp) {<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>        return false;<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>      }<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>    }<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span><a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>        Boolean.FALSE);<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span><a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>        // We're going to try to do a standard close then.<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>            " Doing a standard close now");<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>        return closeRegion(encodedName, abort, sn);<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span>      }<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span>      // Let's get the region from the online region list again<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>      actualRegion = this.getRegion(encodedName);<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>        // The master deletes the znode when it receives this exception.<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>      }<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>      return true;<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>    }<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span><a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>    if (actualRegion == null) {<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>      // The master deletes the znode when it receives this exception.<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>          " is not online, and is not opening.");<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>    }<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span><a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>    CloseRegionHandler crh;<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>    if (hri.isMetaRegion()) {<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>    } else {<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>      crh = new CloseRegionHandler(this, this, hri, abort, sn);<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>    }<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>    this.executorService.submit(crh);<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>    return true;<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>  }<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span><a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>  /**<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>   * Close and offline the region for split or merge<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>   *<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>   * @param regionEncodedName the name of the region(s) to close<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>   * @return true if closed the region successfully.<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>   * @throws IOException<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>  */<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>  protected boolean closeAndOfflineRegionForSplitOrMerge(final List&lt;String&gt; regionEncodedName)<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>      throws IOException {<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>    for (int i = 0; i &lt; regionEncodedName.size(); ++i) {<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>      HRegion regionToClose = this.getRegion(regionEncodedName.get(i));<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>      if (regionToClose != null) {<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>        Map&lt;byte[], List&lt;HStoreFile&gt;&gt; hstoreFiles = null;<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>        Exception exceptionToThrow = null;<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>        try {<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>          hstoreFiles = regionToClose.close(false);<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>        } catch (Exception e) {<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>          exceptionToThrow = e;<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>        }<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>        if (exceptionToThrow == null &amp;&amp; hstoreFiles == null) {<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>          // The region was closed by someone else<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>          exceptionToThrow =<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>            new IOException("Failed to close region: already closed by another thread");<a name="line.3204"></a>
+<span class="sourceLineNo">3114</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>   * &lt;/p&gt;<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span><a name="line.3117"></a>
+<span class="sourceLineNo">3118</span>   * &lt;p&gt;<a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>   * &lt;/p&gt;<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>   *<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>   * @param encodedName Region to close<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>   * @param abort True if we are aborting<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>   * @return True if closed a region.<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>   * @throws NotServingRegionException if the region is not online<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>   */<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>  protected boolean closeRegion(String encodedName, final boolean abort, final ServerName sn)<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>      throws NotServingRegionException {<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>    //Check for permissions to close.<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>    // Can be null if we're calling close on a region that's not online<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>      try {<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>      } catch (IOException exp) {<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>        return false;<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>      }<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>    }<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span><a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>        Boolean.FALSE);<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span><a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span>        // We're going to try to do a standard close then.<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>            " Doing a standard close now");<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>        return closeRegion(encodedName, abort, sn);<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>      }<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span>      // Let's get the region from the online region list again<a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>      actualRegion = this.getRegion(encodedName);<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>        // The master deletes the znode when it receives this exception.<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>      }<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>      return true;<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>    }<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span><a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>    if (actualRegion == null) {<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>      // The master deletes the znode when it receives this exception.<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>          " is not online, and is not opening.");<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>    }<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span><a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>    CloseRegionHandler crh;<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>    if (hri.isMetaRegion()) {<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>    } else {<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>      crh = new CloseRegionHandler(this, this, hri, abort, sn);<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>    }<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>    this.executorService.submit(crh);<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>    return true;<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>  }<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span><a name="line.3186"></a>
+<span class="sourceLineNo">3187</span>  /**<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>   * Close and offline the region for split or merge<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>   *<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>   * @param regionEncodedName the name of the region(s) to close<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>   * @return true if closed the region successfully.<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>   * @throws IOException<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>  */<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span>  protected boolean closeAndOfflineRegionForSplitOrMerge(final List&lt;String&gt; regionEncodedName)<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span>      throws IOException {<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span>    for (int i = 0; i &lt; regionEncodedName.size(); ++i) {<a name="line.3196"></a>
+<span class="sourceLineNo">3197</span>      HRegion regionToClose = this.getRegion(regionEncodedName.get(i));<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span>      if (regionToClose != null) {<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span>        Map&lt;byte[], List&lt;HStoreFile&gt;&gt; hstoreFiles = null;<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>        Exception exceptionToThrow = null;<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span>        try {<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>          hstoreFiles = regionToClose.close(false);<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span>        } catch (Exception e) {<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>          exceptionToThrow = e;<a name="line.3204"></a>
 <span class="sourceLineNo">3205</span>        }<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>        if (exceptionToThrow != null) {<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>          if (exceptionToThrow instanceof IOException) {<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>            throw (IOException) exceptionToThrow;<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>          }<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>          throw new IOException(exceptionToThrow);<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>        }<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>        // Offline the region<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>        this.removeRegion(regionToClose, null);<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>      }<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>    }<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>    return true;<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>  }<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span><a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>   /**<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>   * @param regionName<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>   *         named region is not member of the online regions.<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>   */<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>  }<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span><a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>  public InetSocketAddress[] getRegionBlockLocations(final String encodedRegionName) {<a name="line.3229"></a>
-<span class=

<TRUNCATED>

[11/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
index b1c7be8..7f2e325 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
@@ -2767,1025 +2767,1030 @@
 <span class="sourceLineNo">2759</span>    configurationManager.registerObserver(region);<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>  }<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span><a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>  /**<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>   *   the biggest.  If two regions are the same size, then the last one found wins; i.e. this<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>   *   method may NOT return all regions.<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>   */<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>  SortedMap&lt;Long, HRegion&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>    // we'll sort the regions in reverse<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    SortedMap&lt;Long, HRegion&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>        new Comparator&lt;Long&gt;() {<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>          @Override<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>          public int compare(Long a, Long b) {<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>            return -1 * a.compareTo(b);<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>          }<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        });<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      sortedRegions.put(region.getMemStoreOffHeapSize(), region);<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>    }<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>    return sortedRegions;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>  }<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span><a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>  /**<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>   *   biggest.  If two regions are the same size, then the last one found wins; i.e. this method<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>   *   may NOT return all regions.<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>   */<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>  SortedMap&lt;Long, HRegion&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>    // we'll sort the regions in reverse<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>    SortedMap&lt;Long, HRegion&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>        new Comparator&lt;Long&gt;() {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>          @Override<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>          public int compare(Long a, Long b) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>            return -1 * a.compareTo(b);<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>          }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>        });<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>      sortedRegions.put(region.getMemStoreHeapSize(), region);<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>    }<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>    return sortedRegions;<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>  }<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span><a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>  /**<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>   * @return time stamp in millis of when this region server was started<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>   */<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>  public long getStartcode() {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>    return this.startcode;<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>  }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span><a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>  /** @return reference to FlushRequester */<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>  @Override<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>  public FlushRequester getFlushRequester() {<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>    return this.cacheFlusher;<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>  }<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span><a name="line.2816"></a>
+<span class="sourceLineNo">2762</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>      long size) {<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>    }<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>    sortedRegions.get(size).add(region);<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>  }<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>  /**<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>   *   the biggest.<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>   */<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>    // we'll sort the regions in reverse<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>        new Comparator&lt;Long&gt;() {<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>          @Override<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>          public int compare(Long a, Long b) {<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>            return -1 * a.compareTo(b);<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>          }<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>        });<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>    }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>    return sortedRegions;<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>  }<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span><a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>  /**<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>   *   biggest.<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>   */<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>    // we'll sort the regions in reverse<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>        new Comparator&lt;Long&gt;() {<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>          @Override<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>          public int compare(Long a, Long b) {<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>            return -1 * a.compareTo(b);<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>          }<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>        });<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>    }<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>    return sortedRegions;<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>  }<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span><a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>  /**<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>   * @return time stamp in millis of when this region server was started<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>   */<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>  public long getStartcode() {<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>    return this.startcode;<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>  }<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span><a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>  /** @return reference to FlushRequester */<a name="line.2816"></a>
 <span class="sourceLineNo">2817</span>  @Override<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>    return this.compactSplitThread;<a name="line.2819"></a>
+<span class="sourceLineNo">2818</span>  public FlushRequester getFlushRequester() {<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>    return this.cacheFlusher;<a name="line.2819"></a>
 <span class="sourceLineNo">2820</span>  }<a name="line.2820"></a>
 <span class="sourceLineNo">2821</span><a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  /**<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>   * Get the top N most loaded regions this server is serving so we can tell the<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>   * master which regions it can reallocate if we're overloaded. TODO: actually<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>   * calculate which regions are most loaded. (Right now, we're just grabbing<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>   * the first N regions being served regardless of load.)<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>   */<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>  protected RegionInfo[] getMostLoadedRegions() {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>    ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;&gt;();<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>    for (Region r : onlineRegions.values()) {<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>      if (!r.isAvailable()) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>        continue;<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      }<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      if (regions.size() &lt; numRegionsToReport) {<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>        regions.add(r.getRegionInfo());<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      } else {<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>        break;<a name="line.2837"></a>
+<span class="sourceLineNo">2822</span>  @Override<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>    return this.compactSplitThread;<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>  }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span><a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>  /**<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>   * Get the top N most loaded regions this server is serving so we can tell the<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>   * master which regions it can reallocate if we're overloaded. TODO: actually<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>   * calculate which regions are most loaded. (Right now, we're just grabbing<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>   * the first N regions being served regardless of load.)<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>   */<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>  protected RegionInfo[] getMostLoadedRegions() {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>    ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;&gt;();<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>    for (Region r : onlineRegions.values()) {<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>      if (!r.isAvailable()) {<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>        continue;<a name="line.2837"></a>
 <span class="sourceLineNo">2838</span>      }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    }<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>    return regions.toArray(new RegionInfo[regions.size()]);<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>  }<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span><a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>  @Override<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>  public Leases getLeases() {<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>    return leases;<a name="line.2845"></a>
+<span class="sourceLineNo">2839</span>      if (regions.size() &lt; numRegionsToReport) {<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>        regions.add(r.getRegionInfo());<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>      } else {<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>        break;<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>      }<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>    }<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>    return regions.toArray(new RegionInfo[regions.size()]);<a name="line.2845"></a>
 <span class="sourceLineNo">2846</span>  }<a name="line.2846"></a>
 <span class="sourceLineNo">2847</span><a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  /**<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>   * @return Return the rootDir.<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>   */<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>  protected Path getRootDir() {<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    return rootDir;<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>  }<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span><a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>  /**<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>   * @return Return the fs.<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>   */<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>  @Override<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>  public FileSystem getFileSystem() {<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>    return fs;<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>  }<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span><a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>  /**<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>   * @return Return the walRootDir.<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>   */<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>  protected Path getWALRootDir() {<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>    return walRootDir;<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>  }<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span><a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>  /**<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>   * @return Return the walFs.<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>   */<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>  protected FileSystem getWALFileSystem() {<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>    return walFs;<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>  }<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span><a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>  @Override<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>  public String toString() {<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>    return getServerName().toString();<a name="line.2879"></a>
+<span class="sourceLineNo">2848</span>  @Override<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>  public Leases getLeases() {<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>    return leases;<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>  }<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span><a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>  /**<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>   * @return Return the rootDir.<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>   */<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>  protected Path getRootDir() {<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>    return rootDir;<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>  }<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span><a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>  /**<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>   * @return Return the fs.<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>   */<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>  @Override<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>  public FileSystem getFileSystem() {<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>    return fs;<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>  }<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span><a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>  /**<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>   * @return Return the walRootDir.<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>   */<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>  protected Path getWALRootDir() {<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>    return walRootDir;<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>  }<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span><a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>  /**<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>   * @return Return the walFs.<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>   */<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>  protected FileSystem getWALFileSystem() {<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>    return walFs;<a name="line.2879"></a>
 <span class="sourceLineNo">2880</span>  }<a name="line.2880"></a>
 <span class="sourceLineNo">2881</span><a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>  /**<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>   * Interval at which threads should run<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>   *<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>   * @return the interval<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>   */<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>  public int getThreadWakeFrequency() {<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    return threadWakeFrequency;<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>  }<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span><a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>  @Override<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>  public ZKWatcher getZooKeeper() {<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>    return zooKeeper;<a name="line.2893"></a>
+<span class="sourceLineNo">2882</span>  @Override<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>  public String toString() {<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>    return getServerName().toString();<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>  }<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span><a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>  /**<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>   * Interval at which threads should run<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span>   *<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>   * @return the interval<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>   */<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>  public int getThreadWakeFrequency() {<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>    return threadWakeFrequency;<a name="line.2893"></a>
 <span class="sourceLineNo">2894</span>  }<a name="line.2894"></a>
 <span class="sourceLineNo">2895</span><a name="line.2895"></a>
 <span class="sourceLineNo">2896</span>  @Override<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>    return csm;<a name="line.2898"></a>
+<span class="sourceLineNo">2897</span>  public ZKWatcher getZooKeeper() {<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>    return zooKeeper;<a name="line.2898"></a>
 <span class="sourceLineNo">2899</span>  }<a name="line.2899"></a>
 <span class="sourceLineNo">2900</span><a name="line.2900"></a>
 <span class="sourceLineNo">2901</span>  @Override<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>  public ServerName getServerName() {<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span>    return serverName;<a name="line.2903"></a>
+<span class="sourceLineNo">2902</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>    return csm;<a name="line.2903"></a>
 <span class="sourceLineNo">2904</span>  }<a name="line.2904"></a>
 <span class="sourceLineNo">2905</span><a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>    return this.rsHost;<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>  }<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span><a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>  @Override<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>    return this.regionsInTransitionInRS;<a name="line.2912"></a>
+<span class="sourceLineNo">2906</span>  @Override<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span>  public ServerName getServerName() {<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>    return serverName;<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>  }<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span><a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span>    return this.rsHost;<a name="line.2912"></a>
 <span class="sourceLineNo">2913</span>  }<a name="line.2913"></a>
 <span class="sourceLineNo">2914</span><a name="line.2914"></a>
 <span class="sourceLineNo">2915</span>  @Override<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>  public ExecutorService getExecutorService() {<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>    return executorService;<a name="line.2917"></a>
+<span class="sourceLineNo">2916</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>    return this.regionsInTransitionInRS;<a name="line.2917"></a>
 <span class="sourceLineNo">2918</span>  }<a name="line.2918"></a>
 <span class="sourceLineNo">2919</span><a name="line.2919"></a>
 <span class="sourceLineNo">2920</span>  @Override<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>  public ChoreService getChoreService() {<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>    return choreService;<a name="line.2922"></a>
+<span class="sourceLineNo">2921</span>  public ExecutorService getExecutorService() {<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>    return executorService;<a name="line.2922"></a>
 <span class="sourceLineNo">2923</span>  }<a name="line.2923"></a>
 <span class="sourceLineNo">2924</span><a name="line.2924"></a>
 <span class="sourceLineNo">2925</span>  @Override<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>    return rsQuotaManager;<a name="line.2927"></a>
+<span class="sourceLineNo">2926</span>  public ChoreService getChoreService() {<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>    return choreService;<a name="line.2927"></a>
 <span class="sourceLineNo">2928</span>  }<a name="line.2928"></a>
 <span class="sourceLineNo">2929</span><a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>  //<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>  // Main program and support routines<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>  //<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>  /**<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>   * Load the replication executorService objects, if any<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>   */<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    if ((server instanceof HMaster) &amp;&amp;<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>      (!LoadBalancer.isTablesOnMaster(conf) || LoadBalancer.isSystemTablesOnlyOnMaster(conf))) {<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>      return;<a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>    }<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span><a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>    // read in the name of the source replication class from the config file.<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span><a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>    // read in the name of the sink replication class from the config file.<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span><a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>    // only one object.<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>    } else {<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>    }<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>  }<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span><a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>    Class&lt;? extends T&gt; clazz = null;<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>    try {<a name="line.2969"></a>
-<span class="sourceLineNo">2970</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>      throw new IOException("Could not find class for " + classname);<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>    }<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>    return service;<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>  }<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span><a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>  /**<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>   *<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>   * @param regionServerClass<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>   * @param conf2<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>   * @return HRegionServer instance.<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span>   */<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>  public static HRegionServer constructRegionServer(<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span>      Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>      final Configuration conf2) {<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>    try {<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>      Constructor&lt;? extends HRegionServer&gt; c = regionServerClass<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>          .getConstructor(Configuration.class);<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span>      return c.newInstance(conf2);<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>    } catch (Exception e) {<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>          + regionServerClass.toString(), e);<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>    }<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>  }<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span><a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>  /**<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>   */<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>  public static void main(String[] args) throws Exception {<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>    VersionInfo.logVersion();<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>    @SuppressWarnings("unchecked")<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span><a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>  }<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span><a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>  /**<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>   * Gets the online regions of the specified table.<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>   * all the ONLINE regions in the table.<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>   * @param tableName<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>   */<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span>  @Override<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>     synchronized (this.onlineRegions) {<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span>           tableRegions.add(region);<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>         }<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>       }<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span>     }<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>     return tableRegions;<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>   }<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span><a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>  @Override<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>    List&lt;HRegion&gt; allRegions = new ArrayList&lt;&gt;();<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>    synchronized (this.onlineRegions) {<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>      // Return a clone copy of the onlineRegions<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>      allRegions.addAll(onlineRegions.values());<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>    }<a name="line.3044"></a>
-<span class="sourceLineNo">3045</span>    return allRegions;<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>  }<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span><a name="line.3047"></a>
-<span class="sourceLineNo">3048</span>  /**<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>   * Gets the online tables in this RS.<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>   * This method looks at the in-memory onlineRegions.<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>   * @return all the online tables in this RS<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>   */<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>    synchronized (this.onlineRegions) {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span>      }<a name="line.3058"></a>
-<span class="sourceLineNo">3059</span>    }<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span>    return tables;<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>  }<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span><a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>  // used by org/apache/hbase/tmpl/regionserver/RSStatusTmpl.jamon (HBASE-4070).<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>  public String[] getRegionServerCoprocessors() {<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>    try {<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>    } catch (IOException exception) {<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span>          "skipping.");<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>    }<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span>    for (HRegion region: regions) {<a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>      try {<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>      } catch (IOException exception) {<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>            "; skipping.");<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>      }<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>    }<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>    return coprocessors.toArray(new String[coprocessors.size()]);<a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>  }<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span><a name="line.3087"></a>
-<span class="sourceLineNo">3088</span>  /**<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>   * @param region Region to close<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>   */<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>    try {<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>            " - ignoring and continuing");<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>      }<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>    } catch (IOException e) {<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>          " - ignoring and continuing", e);<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>    }<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>  }<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span><a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>  /**<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>   * when stopping. If called from the master, the region will update the znode status.<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>   *<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>   * &lt;p&gt;<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>   * &lt;/p&gt;<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span><a name="line.3112"></a>
+<span class="sourceLineNo">2930</span>  @Override<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>    return rsQuotaManager;<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>  }<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span><a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>  //<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span>  // Main program and support routines<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>  //<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>  /**<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>   * Load the replication executorService objects, if any<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>   */<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span>    if ((server instanceof HMaster) &amp;&amp;<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>      (!LoadBalancer.isTablesOnMaster(conf) || LoadBalancer.isSystemTablesOnlyOnMaster(conf))) {<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>      return;<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>    }<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span><a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>    // read in the name of the source replication class from the config file.<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span><a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>    // read in the name of the sink replication class from the config file.<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span><a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>    // only one object.<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>    } else {<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>    }<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>  }<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span><a name="line.2969"></a>
+<span class="sourceLineNo">2970</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>    Class&lt;? extends T&gt; clazz = null;<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>    try {<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>      throw new IOException("Could not find class for " + classname);<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>    }<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>    return service;<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>  }<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span><a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>  /**<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>   *<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>   * @param regionServerClass<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>   * @param conf2<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>   * @return HRegionServer instance.<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>   */<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>  public static HRegionServer constructRegionServer(<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>      Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span>      final Configuration conf2) {<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>    try {<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>      Constructor&lt;? extends HRegionServer&gt; c = regionServerClass<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>          .getConstructor(Configuration.class);<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>      return c.newInstance(conf2);<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>    } catch (Exception e) {<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>          + regionServerClass.toString(), e);<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>    }<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>  }<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span><a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>  /**<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>   */<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>  public static void main(String[] args) throws Exception {<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>    VersionInfo.logVersion();<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>    @SuppressWarnings("unchecked")<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span><a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>  }<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span><a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>  /**<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>   * Gets the online regions of the specified table.<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>   * all the ONLINE regions in the table.<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>   * @param tableName<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>   */<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>  @Override<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span>     synchronized (this.onlineRegions) {<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>           tableRegions.add(region);<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span>         }<a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>       }<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>     }<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>     return tableRegions;<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>   }<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span><a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>  @Override<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>    List&lt;HRegion&gt; allRegions = new ArrayList&lt;&gt;();<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>    synchronized (this.onlineRegions) {<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>      // Return a clone copy of the onlineRegions<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>      allRegions.addAll(onlineRegions.values());<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>    }<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>    return allRegions;<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span>  }<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span><a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  /**<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>   * Gets the online tables in this RS.<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>   * This method looks at the in-memory onlineRegions.<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span>   * @return all the online tables in this RS<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>   */<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>    synchronized (this.onlineRegions) {<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>      }<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>    }<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>    return tables;<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span>  }<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span><a name="line.3067"></a>
+<span class="sourceLineNo">3068</span>  // used by org/apache/hbase/tmpl/regionserver/RSStatusTmpl.jamon (HBASE-4070).<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>  public String[] getRegionServerCoprocessors() {<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>    try {<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>    } catch (IOException exception) {<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>          "skipping.");<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>    }<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>    for (HRegion region: regions) {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>      try {<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span>      } catch (IOException exception) {<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>            "; skipping.");<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span>      }<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>    }<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>    return coprocessors.toArray(new String[coprocessors.size()]);<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>  }<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span><a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>  /**<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>   * @param region Region to close<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>   */<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3097"></a>
+<span class="sourceLineNo">3098</span>    try {<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>            " - ignoring and continuing");<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span>      }<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span>    } catch (IOException e) {<a name="line.3103"></a>
+<span class="sourceLineNo">3104</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>          " - ignoring and continuing", e);<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>    }<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>  }<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span><a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>  /**<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>   * when stopping. If called from the master, the region will update the znode status.<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>   *<a name="line.3112"></a>
 <span class="sourceLineNo">3113</span>   * &lt;p&gt;<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>   * &lt;/p&gt;<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>   *<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>   * @param encodedName Region to close<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>   * @param abort True if we are aborting<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>   * @return True if closed a region.<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>   * @throws NotServingRegionException if the region is not online<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>   */<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>  protected boolean closeRegion(String encodedName, final boolean abort, final ServerName sn)<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>      throws NotServingRegionException {<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>    //Check for permissions to close.<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>    // Can be null if we're calling close on a region that's not online<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>      try {<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>      } catch (IOException exp) {<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>        return false;<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>      }<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>    }<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span><a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>        Boolean.FALSE);<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span><a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>        // We're going to try to do a standard close then.<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>            " Doing a standard close now");<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>        return closeRegion(encodedName, abort, sn);<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span>      }<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span>      // Let's get the region from the online region list again<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>      actualRegion = this.getRegion(encodedName);<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>        // The master deletes the znode when it receives this exception.<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>      }<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>      return true;<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>    }<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span><a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>    if (actualRegion == null) {<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>      // The master deletes the znode when it receives this exception.<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>          " is not online, and is not opening.");<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>    }<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span><a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>    CloseRegionHandler crh;<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>    if (hri.isMetaRegion()) {<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>    } else {<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>      crh = new CloseRegionHandler(this, this, hri, abort, sn);<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>    }<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>    this.executorService.submit(crh);<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>    return true;<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>  }<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span><a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>  /**<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>   * Close and offline the region for split or merge<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>   *<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>   * @param regionEncodedName the name of the region(s) to close<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>   * @return true if closed the region successfully.<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>   * @throws IOException<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>  */<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>  protected boolean closeAndOfflineRegionForSplitOrMerge(final List&lt;String&gt; regionEncodedName)<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>      throws IOException {<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>    for (int i = 0; i &lt; regionEncodedName.size(); ++i) {<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>      HRegion regionToClose = this.getRegion(regionEncodedName.get(i));<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>      if (regionToClose != null) {<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>        Map&lt;byte[], List&lt;HStoreFile&gt;&gt; hstoreFiles = null;<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>        Exception exceptionToThrow = null;<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>        try {<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>          hstoreFiles = regionToClose.close(false);<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>        } catch (Exception e) {<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>          exceptionToThrow = e;<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>        }<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>        if (exceptionToThrow == null &amp;&amp; hstoreFiles == null) {<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>          // The region was closed by someone else<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>          exceptionToThrow =<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>            new IOException("Failed to close region: already closed by another thread");<a name="line.3204"></a>
+<span class="sourceLineNo">3114</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>   * &lt;/p&gt;<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span><a name="line.3117"></a>
+<span class="sourceLineNo">3118</span>   * &lt;p&gt;<a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>   * &lt;/p&gt;<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>   *<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>   * @param encodedName Region to close<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>   * @param abort True if we are aborting<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>   * @return True if closed a region.<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>   * @throws NotServingRegionException if the region is not online<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>   */<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>  protected boolean closeRegion(String encodedName, final boolean abort, final ServerName sn)<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>      throws NotServingRegionException {<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>    //Check for permissions to close.<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>    // Can be null if we're calling close on a region that's not online<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>      try {<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>      } catch (IOException exp) {<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>        return false;<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>      }<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>    }<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span><a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>        Boolean.FALSE);<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span><a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span>        // We're going to try to do a standard close then.<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>            " Doing a standard close now");<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>        return closeRegion(encodedName, abort, sn);<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>      }<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span>      // Let's get the region from the online region list again<a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>      actualRegion = this.getRegion(encodedName);<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>        // The master deletes the znode when it receives this exception.<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>      }<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>      return true;<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>    }<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span><a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>    if (actualRegion == null) {<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>      // The master deletes the znode when it receives this exception.<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>          " is not online, and is not opening.");<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>    }<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span><a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>    CloseRegionHandler crh;<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>    if (hri.isMetaRegion()) {<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>    } else {<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>      crh = new CloseRegionHandler(this, this, hri, abort, sn);<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>    }<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>    this.executorService.submit(crh);<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>    return true;<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>  }<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span><a name="line.3186"></a>
+<span class="sourceLineNo">3187</span>  /**<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>   * Close and offline the region for split or merge<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>   *<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>   * @param regionEncodedName the name of the region(s) to close<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>   * @return true if closed the region successfully.<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>   * @throws IOException<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>  */<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span>  protected boolean closeAndOfflineRegionForSplitOrMerge(final List&lt;String&gt; regionEncodedName)<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span>      throws IOException {<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span>    for (int i = 0; i &lt; regionEncodedName.size(); ++i) {<a name="line.3196"></a>
+<span class="sourceLineNo">3197</span>      HRegion regionToClose = this.getRegion(regionEncodedName.get(i));<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span>      if (regionToClose != null) {<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span>        Map&lt;byte[], List&lt;HStoreFile&gt;&gt; hstoreFiles = null;<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>        Exception exceptionToThrow = null;<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span>        try {<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>          hstoreFiles = regionToClose.close(false);<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span>        } catch (Exception e) {<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>          exceptionToThrow = e;<a name="line.3204"></a>
 <span class="sourceLineNo">3205</span>        }<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>        if (exceptionToThrow != null) {<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>          if (exceptionToThrow instanceof IOException) {<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>            throw (IOException) exceptionToThrow;<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>          }<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>          throw new IOException(exceptionToThrow);<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>        }<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>        // Offline the region<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>        this.removeRegion(regionToClose, null);<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>      }<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>    }<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>    return true;<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>  }<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span><a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>   /**<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>   * @param regionName<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>   *         named region is not member of the online regions.<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>   */<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>  }<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span><a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>  public InetSocketAddress[] getRegionBlockLocations(final String encodedRegionName) {<a name="line.3229"></a>
-<span class="sourceLin

<TRUNCATED>

[05/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html
index 7f89c08..9ee12ef 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushRegionEntry.html
@@ -29,906 +29,911 @@
 <span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import java.lang.Thread.UncaughtExceptionHandler;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.util.ArrayList;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.ConcurrentModificationException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.HashMap;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.HashSet;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedMap;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.BlockingQueue;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.DelayQueue;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.Delayed;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.ThreadFactory;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.TimeUnit;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.LongAdder;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.concurrent.locks.ReentrantReadWriteLock;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.conf.Configuration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HRegion.FlushResult;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.htrace.core.TraceScope;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.slf4j.Logger;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.slf4j.LoggerFactory;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>/**<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * Thread that flushes cache on request<a name="line.60"></a>
-<span class="sourceLineNo">061</span> *<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * NOTE: This class extends Thread rather than Chore because the sleep time<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * can be interrupted when there is something to do, rather than the Chore<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * sleep time which is invariant.<a name="line.64"></a>
-<span class="sourceLineNo">065</span> *<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * @see FlushRequester<a name="line.66"></a>
-<span class="sourceLineNo">067</span> */<a name="line.67"></a>
-<span class="sourceLineNo">068</span>@InterfaceAudience.Private<a name="line.68"></a>
-<span class="sourceLineNo">069</span>class MemStoreFlusher implements FlushRequester {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private static final Logger LOG = LoggerFactory.getLogger(MemStoreFlusher.class);<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private Configuration conf;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  // These two data members go together.  Any entry in the one must have<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  // a corresponding entry in the other.<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private final BlockingQueue&lt;FlushQueueEntry&gt; flushQueue = new DelayQueue&lt;&gt;();<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private final Map&lt;Region, FlushRegionEntry&gt; regionsInQueue = new HashMap&lt;&gt;();<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private AtomicBoolean wakeupPending = new AtomicBoolean();<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private final long threadWakeFrequency;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private final HRegionServer server;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private final Object blockSignal = new Object();<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  private long blockingWaitTime;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private final LongAdder updatesBlockedMsHighWater = new LongAdder();<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private final FlushHandler[] flushHandlers;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private List&lt;FlushRequestListener&gt; flushRequestListeners = new ArrayList&lt;&gt;(1);<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private FlushType flushType;<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Singleton instance inserted into flush queue used for signaling.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private static final FlushQueueEntry WAKEUPFLUSH_INSTANCE = new FlushQueueEntry() {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    @Override<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public long getDelay(TimeUnit unit) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return 0;<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>    @Override<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public int compareTo(Delayed o) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return -1;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>    @Override<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public boolean equals(Object obj) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      return obj == this;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    @Override<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public int hashCode() {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      return 42;<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">024</span>import java.util.Collection;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.ConcurrentModificationException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.HashMap;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.HashSet;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedMap;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.BlockingQueue;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.DelayQueue;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.Delayed;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.ThreadFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.TimeUnit;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.atomic.LongAdder;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.concurrent.locks.ReentrantReadWriteLock;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.HRegion.FlushResult;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.htrace.core.TraceScope;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.slf4j.Logger;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.slf4j.LoggerFactory;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>/**<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * Thread that flushes cache on request<a name="line.61"></a>
+<span class="sourceLineNo">062</span> *<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * NOTE: This class extends Thread rather than Chore because the sleep time<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * can be interrupted when there is something to do, rather than the Chore<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * sleep time which is invariant.<a name="line.65"></a>
+<span class="sourceLineNo">066</span> *<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * @see FlushRequester<a name="line.67"></a>
+<span class="sourceLineNo">068</span> */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>@InterfaceAudience.Private<a name="line.69"></a>
+<span class="sourceLineNo">070</span>class MemStoreFlusher implements FlushRequester {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private static final Logger LOG = LoggerFactory.getLogger(MemStoreFlusher.class);<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private Configuration conf;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  // These two data members go together.  Any entry in the one must have<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  // a corresponding entry in the other.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private final BlockingQueue&lt;FlushQueueEntry&gt; flushQueue = new DelayQueue&lt;&gt;();<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private final Map&lt;Region, FlushRegionEntry&gt; regionsInQueue = new HashMap&lt;&gt;();<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private AtomicBoolean wakeupPending = new AtomicBoolean();<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private final long threadWakeFrequency;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private final HRegionServer server;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  private final Object blockSignal = new Object();<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  private long blockingWaitTime;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private final LongAdder updatesBlockedMsHighWater = new LongAdder();<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final FlushHandler[] flushHandlers;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  private List&lt;FlushRequestListener&gt; flushRequestListeners = new ArrayList&lt;&gt;(1);<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private FlushType flushType;<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  /**<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * Singleton instance inserted into flush queue used for signaling.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   */<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private static final FlushQueueEntry WAKEUPFLUSH_INSTANCE = new FlushQueueEntry() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    @Override<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public long getDelay(TimeUnit unit) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      return 0;<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 int compareTo(Delayed o) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      return -1;<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>    @Override<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    public boolean equals(Object obj) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      return obj == this;<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>    @Override<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    public int hashCode() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      return 42;<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>  /**<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @param conf<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param server<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public MemStoreFlusher(final Configuration conf,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      final HRegionServer server) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    super();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    this.conf = conf;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    this.server = server;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    this.threadWakeFrequency =<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        conf.getLong(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    this.blockingWaitTime = conf.getInt("hbase.hstore.blockingWaitTime",<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      90000);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    int handlerCount = conf.getInt("hbase.hstore.flusher.count", 2);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    this.flushHandlers = new FlushHandler[handlerCount];<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    LOG.info("globalMemStoreLimit="<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        + TraditionalBinaryPrefix<a name="line.134"></a>
-<span class="sourceLineNo">135</span>            .long2String(this.server.getRegionServerAccounting().getGlobalMemStoreLimit(), "", 1)<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        + ", globalMemStoreLimitLowMark="<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        + TraditionalBinaryPrefix.long2String(<a name="line.137"></a>
-<span class="sourceLineNo">138</span>          this.server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1)<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        + ", Offheap="<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        + (this.server.getRegionServerAccounting().isOffheap()));<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public LongAdder getUpdatesBlockedMsHighWater() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    return this.updatesBlockedMsHighWater;<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>  public void setFlushType(FlushType flushType) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    this.flushType = flushType;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>  /**<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * The memstore across all regions has exceeded the low water mark. Pick<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * one region to flush and flush it synchronously (this is called from the<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * flush thread)<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * @return true if successful<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  private boolean flushOneForGlobalPressure() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    SortedMap&lt;Long, HRegion&gt; regionsBySize = null;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    switch(flushType) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOffHeapSize();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        break;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      case ABOVE_ONHEAP_LOWER_MARK:<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      default:<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOnHeapSize();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    Set&lt;HRegion&gt; excludedRegions = new HashSet&lt;&gt;();<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    double secondaryMultiplier<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      = ServerRegionReplicaUtil.getRegionReplicaStoreFileRefreshMultiplier(conf);<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>    boolean flushedOne = false;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    while (!flushedOne) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      // Find the biggest region that doesn't have too many storefiles (might be null!)<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      HRegion bestFlushableRegion =<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          getBiggestMemStoreRegion(regionsBySize, excludedRegions, true);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      // Find the biggest region, total, even if it might have too many flushes.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      HRegion bestAnyRegion = getBiggestMemStoreRegion(regionsBySize, excludedRegions, false);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      // Find the biggest region that is a secondary region<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      HRegion bestRegionReplica = getBiggestMemStoreOfRegionReplica(regionsBySize, excludedRegions);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      if (bestAnyRegion == null) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        // If bestAnyRegion is null, assign replica. It may be null too. Next step is check for null<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        bestAnyRegion = bestRegionReplica;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      if (bestAnyRegion == null) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        LOG.error("Above memory mark but there are no flushable regions!");<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        return false;<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>      HRegion regionToFlush;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      long bestAnyRegionSize;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      long bestFlushableRegionSize;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      switch(flushType) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreOffHeapSize();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>          bestFlushableRegionSize = getMemStoreOffHeapSize(bestFlushableRegion);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          break;<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.203"></a>
-<span class="sourceLineNo">204</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreHeapSize();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>          bestFlushableRegionSize = getMemStoreHeapSize(bestFlushableRegion);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>          break;<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>        default:<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreDataSize();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          bestFlushableRegionSize = getMemStoreDataSize(bestFlushableRegion);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      if (bestAnyRegionSize &gt; 2 * bestFlushableRegionSize) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        // Even if it's not supposed to be flushed, pick a region if it's more than twice<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        // as big as the best flushable one - otherwise when we're under pressure we make<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        // lots of little flushes and cause lots of compactions, etc, which just makes<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        // life worse!<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        if (LOG.isDebugEnabled()) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          LOG.debug("Under global heap pressure: " + "Region "<a name="line.218"></a>
-<span class="sourceLineNo">219</span>              + bestAnyRegion.getRegionInfo().getRegionNameAsString()<a name="line.219"></a>
-<span class="sourceLineNo">220</span>              + " has too many " + "store files, but is "<a name="line.220"></a>
-<span class="sourceLineNo">221</span>              + TraditionalBinaryPrefix.long2String(bestAnyRegionSize, "", 1)<a name="line.221"></a>
-<span class="sourceLineNo">222</span>              + " vs best flushable region's "<a name="line.222"></a>
-<span class="sourceLineNo">223</span>              + TraditionalBinaryPrefix.long2String(<a name="line.223"></a>
-<span class="sourceLineNo">224</span>              bestFlushableRegionSize, "", 1)<a name="line.224"></a>
-<span class="sourceLineNo">225</span>              + ". Choosing the bigger.");<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        regionToFlush = bestAnyRegion;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      } else {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        if (bestFlushableRegion == null) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          regionToFlush = bestAnyRegion;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        } else {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          regionToFlush = bestFlushableRegion;<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><a name="line.235"></a>
-<span class="sourceLineNo">236</span>      long regionToFlushSize;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      long bestRegionReplicaSize;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      switch(flushType) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          regionToFlushSize = regionToFlush.getMemStoreOffHeapSize();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>          bestRegionReplicaSize = getMemStoreOffHeapSize(bestRegionReplica);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          break;<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          regionToFlushSize = regionToFlush.getMemStoreHeapSize();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          bestRegionReplicaSize = getMemStoreHeapSize(bestRegionReplica);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          break;<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>        default:<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          regionToFlushSize = regionToFlush.getMemStoreDataSize();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          bestRegionReplicaSize = getMemStoreDataSize(bestRegionReplica);<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>      Preconditions.checkState(<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        (regionToFlush != null &amp;&amp; regionToFlushSize &gt; 0) || bestRegionReplicaSize &gt; 0);<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      if (regionToFlush == null ||<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          (bestRegionReplica != null &amp;&amp;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>           ServerRegionReplicaUtil.isRegionReplicaStoreFileRefreshEnabled(conf) &amp;&amp;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>           (bestRegionReplicaSize &gt; secondaryMultiplier * regionToFlushSize))) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        LOG.info("Refreshing storefiles of region " + bestRegionReplica +<a name="line.263"></a>
-<span class="sourceLineNo">264</span>            " due to global heap pressure. Total memstore off heap size=" +<a name="line.264"></a>
-<span class="sourceLineNo">265</span>            TraditionalBinaryPrefix.long2String(<a name="line.265"></a>
-<span class="sourceLineNo">266</span>              server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.266"></a>
-<span class="sourceLineNo">267</span>            " memstore heap size=" + TraditionalBinaryPrefix.long2String(<a name="line.267"></a>
-<span class="sourceLineNo">268</span>              server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1));<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        flushedOne = refreshStoreFilesAndReclaimMemory(bestRegionReplica);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        if (!flushedOne) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          LOG.info("Excluding secondary region " + bestRegionReplica +<a name="line.271"></a>
-<span class="sourceLineNo">272</span>              " - trying to find a different region to refresh files.");<a name="line.272"></a>
-<span class="sourceLineNo">273</span>          excludedRegions.add(bestRegionReplica);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      } else {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        LOG.info("Flush of region " + regionToFlush + " due to global heap pressure. " +<a name="line.276"></a>
-<span class="sourceLineNo">277</span>            "Flush type=" + flushType.toString() +<a name="line.277"></a>
-<span class="sourceLineNo">278</span>            "Total Memstore Heap size=" +<a name="line.278"></a>
-<span class="sourceLineNo">279</span>            TraditionalBinaryPrefix.long2String(<a name="line.279"></a>
-<span class="sourceLineNo">280</span>                server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1) +<a name="line.280"></a>
-<span class="sourceLineNo">281</span>            "Total Memstore Off-Heap size=" +<a name="line.281"></a>
-<span class="sourceLineNo">282</span>            TraditionalBinaryPrefix.long2String(<a name="line.282"></a>
-<span class="sourceLineNo">283</span>                server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.283"></a>
-<span class="sourceLineNo">284</span>            ", Region memstore size=" +<a name="line.284"></a>
-<span class="sourceLineNo">285</span>            TraditionalBinaryPrefix.long2String(regionToFlushSize, "", 1));<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        flushedOne = flushRegion(regionToFlush, true, false, FlushLifeCycleTracker.DUMMY);<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (!flushedOne) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          LOG.info("Excluding unflushable region " + regionToFlush +<a name="line.289"></a>
-<span class="sourceLineNo">290</span>              " - trying to find a different region to flush.");<a name="line.290"></a>
-<span class="sourceLineNo">291</span>          excludedRegions.add(regionToFlush);<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>    }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return true;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  /**<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * @return Return memstore offheap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   */<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  private static long getMemStoreOffHeapSize(HRegion r) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    return r == null? 0: r.getMemStoreOffHeapSize();<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  }<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>   * @return Return memstore heap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   */<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  private static long getMemStoreHeapSize(HRegion r) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    return r == null? 0: r.getMemStoreHeapSize();<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">312</span>  /**<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * @return Return memstore data size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  private static long getMemStoreDataSize(HRegion r) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    return r == null? 0: r.getMemStoreDataSize();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  private class FlushHandler extends HasThread {<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    private FlushHandler(String name) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      super(name);<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>    @Override<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    public void run() {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      while (!server.isStopped()) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        FlushQueueEntry fqe = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        try {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          wakeupPending.set(false); // allow someone to wake us up again<a name="line.330"></a>
-<span class="sourceLineNo">331</span>          fqe = flushQueue.poll(threadWakeFrequency, TimeUnit.MILLISECONDS);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>          if (fqe == null || fqe == WAKEUPFLUSH_INSTANCE) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>            FlushType type = isAboveLowWaterMark();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            if (type != FlushType.NORMAL) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>              LOG.debug("Flush thread woke up because memory above low water="<a name="line.335"></a>
-<span class="sourceLineNo">336</span>                  + TraditionalBinaryPrefix.long2String(<a name="line.336"></a>
-<span class="sourceLineNo">337</span>                    server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1));<a name="line.337"></a>
-<span class="sourceLineNo">338</span>              // For offheap memstore, even if the lower water mark was breached due to heap overhead<a name="line.338"></a>
-<span class="sourceLineNo">339</span>              // we still select the regions based on the region's memstore data size.<a name="line.339"></a>
-<span class="sourceLineNo">340</span>              // TODO : If we want to decide based on heap over head it can be done without tracking<a name="line.340"></a>
-<span class="sourceLineNo">341</span>              // it per region.<a name="line.341"></a>
-<span class="sourceLineNo">342</span>              if (!flushOneForGlobalPressure()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>                // Wasn't able to flush any region, but we're above low water mark<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                // This is unlikely to happen, but might happen when closing the<a name="line.344"></a>
-<span class="sourceLineNo">345</span>                // entire server - another thread is flushing regions. We'll just<a name="line.345"></a>
-<span class="sourceLineNo">346</span>                // sleep a little bit to avoid spinning, and then pretend that<a name="line.346"></a>
-<span class="sourceLineNo">347</span>                // we flushed one, so anyone blocked will check again<a name="line.347"></a>
-<span class="sourceLineNo">348</span>                Thread.sleep(1000);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>                wakeUpIfBlocking();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>              }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>              // Enqueue another one of these tokens so we'll wake up again<a name="line.351"></a>
-<span class="sourceLineNo">352</span>              wakeupFlushThread();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>            }<a name="line.353"></a>
-<span class="sourceLineNo">354</span>            continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          FlushRegionEntry fre = (FlushRegionEntry) fqe;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>          if (!flushRegion(fre)) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            break;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>          }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        } catch (InterruptedException ex) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          continue;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        } catch (ConcurrentModificationException ex) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          continue;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        } catch (Exception ex) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          LOG.error("Cache flusher failed for entry " + fqe, ex);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (!server.checkFileSystem()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            break;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      synchronized (regionsInQueue) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        regionsInQueue.clear();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        flushQueue.clear();<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>      // Signal anyone waiting, so they see the close flag<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      wakeUpIfBlocking();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      LOG.info(getName() + " exiting");<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  /**<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @param conf<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param server<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public MemStoreFlusher(final Configuration conf,<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      final HRegionServer server) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    super();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    this.conf = conf;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    this.server = server;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    this.threadWakeFrequency =<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        conf.getLong(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    this.blockingWaitTime = conf.getInt("hbase.hstore.blockingWaitTime",<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      90000);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    int handlerCount = conf.getInt("hbase.hstore.flusher.count", 2);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.flushHandlers = new FlushHandler[handlerCount];<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    LOG.info("globalMemStoreLimit="<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        + TraditionalBinaryPrefix<a name="line.135"></a>
+<span class="sourceLineNo">136</span>            .long2String(this.server.getRegionServerAccounting().getGlobalMemStoreLimit(), "", 1)<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        + ", globalMemStoreLimitLowMark="<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        + TraditionalBinaryPrefix.long2String(<a name="line.138"></a>
+<span class="sourceLineNo">139</span>          this.server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1)<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        + ", Offheap="<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        + (this.server.getRegionServerAccounting().isOffheap()));<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>  public LongAdder getUpdatesBlockedMsHighWater() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return this.updatesBlockedMsHighWater;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  public void setFlushType(FlushType flushType) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    this.flushType = flushType;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>  /**<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * The memstore across all regions has exceeded the low water mark. Pick<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * one region to flush and flush it synchronously (this is called from the<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * flush thread)<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return true if successful<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  private boolean flushOneForGlobalPressure() {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; regionsBySize = null;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    switch(flushType) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOffHeapSize();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        break;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      case ABOVE_ONHEAP_LOWER_MARK:<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      default:<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOnHeapSize();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    Set&lt;HRegion&gt; excludedRegions = new HashSet&lt;&gt;();<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>    double secondaryMultiplier<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      = ServerRegionReplicaUtil.getRegionReplicaStoreFileRefreshMultiplier(conf);<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    boolean flushedOne = false;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    while (!flushedOne) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      // Find the biggest region that doesn't have too many storefiles (might be null!)<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      HRegion bestFlushableRegion =<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          getBiggestMemStoreRegion(regionsBySize, excludedRegions, true);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      // Find the biggest region, total, even if it might have too many flushes.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      HRegion bestAnyRegion = getBiggestMemStoreRegion(regionsBySize, excludedRegions, false);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      // Find the biggest region that is a secondary region<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      HRegion bestRegionReplica = getBiggestMemStoreOfRegionReplica(regionsBySize, excludedRegions);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      if (bestAnyRegion == null) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        // If bestAnyRegion is null, assign replica. It may be null too. Next step is check for null<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        bestAnyRegion = bestRegionReplica;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      if (bestAnyRegion == null) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        LOG.error("Above memory mark but there are no flushable regions!");<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        return false;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>      HRegion regionToFlush;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      long bestAnyRegionSize;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      long bestFlushableRegionSize;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      switch(flushType) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreOffHeapSize();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          bestFlushableRegionSize = getMemStoreOffHeapSize(bestFlushableRegion);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>          break;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreHeapSize();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          bestFlushableRegionSize = getMemStoreHeapSize(bestFlushableRegion);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          break;<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>        default:<a name="line.209"></a>
+<span class="sourceLineNo">210</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreDataSize();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          bestFlushableRegionSize = getMemStoreDataSize(bestFlushableRegion);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      if (bestAnyRegionSize &gt; 2 * bestFlushableRegionSize) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        // Even if it's not supposed to be flushed, pick a region if it's more than twice<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        // as big as the best flushable one - otherwise when we're under pressure we make<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        // lots of little flushes and cause lots of compactions, etc, which just makes<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        // life worse!<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        if (LOG.isDebugEnabled()) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          LOG.debug("Under global heap pressure: " + "Region "<a name="line.219"></a>
+<span class="sourceLineNo">220</span>              + bestAnyRegion.getRegionInfo().getRegionNameAsString()<a name="line.220"></a>
+<span class="sourceLineNo">221</span>              + " has too many " + "store files, but is "<a name="line.221"></a>
+<span class="sourceLineNo">222</span>              + TraditionalBinaryPrefix.long2String(bestAnyRegionSize, "", 1)<a name="line.222"></a>
+<span class="sourceLineNo">223</span>              + " vs best flushable region's "<a name="line.223"></a>
+<span class="sourceLineNo">224</span>              + TraditionalBinaryPrefix.long2String(<a name="line.224"></a>
+<span class="sourceLineNo">225</span>              bestFlushableRegionSize, "", 1)<a name="line.225"></a>
+<span class="sourceLineNo">226</span>              + ". Choosing the bigger.");<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        regionToFlush = bestAnyRegion;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      } else {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        if (bestFlushableRegion == null) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          regionToFlush = bestAnyRegion;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>          regionToFlush = bestFlushableRegion;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        }<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>      long regionToFlushSize;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      long bestRegionReplicaSize;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      switch(flushType) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          regionToFlushSize = regionToFlush.getMemStoreOffHeapSize();<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          bestRegionReplicaSize = getMemStoreOffHeapSize(bestRegionReplica);<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>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          regionToFlushSize = regionToFlush.getMemStoreHeapSize();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          bestRegionReplicaSize = getMemStoreHeapSize(bestRegionReplica);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          break;<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>        default:<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          regionToFlushSize = regionToFlush.getMemStoreDataSize();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          bestRegionReplicaSize = getMemStoreDataSize(bestRegionReplica);<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>      Preconditions.checkState(<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        (regionToFlush != null &amp;&amp; regionToFlushSize &gt; 0) || bestRegionReplicaSize &gt; 0);<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>      if (regionToFlush == null ||<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          (bestRegionReplica != null &amp;&amp;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>           ServerRegionReplicaUtil.isRegionReplicaStoreFileRefreshEnabled(conf) &amp;&amp;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>           (bestRegionReplicaSize &gt; secondaryMultiplier * regionToFlushSize))) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        LOG.info("Refreshing storefiles of region " + bestRegionReplica +<a name="line.264"></a>
+<span class="sourceLineNo">265</span>            " due to global heap pressure. Total memstore off heap size=" +<a name="line.265"></a>
+<span class="sourceLineNo">266</span>            TraditionalBinaryPrefix.long2String(<a name="line.266"></a>
+<span class="sourceLineNo">267</span>              server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.267"></a>
+<span class="sourceLineNo">268</span>            " memstore heap size=" + TraditionalBinaryPrefix.long2String(<a name="line.268"></a>
+<span class="sourceLineNo">269</span>              server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1));<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        flushedOne = refreshStoreFilesAndReclaimMemory(bestRegionReplica);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        if (!flushedOne) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          LOG.info("Excluding secondary region " + bestRegionReplica +<a name="line.272"></a>
+<span class="sourceLineNo">273</span>              " - trying to find a different region to refresh files.");<a name="line.273"></a>
+<span class="sourceLineNo">274</span>          excludedRegions.add(bestRegionReplica);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      } else {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        LOG.info("Flush of region " + regionToFlush + " due to global heap pressure. " +<a name="line.277"></a>
+<span class="sourceLineNo">278</span>            "Flush type=" + flushType.toString() +<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            "Total Memstore Heap size=" +<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            TraditionalBinaryPrefix.long2String(<a name="line.280"></a>
+<span class="sourceLineNo">281</span>                server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1) +<a name="line.281"></a>
+<span class="sourceLineNo">282</span>            "Total Memstore Off-Heap size=" +<a name="line.282"></a>
+<span class="sourceLineNo">283</span>            TraditionalBinaryPrefix.long2String(<a name="line.283"></a>
+<span class="sourceLineNo">284</span>                server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.284"></a>
+<span class="sourceLineNo">285</span>            ", Region memstore size=" +<a name="line.285"></a>
+<span class="sourceLineNo">286</span>            TraditionalBinaryPrefix.long2String(regionToFlushSize, "", 1));<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        flushedOne = flushRegion(regionToFlush, true, false, FlushLifeCycleTracker.DUMMY);<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>        if (!flushedOne) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          LOG.info("Excluding unflushable region " + regionToFlush +<a name="line.290"></a>
+<span class="sourceLineNo">291</span>              " - trying to find a different region to flush.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          excludedRegions.add(regionToFlush);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        }<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>    return true;<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>  /**<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @return Return memstore offheap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   */<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  private static long getMemStoreOffHeapSize(HRegion r) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    return r == null? 0: r.getMemStoreOffHeapSize();<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>   * @return Return memstore heap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   */<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  private static long getMemStoreHeapSize(HRegion r) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    return r == null? 0: r.getMemStoreHeapSize();<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  }<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>   * @return Return memstore data size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  private static long getMemStoreDataSize(HRegion r) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    return r == null? 0: r.getMemStoreDataSize();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  private class FlushHandler extends HasThread {<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    private FlushHandler(String name) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      super(name);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>    @Override<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    public void run() {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      while (!server.isStopped()) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        FlushQueueEntry fqe = null;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>          wakeupPending.set(false); // allow someone to wake us up again<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          fqe = flushQueue.poll(threadWakeFrequency, TimeUnit.MILLISECONDS);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          if (fqe == null || fqe == WAKEUPFLUSH_INSTANCE) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            FlushType type = isAboveLowWaterMark();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>            if (type != FlushType.NORMAL) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>              LOG.debug("Flush thread woke up because memory above low water="<a name="line.336"></a>
+<span class="sourceLineNo">337</span>                  + TraditionalBinaryPrefix.long2String(<a name="line.337"></a>
+<span class="sourceLineNo">338</span>                    server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1));<a name="line.338"></a>
+<span class="sourceLineNo">339</span>              // For offheap memstore, even if the lower water mark was breached due to heap overhead<a name="line.339"></a>
+<span class="sourceLineNo">340</span>              // we still select the regions based on the region's memstore data size.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>              // TODO : If we want to decide based on heap over head it can be done without tracking<a name="line.341"></a>
+<span class="sourceLineNo">342</span>              // it per region.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              if (!flushOneForGlobalPressure()) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                // Wasn't able to flush any region, but we're above low water mark<a name="line.344"></a>
+<span class="sourceLineNo">345</span>                // This is unlikely to happen, but might happen when closing the<a name="line.345"></a>
+<span class="sourceLineNo">346</span>                // entire server - another thread is flushing regions. We'll just<a name="line.346"></a>
+<span class="sourceLineNo">347</span>                // sleep a little bit to avoid spinning, and then pretend that<a name="line.347"></a>
+<span class="sourceLineNo">348</span>                // we flushed one, so anyone blocked will check again<a name="line.348"></a>
+<span class="sourceLineNo">349</span>                Thread.sleep(1000);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                wakeUpIfBlocking();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>              }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>              // Enqueue another one of these tokens so we'll wake up again<a name="line.352"></a>
+<span class="sourceLineNo">353</span>              wakeupFlushThread();<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            }<a name="line.354"></a>
+<span class="sourceLineNo">355</span>            continue;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          FlushRegionEntry fre = (FlushRegionEntry) fqe;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          if (!flushRegion(fre)) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>            break;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        } catch (InterruptedException ex) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>          continue;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        } catch (ConcurrentModificationException ex) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>          continue;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        } catch (Exception ex) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>          LOG.error("Cache flusher failed for entry " + fqe, ex);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          if (!server.checkFileSystem()) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>            break;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      synchronized (regionsInQueue) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        regionsInQueue.clear();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        flushQueue.clear();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>      // Signal anyone waiting, so they see the close flag<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      wakeUpIfBlocking();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      LOG.info(getName() + " exiting");<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    }<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
 <span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private void wakeupFlushThread() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    if (wakeupPending.compareAndSet(false, true)) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      flushQueue.add(WAKEUPFLUSH_INSTANCE);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  private HRegion getBiggestMemStoreRegion(<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      SortedMap&lt;Long, HRegion&gt; regionsBySize,<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      Set&lt;HRegion&gt; excludedRegions,<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      boolean checkStoreFileCount) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    synchronized (regionsInQueue) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      for (HRegion region : regionsBySize.values()) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (excludedRegions.contains(region)) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          continue;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        }<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>        if (region.writestate.flushing || !region.writestate.writesEnabled) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>          continue;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>        if (checkStoreFileCount &amp;&amp; isTooManyStoreFiles(region)) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          continue;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        return region;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      }<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return null;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  private HRegion getBiggestMemStoreOfRegionReplica(SortedMap&lt;Long, HRegion&gt; regionsBySize,<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      Set&lt;HRegion&gt; excludedRegions) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    synchronized (regionsInQueue) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      for (HRegion region : regionsBySize.values()) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        if (excludedRegions.contains(region)) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          continue;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>        if (RegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          continue;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>        return region;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    return null;<a name="line.427"></a>
-<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>  private boolean refreshStoreFilesAndReclaimMemory(Region region) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    try {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      return region.refreshStoreFiles();<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    } catch (IOException e) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      LOG.warn("Refreshing store files failed with exception", e);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    return false;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
-<span class="sourceLineNo">438</span><a name="line.438"></a>
-<span class="sourceLineNo">439</span>  /**<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * Return true if global memory usage is above the high watermark<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   */<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private FlushType isAboveHighWaterMark() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return server.getRegionServerAccounting().isAboveHighWaterMark();<a name="line.443"></a>
-<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>  /**<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * Return true if we're above the low watermark<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private FlushType isAboveLowWaterMark() {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    return server.getRegionServerAccounting().isAboveLowWaterMark();<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>  @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  public void requestFlush(HRegion r, boolean forceFlushAllStores, FlushLifeCycleTracker tracker) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    r.incrementFlushesQueuedCount();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    synchronized (regionsInQueue) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      if (!regionsInQueue.containsKey(r)) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        // This entry has no delay so it will be added at the top of the flush<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        // queue. It'll come out near immediately.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        FlushRegionEntry fqe = new FlushRegionEntry(r, forceFlushAllStores, tracker);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        this.regionsInQueue.put(r, fqe);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        this.flushQueue.add(fqe);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      } else {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        tracker.notExecuted("Flush already requested on " + r);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  @Override<a name="line.469"></a>
-<span class="sourceLineNo">470</span>  public void requestDelayedFlush(HRegion r, long delay, boolean forceFlushAllStores) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    r.incrementFlushesQueuedCount();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    synchronized (regionsInQueue) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      if (!regionsInQueue.containsKey(r)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        // This entry has some delay<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        FlushRegionEntry fqe =<a name="line.475"></a>
-<span class="sourceLineNo">476</span>            new FlushRegionEntry(r, forceFlushAllStores, FlushLifeCycleTracker.DUMMY);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        fqe.requeue(delay);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        this.regionsInQueue.put(r, fqe);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        this.flushQueue.add(fqe);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      }<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>  public int getFlushQueueSize() {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    return flushQueue.size();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  }<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>   * Only interrupt once it's done with a run through the work loop.<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   */<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  void interruptIfNecessary() {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    lock.writeLock().lock();<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    try {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      for (FlushHandler flushHander : flushHandlers) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        if (flushHander != null) flushHander.interrupt();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    } finally {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      lock.writeLock().unlock();<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><a name="line.501"></a>
-<span class="sourceLineNo">502</span>  synchronized void start(UncaughtExceptionHandler eh) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    ThreadFactory flusherThreadFactory = Threads.newDaemonThreadFactory(<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        server.getServerName().toShortString() + "-MemStoreFlusher", eh);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    for (int i = 0; i &lt; flushHandlers.length; i++) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      flushHandlers[i] = new FlushHandler("MemStoreFlusher." + i);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      flusherThreadFactory.newThread(flushHandlers[i]);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      flushHandlers[i].start();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>  }<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>  boolean isAlive() {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    for (FlushHandler flushHander : flushHandlers) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      if (flushHander != null &amp;&amp; flushHander.isAlive()) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return true;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    return false;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>  }<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>  void join() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    for (FlushHandler flushHander : flushHandlers) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      if (flushHander != null) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        Threads.shutdown(flushHander.getThread());<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>  /**<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * A flushRegion that checks store file count.  If too many, puts the flush<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * on delay queue to retry later.<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * @param fqe<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * @return true if the region was successfully flushed, false otherwise. If<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   * false, there will be accompanying log messages explaining why the region was<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   * not flushed.<a name="line.535"></a>
-<span class="sourceLineNo">536</span>   */<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  private boolean flushRegion(final FlushRegionEntry fqe) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    HRegion region = fqe.region;<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    if (!region.getRegionInfo().isMetaRegion() &amp;&amp; isTooManyStoreFiles(region)) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (fqe.isMaximumWait(this.blockingWaitTime)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.info("Waited " + (EnvironmentEdgeManager.currentTime() - fqe.createTime) +<a name="line.541"></a>
-<span class="sourceLineNo">542</span>          "ms on a compaction to clean up 'too many store files'; waited " +<a name="line.542"></a>
-<span class="sourceLineNo">543</span>          "long enough... proceeding with flush of " +<a name="line.543"></a>
-<span class="sourceLineNo">544</span>          region.getRegionInfo().getRegionNameAsString());<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      } else {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        // If this is first time we've been put off, then emit a log message.<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        if (fqe.getRequeueCount() &lt;= 0) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>          // Note: We don't impose blockingStoreFiles constraint on meta regions<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          LOG.warn("Region " + region.getRegionInfo().getEncodedName() + " has too many " +<a name="line.549"></a>
-<span class="sourceLineNo">550</span>            "store files; delaying flush up to " + this.blockingWaitTime + "ms");<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          if (!this.server.compactSplitThread.requestSplit(region)) {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>            try {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>              this.server.compactSplitThread.requestSystemCompaction(region,<a name="line.553"></a>
-<span class="sourceLineNo">554</span>                Thread.currentThread().getName());<a name="line.554"></a>
-<span class="sourceLineNo">555</span>            } catch (IOException e) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>              e = e instanceof RemoteException ?<a name="line.556"></a>
-<span class="sourceLineNo">557</span>                      ((RemoteException)e).unwrapRemoteException() : e;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>              LOG.error("Cache flush failed for region " +<a name="line.558"></a>
-<span class="sourceLineNo">559</span>                Bytes.toStringBinary(region.getRegionInfo().getRegionName()), e);<a name="line.559"></a>
-<span class="sourceLineNo">560</span>            }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>          }<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        }<a name="line.562"></a>
-<s

<TRUNCATED>

[10/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
index b1c7be8..7f2e325 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
@@ -2767,1025 +2767,1030 @@
 <span class="sourceLineNo">2759</span>    configurationManager.registerObserver(region);<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>  }<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span><a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>  /**<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>   *   the biggest.  If two regions are the same size, then the last one found wins; i.e. this<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>   *   method may NOT return all regions.<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>   */<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>  SortedMap&lt;Long, HRegion&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>    // we'll sort the regions in reverse<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    SortedMap&lt;Long, HRegion&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>        new Comparator&lt;Long&gt;() {<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>          @Override<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>          public int compare(Long a, Long b) {<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>            return -1 * a.compareTo(b);<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>          }<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        });<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      sortedRegions.put(region.getMemStoreOffHeapSize(), region);<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>    }<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>    return sortedRegions;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>  }<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span><a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>  /**<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>   *   biggest.  If two regions are the same size, then the last one found wins; i.e. this method<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>   *   may NOT return all regions.<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>   */<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>  SortedMap&lt;Long, HRegion&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>    // we'll sort the regions in reverse<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>    SortedMap&lt;Long, HRegion&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>        new Comparator&lt;Long&gt;() {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>          @Override<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>          public int compare(Long a, Long b) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>            return -1 * a.compareTo(b);<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>          }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>        });<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>      sortedRegions.put(region.getMemStoreHeapSize(), region);<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>    }<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>    return sortedRegions;<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>  }<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span><a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>  /**<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>   * @return time stamp in millis of when this region server was started<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>   */<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>  public long getStartcode() {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>    return this.startcode;<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>  }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span><a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>  /** @return reference to FlushRequester */<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>  @Override<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>  public FlushRequester getFlushRequester() {<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>    return this.cacheFlusher;<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>  }<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span><a name="line.2816"></a>
+<span class="sourceLineNo">2762</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>      long size) {<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>    }<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>    sortedRegions.get(size).add(region);<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>  }<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>  /**<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>   *   the biggest.<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>   */<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>    // we'll sort the regions in reverse<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>        new Comparator&lt;Long&gt;() {<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>          @Override<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>          public int compare(Long a, Long b) {<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>            return -1 * a.compareTo(b);<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>          }<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>        });<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>    }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>    return sortedRegions;<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>  }<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span><a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>  /**<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>   *   biggest.<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>   */<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>    // we'll sort the regions in reverse<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>        new Comparator&lt;Long&gt;() {<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>          @Override<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>          public int compare(Long a, Long b) {<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>            return -1 * a.compareTo(b);<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>          }<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>        });<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>    }<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>    return sortedRegions;<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>  }<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span><a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>  /**<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>   * @return time stamp in millis of when this region server was started<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>   */<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>  public long getStartcode() {<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>    return this.startcode;<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>  }<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span><a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>  /** @return reference to FlushRequester */<a name="line.2816"></a>
 <span class="sourceLineNo">2817</span>  @Override<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>    return this.compactSplitThread;<a name="line.2819"></a>
+<span class="sourceLineNo">2818</span>  public FlushRequester getFlushRequester() {<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>    return this.cacheFlusher;<a name="line.2819"></a>
 <span class="sourceLineNo">2820</span>  }<a name="line.2820"></a>
 <span class="sourceLineNo">2821</span><a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  /**<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>   * Get the top N most loaded regions this server is serving so we can tell the<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>   * master which regions it can reallocate if we're overloaded. TODO: actually<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>   * calculate which regions are most loaded. (Right now, we're just grabbing<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>   * the first N regions being served regardless of load.)<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>   */<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>  protected RegionInfo[] getMostLoadedRegions() {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>    ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;&gt;();<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>    for (Region r : onlineRegions.values()) {<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>      if (!r.isAvailable()) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>        continue;<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      }<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      if (regions.size() &lt; numRegionsToReport) {<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>        regions.add(r.getRegionInfo());<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      } else {<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>        break;<a name="line.2837"></a>
+<span class="sourceLineNo">2822</span>  @Override<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>    return this.compactSplitThread;<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>  }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span><a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>  /**<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>   * Get the top N most loaded regions this server is serving so we can tell the<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>   * master which regions it can reallocate if we're overloaded. TODO: actually<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>   * calculate which regions are most loaded. (Right now, we're just grabbing<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>   * the first N regions being served regardless of load.)<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>   */<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>  protected RegionInfo[] getMostLoadedRegions() {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>    ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;&gt;();<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>    for (Region r : onlineRegions.values()) {<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>      if (!r.isAvailable()) {<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>        continue;<a name="line.2837"></a>
 <span class="sourceLineNo">2838</span>      }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    }<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>    return regions.toArray(new RegionInfo[regions.size()]);<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>  }<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span><a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>  @Override<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>  public Leases getLeases() {<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>    return leases;<a name="line.2845"></a>
+<span class="sourceLineNo">2839</span>      if (regions.size() &lt; numRegionsToReport) {<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>        regions.add(r.getRegionInfo());<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>      } else {<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>        break;<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>      }<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>    }<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>    return regions.toArray(new RegionInfo[regions.size()]);<a name="line.2845"></a>
 <span class="sourceLineNo">2846</span>  }<a name="line.2846"></a>
 <span class="sourceLineNo">2847</span><a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  /**<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>   * @return Return the rootDir.<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>   */<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>  protected Path getRootDir() {<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    return rootDir;<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>  }<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span><a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>  /**<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>   * @return Return the fs.<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>   */<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>  @Override<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>  public FileSystem getFileSystem() {<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>    return fs;<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>  }<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span><a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>  /**<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>   * @return Return the walRootDir.<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>   */<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>  protected Path getWALRootDir() {<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>    return walRootDir;<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>  }<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span><a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>  /**<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>   * @return Return the walFs.<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>   */<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>  protected FileSystem getWALFileSystem() {<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>    return walFs;<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>  }<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span><a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>  @Override<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>  public String toString() {<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>    return getServerName().toString();<a name="line.2879"></a>
+<span class="sourceLineNo">2848</span>  @Override<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>  public Leases getLeases() {<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>    return leases;<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>  }<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span><a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>  /**<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>   * @return Return the rootDir.<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>   */<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>  protected Path getRootDir() {<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>    return rootDir;<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>  }<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span><a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>  /**<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>   * @return Return the fs.<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>   */<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>  @Override<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>  public FileSystem getFileSystem() {<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>    return fs;<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>  }<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span><a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>  /**<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>   * @return Return the walRootDir.<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>   */<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>  protected Path getWALRootDir() {<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>    return walRootDir;<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>  }<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span><a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>  /**<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>   * @return Return the walFs.<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>   */<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>  protected FileSystem getWALFileSystem() {<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>    return walFs;<a name="line.2879"></a>
 <span class="sourceLineNo">2880</span>  }<a name="line.2880"></a>
 <span class="sourceLineNo">2881</span><a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>  /**<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>   * Interval at which threads should run<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>   *<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>   * @return the interval<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>   */<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>  public int getThreadWakeFrequency() {<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    return threadWakeFrequency;<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>  }<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span><a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>  @Override<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>  public ZKWatcher getZooKeeper() {<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>    return zooKeeper;<a name="line.2893"></a>
+<span class="sourceLineNo">2882</span>  @Override<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>  public String toString() {<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>    return getServerName().toString();<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>  }<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span><a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>  /**<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>   * Interval at which threads should run<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span>   *<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>   * @return the interval<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>   */<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>  public int getThreadWakeFrequency() {<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>    return threadWakeFrequency;<a name="line.2893"></a>
 <span class="sourceLineNo">2894</span>  }<a name="line.2894"></a>
 <span class="sourceLineNo">2895</span><a name="line.2895"></a>
 <span class="sourceLineNo">2896</span>  @Override<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>    return csm;<a name="line.2898"></a>
+<span class="sourceLineNo">2897</span>  public ZKWatcher getZooKeeper() {<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>    return zooKeeper;<a name="line.2898"></a>
 <span class="sourceLineNo">2899</span>  }<a name="line.2899"></a>
 <span class="sourceLineNo">2900</span><a name="line.2900"></a>
 <span class="sourceLineNo">2901</span>  @Override<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>  public ServerName getServerName() {<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span>    return serverName;<a name="line.2903"></a>
+<span class="sourceLineNo">2902</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>    return csm;<a name="line.2903"></a>
 <span class="sourceLineNo">2904</span>  }<a name="line.2904"></a>
 <span class="sourceLineNo">2905</span><a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>    return this.rsHost;<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>  }<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span><a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>  @Override<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>    return this.regionsInTransitionInRS;<a name="line.2912"></a>
+<span class="sourceLineNo">2906</span>  @Override<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span>  public ServerName getServerName() {<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>    return serverName;<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>  }<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span><a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span>    return this.rsHost;<a name="line.2912"></a>
 <span class="sourceLineNo">2913</span>  }<a name="line.2913"></a>
 <span class="sourceLineNo">2914</span><a name="line.2914"></a>
 <span class="sourceLineNo">2915</span>  @Override<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>  public ExecutorService getExecutorService() {<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>    return executorService;<a name="line.2917"></a>
+<span class="sourceLineNo">2916</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>    return this.regionsInTransitionInRS;<a name="line.2917"></a>
 <span class="sourceLineNo">2918</span>  }<a name="line.2918"></a>
 <span class="sourceLineNo">2919</span><a name="line.2919"></a>
 <span class="sourceLineNo">2920</span>  @Override<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>  public ChoreService getChoreService() {<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>    return choreService;<a name="line.2922"></a>
+<span class="sourceLineNo">2921</span>  public ExecutorService getExecutorService() {<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>    return executorService;<a name="line.2922"></a>
 <span class="sourceLineNo">2923</span>  }<a name="line.2923"></a>
 <span class="sourceLineNo">2924</span><a name="line.2924"></a>
 <span class="sourceLineNo">2925</span>  @Override<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>    return rsQuotaManager;<a name="line.2927"></a>
+<span class="sourceLineNo">2926</span>  public ChoreService getChoreService() {<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>    return choreService;<a name="line.2927"></a>
 <span class="sourceLineNo">2928</span>  }<a name="line.2928"></a>
 <span class="sourceLineNo">2929</span><a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>  //<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>  // Main program and support routines<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>  //<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>  /**<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>   * Load the replication executorService objects, if any<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>   */<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    if ((server instanceof HMaster) &amp;&amp;<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>      (!LoadBalancer.isTablesOnMaster(conf) || LoadBalancer.isSystemTablesOnlyOnMaster(conf))) {<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>      return;<a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>    }<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span><a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>    // read in the name of the source replication class from the config file.<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span><a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>    // read in the name of the sink replication class from the config file.<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span><a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>    // only one object.<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>    } else {<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>    }<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>  }<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span><a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>    Class&lt;? extends T&gt; clazz = null;<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>    try {<a name="line.2969"></a>
-<span class="sourceLineNo">2970</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>      throw new IOException("Could not find class for " + classname);<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>    }<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>    return service;<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>  }<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span><a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>  /**<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>   *<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>   * @param regionServerClass<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>   * @param conf2<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>   * @return HRegionServer instance.<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span>   */<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>  public static HRegionServer constructRegionServer(<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span>      Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>      final Configuration conf2) {<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>    try {<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>      Constructor&lt;? extends HRegionServer&gt; c = regionServerClass<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>          .getConstructor(Configuration.class);<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span>      return c.newInstance(conf2);<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>    } catch (Exception e) {<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>          + regionServerClass.toString(), e);<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>    }<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>  }<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span><a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>  /**<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>   */<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>  public static void main(String[] args) throws Exception {<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>    VersionInfo.logVersion();<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>    @SuppressWarnings("unchecked")<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span><a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>  }<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span><a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>  /**<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>   * Gets the online regions of the specified table.<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>   * all the ONLINE regions in the table.<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>   * @param tableName<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>   */<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span>  @Override<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>     synchronized (this.onlineRegions) {<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span>           tableRegions.add(region);<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>         }<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>       }<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span>     }<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>     return tableRegions;<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>   }<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span><a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>  @Override<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>    List&lt;HRegion&gt; allRegions = new ArrayList&lt;&gt;();<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>    synchronized (this.onlineRegions) {<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>      // Return a clone copy of the onlineRegions<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>      allRegions.addAll(onlineRegions.values());<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>    }<a name="line.3044"></a>
-<span class="sourceLineNo">3045</span>    return allRegions;<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>  }<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span><a name="line.3047"></a>
-<span class="sourceLineNo">3048</span>  /**<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>   * Gets the online tables in this RS.<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>   * This method looks at the in-memory onlineRegions.<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>   * @return all the online tables in this RS<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>   */<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>    synchronized (this.onlineRegions) {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span>      }<a name="line.3058"></a>
-<span class="sourceLineNo">3059</span>    }<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span>    return tables;<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>  }<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span><a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>  // used by org/apache/hbase/tmpl/regionserver/RSStatusTmpl.jamon (HBASE-4070).<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>  public String[] getRegionServerCoprocessors() {<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>    try {<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>    } catch (IOException exception) {<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span>          "skipping.");<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>    }<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span>    for (HRegion region: regions) {<a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>      try {<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>      } catch (IOException exception) {<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>            "; skipping.");<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>      }<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>    }<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>    return coprocessors.toArray(new String[coprocessors.size()]);<a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>  }<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span><a name="line.3087"></a>
-<span class="sourceLineNo">3088</span>  /**<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>   * @param region Region to close<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>   */<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>    try {<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>            " - ignoring and continuing");<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>      }<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>    } catch (IOException e) {<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>          " - ignoring and continuing", e);<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>    }<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>  }<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span><a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>  /**<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>   * when stopping. If called from the master, the region will update the znode status.<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>   *<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>   * &lt;p&gt;<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>   * &lt;/p&gt;<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span><a name="line.3112"></a>
+<span class="sourceLineNo">2930</span>  @Override<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>    return rsQuotaManager;<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>  }<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span><a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>  //<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span>  // Main program and support routines<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>  //<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>  /**<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>   * Load the replication executorService objects, if any<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>   */<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span>    if ((server instanceof HMaster) &amp;&amp;<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>      (!LoadBalancer.isTablesOnMaster(conf) || LoadBalancer.isSystemTablesOnlyOnMaster(conf))) {<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>      return;<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>    }<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span><a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>    // read in the name of the source replication class from the config file.<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span><a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>    // read in the name of the sink replication class from the config file.<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span><a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>    // only one object.<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>    } else {<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>    }<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>  }<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span><a name="line.2969"></a>
+<span class="sourceLineNo">2970</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>    Class&lt;? extends T&gt; clazz = null;<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>    try {<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>      throw new IOException("Could not find class for " + classname);<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>    }<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>    return service;<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>  }<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span><a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>  /**<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>   *<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>   * @param regionServerClass<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>   * @param conf2<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>   * @return HRegionServer instance.<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>   */<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>  public static HRegionServer constructRegionServer(<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>      Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span>      final Configuration conf2) {<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>    try {<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>      Constructor&lt;? extends HRegionServer&gt; c = regionServerClass<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>          .getConstructor(Configuration.class);<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>      return c.newInstance(conf2);<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>    } catch (Exception e) {<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>          + regionServerClass.toString(), e);<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>    }<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>  }<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span><a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>  /**<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>   */<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>  public static void main(String[] args) throws Exception {<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>    VersionInfo.logVersion();<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>    @SuppressWarnings("unchecked")<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span><a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>  }<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span><a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>  /**<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>   * Gets the online regions of the specified table.<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>   * all the ONLINE regions in the table.<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>   * @param tableName<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>   */<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>  @Override<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span>     synchronized (this.onlineRegions) {<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>           tableRegions.add(region);<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span>         }<a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>       }<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>     }<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>     return tableRegions;<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>   }<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span><a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>  @Override<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>    List&lt;HRegion&gt; allRegions = new ArrayList&lt;&gt;();<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>    synchronized (this.onlineRegions) {<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>      // Return a clone copy of the onlineRegions<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>      allRegions.addAll(onlineRegions.values());<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>    }<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>    return allRegions;<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span>  }<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span><a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  /**<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>   * Gets the online tables in this RS.<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>   * This method looks at the in-memory onlineRegions.<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span>   * @return all the online tables in this RS<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>   */<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>    synchronized (this.onlineRegions) {<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>      }<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>    }<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>    return tables;<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span>  }<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span><a name="line.3067"></a>
+<span class="sourceLineNo">3068</span>  // used by org/apache/hbase/tmpl/regionserver/RSStatusTmpl.jamon (HBASE-4070).<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>  public String[] getRegionServerCoprocessors() {<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>    try {<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>    } catch (IOException exception) {<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>          "skipping.");<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>    }<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>    for (HRegion region: regions) {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>      try {<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span>      } catch (IOException exception) {<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>            "; skipping.");<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span>      }<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>    }<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>    return coprocessors.toArray(new String[coprocessors.size()]);<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>  }<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span><a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>  /**<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>   * @param region Region to close<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>   */<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3097"></a>
+<span class="sourceLineNo">3098</span>    try {<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>            " - ignoring and continuing");<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span>      }<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span>    } catch (IOException e) {<a name="line.3103"></a>
+<span class="sourceLineNo">3104</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>          " - ignoring and continuing", e);<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>    }<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>  }<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span><a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>  /**<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>   * when stopping. If called from the master, the region will update the znode status.<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>   *<a name="line.3112"></a>
 <span class="sourceLineNo">3113</span>   * &lt;p&gt;<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>   * &lt;/p&gt;<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>   *<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>   * @param encodedName Region to close<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>   * @param abort True if we are aborting<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>   * @return True if closed a region.<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>   * @throws NotServingRegionException if the region is not online<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>   */<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>  protected boolean closeRegion(String encodedName, final boolean abort, final ServerName sn)<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>      throws NotServingRegionException {<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>    //Check for permissions to close.<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>    // Can be null if we're calling close on a region that's not online<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>      try {<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>      } catch (IOException exp) {<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>        return false;<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>      }<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>    }<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span><a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>        Boolean.FALSE);<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span><a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>        // We're going to try to do a standard close then.<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>            " Doing a standard close now");<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>        return closeRegion(encodedName, abort, sn);<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span>      }<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span>      // Let's get the region from the online region list again<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>      actualRegion = this.getRegion(encodedName);<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>        // The master deletes the znode when it receives this exception.<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>      }<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>      return true;<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>    }<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span><a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>    if (actualRegion == null) {<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>      // The master deletes the znode when it receives this exception.<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>          " is not online, and is not opening.");<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>    }<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span><a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>    CloseRegionHandler crh;<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>    if (hri.isMetaRegion()) {<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>    } else {<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>      crh = new CloseRegionHandler(this, this, hri, abort, sn);<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>    }<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>    this.executorService.submit(crh);<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>    return true;<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>  }<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span><a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>  /**<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>   * Close and offline the region for split or merge<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>   *<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>   * @param regionEncodedName the name of the region(s) to close<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>   * @return true if closed the region successfully.<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>   * @throws IOException<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>  */<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>  protected boolean closeAndOfflineRegionForSplitOrMerge(final List&lt;String&gt; regionEncodedName)<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>      throws IOException {<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>    for (int i = 0; i &lt; regionEncodedName.size(); ++i) {<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>      HRegion regionToClose = this.getRegion(regionEncodedName.get(i));<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>      if (regionToClose != null) {<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>        Map&lt;byte[], List&lt;HStoreFile&gt;&gt; hstoreFiles = null;<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>        Exception exceptionToThrow = null;<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>        try {<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>          hstoreFiles = regionToClose.close(false);<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>        } catch (Exception e) {<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>          exceptionToThrow = e;<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>        }<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>        if (exceptionToThrow == null &amp;&amp; hstoreFiles == null) {<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>          // The region was closed by someone else<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>          exceptionToThrow =<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>            new IOException("Failed to close region: already closed by another thread");<a name="line.3204"></a>
+<span class="sourceLineNo">3114</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>   * &lt;/p&gt;<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span><a name="line.3117"></a>
+<span class="sourceLineNo">3118</span>   * &lt;p&gt;<a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>   * &lt;/p&gt;<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>   *<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>   * @param encodedName Region to close<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>   * @param abort True if we are aborting<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>   * @return True if closed a region.<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>   * @throws NotServingRegionException if the region is not online<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>   */<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>  protected boolean closeRegion(String encodedName, final boolean abort, final ServerName sn)<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>      throws NotServingRegionException {<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>    //Check for permissions to close.<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>    // Can be null if we're calling close on a region that's not online<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>      try {<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>      } catch (IOException exp) {<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>        return false;<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>      }<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>    }<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span><a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>        Boolean.FALSE);<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span><a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span>        // We're going to try to do a standard close then.<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>            " Doing a standard close now");<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>        return closeRegion(encodedName, abort, sn);<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>      }<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span>      // Let's get the region from the online region list again<a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>      actualRegion = this.getRegion(encodedName);<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>        // The master deletes the znode when it receives this exception.<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>      }<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>      return true;<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>    }<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span><a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>    if (actualRegion == null) {<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>      // The master deletes the znode when it receives this exception.<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>          " is not online, and is not opening.");<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>    }<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span><a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>    CloseRegionHandler crh;<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>    if (hri.isMetaRegion()) {<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>    } else {<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>      crh = new CloseRegionHandler(this, this, hri, abort, sn);<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>    }<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>    this.executorService.submit(crh);<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>    return true;<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>  }<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span><a name="line.3186"></a>
+<span class="sourceLineNo">3187</span>  /**<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>   * Close and offline the region for split or merge<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>   *<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>   * @param regionEncodedName the name of the region(s) to close<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>   * @return true if closed the region successfully.<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>   * @throws IOException<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>  */<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span>  protected boolean closeAndOfflineRegionForSplitOrMerge(final List&lt;String&gt; regionEncodedName)<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span>      throws IOException {<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span>    for (int i = 0; i &lt; regionEncodedName.size(); ++i) {<a name="line.3196"></a>
+<span class="sourceLineNo">3197</span>      HRegion regionToClose = this.getRegion(regionEncodedName.get(i));<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span>      if (regionToClose != null) {<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span>        Map&lt;byte[], List&lt;HStoreFile&gt;&gt; hstoreFiles = null;<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>        Exception exceptionToThrow = null;<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span>        try {<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>          hstoreFiles = regionToClose.close(false);<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span>        } catch (Exception e) {<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>          exceptionToThrow = e;<a name="line.3204"></a>
 <span class="sourceLineNo">3205</span>        }<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>        if (exceptionToThrow != null) {<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>          if (exceptionToThrow instanceof IOException) {<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>            throw (IOException) exceptionToThrow;<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>          }<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>          throw new IOException(exceptionToThrow);<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>        }<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>        // Offline the region<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>        this.removeRegion(regionToClose, null);<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>      }<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>    }<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>    return true;<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>  }<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span><a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>   /**<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>   * @param regionName<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>   *         named region is not member of the online regions.<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>   */<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>  }<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span><a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>  public InetSocketAddress[] getRegionBlockLocations(final String encodedRegionName) {<a name="line.3229"></a>
-<s

<TRUNCATED>

[02/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html b/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html
index 509caf3..5864175 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroups.html
@@ -239,7 +239,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.rsgroup.<a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroupsBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#addGroup-java.lang.String-int-">addGroup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#deleteGroups--">deleteGroups</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#deleteNamespaceIfNecessary--">deleteNamespaceIfNecessary</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#deleteTableIfNecessary--">deleteTableIfNecessary</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#getNumServers--">getNumServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#getTableRegionMap--">getTableRegionMap</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#getTableServerRegionMap--">getTableServerRegionMap</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#removeGroup-java.lang.String-">remo
 veGroup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#setup--">setup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testBogusArgs--">testBogusArgs</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testClearDeadServers--">testClearDeadServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testCreateAndDrop--">testCreateAndDrop</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testCreateMultiRegion--">testCreateMultiRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testCreateWhenRsgroupNoOnlineServers--">testCreateWhenRsgroupNoOnlineServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testDisabledTableMove--">testDisabledTableMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testFailRemoveGroup--">t
 estFailRemoveGroup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testGroupBalance--">testGroupBalance</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testKillRS--">testKillRS</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testMoveServers--">testMoveServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testMoveServersAndTables--">testMoveServersAndTables</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testMultiTableMove--">testMultiTableMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testRegionMove--">testRegionMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testRemoveServers--">testRemoveServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testSimpleRegionServerMove--">testSimpleRegionServe
 rMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testTableMoveTruncateAndDrop--">testTableMoveTruncateAndDrop</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testValidGroupNames--">testValidGroupNames</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#addGroup-java.lang.String-int-">addGroup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#deleteGroups--">deleteGroups</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#deleteNamespaceIfNecessary--">deleteNamespaceIfNecessary</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#deleteTableIfNecessary--">deleteTableIfNecessary</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#getNumServers--">getNumServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#getTableRegionMap--">getTableRegionMap</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#getTableServerRegionMap--">getTableServerRegionMap</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#removeGroup-java.lang.String-">remo
 veGroup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#setup--">setup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testBogusArgs--">testBogusArgs</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testClearDeadServers--">testClearDeadServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testCreateAndDrop--">testCreateAndDrop</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testCreateMultiRegion--">testCreateMultiRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testCreateWhenRsgroupNoOnlineServers--">testCreateWhenRsgroupNoOnlineServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testDisabledTableMove--">testDisabledTableMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testFailRemoveGroup--">t
 estFailRemoveGroup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testGroupBalance--">testGroupBalance</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testKillRS--">testKillRS</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testMoveServers--">testMoveServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testMoveServersAndTables--">testMoveServersAndTables</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testMultiTableMove--">testMultiTableMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testNonExistentTableMove--">testNonExistentTableMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testRegionMove--">testRegionMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testRemoveServers--">testRemoveServer
 s</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testSimpleRegionServerMove--">testSimpleRegionServerMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testTableMoveTruncateAndDrop--">testTableMoveTruncateAndDrop</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testValidGroupNames--">testValidGroupNames</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html b/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html
index 5e5cb92..2b048e2 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":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};
+var methods = {"i0":10,"i1":10,"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,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.71">TestRSGroupsBase</a>
+<pre>public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.72">TestRSGroupsBase</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>
 </li>
 </ul>
@@ -312,22 +312,26 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i22" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testRegionMove--">testRegionMove</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testNonExistentTableMove--">testNonExistentTableMove</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i23" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testRemoveServers--">testRemoveServers</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testRegionMove--">testRegionMove</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i24" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testSimpleRegionServerMove--">testSimpleRegionServerMove</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testRemoveServers--">testRemoveServers</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i25" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testTableMoveTruncateAndDrop--">testTableMoveTruncateAndDrop</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testSimpleRegionServerMove--">testSimpleRegionServerMove</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i26" class="altColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testTableMoveTruncateAndDrop--">testTableMoveTruncateAndDrop</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i27" class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testValidGroupNames--">testValidGroupNames</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
@@ -358,7 +362,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>protected static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.72">LOG</a></pre>
+<pre>protected static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.73">LOG</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -367,7 +371,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.74">name</a></pre>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.75">name</a></pre>
 </li>
 </ul>
 <a name="groupPrefix">
@@ -376,7 +380,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>groupPrefix</h4>
-<pre>protected 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/rsgroup/TestRSGroupsBase.html#line.77">groupPrefix</a></pre>
+<pre>protected 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/rsgroup/TestRSGroupsBase.html#line.78">groupPrefix</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.rsgroup.TestRSGroupsBase.groupPrefix">Constant Field Values</a></dd>
@@ -389,7 +393,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tablePrefix</h4>
-<pre>protected 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/rsgroup/TestRSGroupsBase.html#line.78">tablePrefix</a></pre>
+<pre>protected 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/rsgroup/TestRSGroupsBase.html#line.79">tablePrefix</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.rsgroup.TestRSGroupsBase.tablePrefix">Constant Field Values</a></dd>
@@ -402,7 +406,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>rand</h4>
-<pre>protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/security/SecureRandom.html?is-external=true" title="class or interface in java.security">SecureRandom</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.79">rand</a></pre>
+<pre>protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/security/SecureRandom.html?is-external=true" title="class or interface in java.security">SecureRandom</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.80">rand</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -411,7 +415,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>protected static&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/rsgroup/TestRSGroupsBase.html#line.82">TEST_UTIL</a></pre>
+<pre>protected static&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/rsgroup/TestRSGroupsBase.html#line.83">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="admin">
@@ -420,7 +424,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>protected static&nbsp;org.apache.hadoop.hbase.client.Admin <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.83">admin</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.client.Admin <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.84">admin</a></pre>
 </li>
 </ul>
 <a name="cluster">
@@ -429,7 +433,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cluster</h4>
-<pre>protected static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.84">cluster</a></pre>
+<pre>protected static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.85">cluster</a></pre>
 </li>
 </ul>
 <a name="rsGroupAdmin">
@@ -438,7 +442,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>rsGroupAdmin</h4>
-<pre>protected static&nbsp;org.apache.hadoop.hbase.rsgroup.RSGroupAdmin <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.85">rsGroupAdmin</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.rsgroup.RSGroupAdmin <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.86">rsGroupAdmin</a></pre>
 </li>
 </ul>
 <a name="master">
@@ -447,7 +451,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>master</h4>
-<pre>protected static&nbsp;org.apache.hadoop.hbase.master.HMaster <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.86">master</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.master.HMaster <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.87">master</a></pre>
 </li>
 </ul>
 <a name="WAIT_TIMEOUT">
@@ -456,7 +460,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>WAIT_TIMEOUT</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.88">WAIT_TIMEOUT</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.89">WAIT_TIMEOUT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.rsgroup.TestRSGroupsBase.WAIT_TIMEOUT">Constant Field Values</a></dd>
@@ -469,7 +473,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>NUM_SLAVES_BASE</h4>
-<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.89">NUM_SLAVES_BASE</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.90">NUM_SLAVES_BASE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.rsgroup.TestRSGroupsBase.NUM_SLAVES_BASE">Constant Field Values</a></dd>
@@ -482,7 +486,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>NUM_DEAD_SERVERS</h4>
-<pre>public static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.90">NUM_DEAD_SERVERS</a></pre>
+<pre>public static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.91">NUM_DEAD_SERVERS</a></pre>
 </li>
 </ul>
 <a name="tableName">
@@ -491,7 +495,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>tableName</h4>
-<pre>org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.93">tableName</a></pre>
+<pre>org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.94">tableName</a></pre>
 </li>
 </ul>
 </li>
@@ -508,7 +512,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestRSGroupsBase</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.71">TestRSGroupsBase</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.72">TestRSGroupsBase</a>()</pre>
 </li>
 </ul>
 </li>
@@ -525,7 +529,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/rsgroup/TestRSGroupsBase.html#line.95">setup</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.96">setup</a>()</pre>
 </li>
 </ul>
 <a name="addGroup-java.lang.String-int-">
@@ -534,7 +538,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addGroup</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.rsgroup.RSGroupInfo&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.100">addGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName,
+<pre>protected&nbsp;org.apache.hadoop.hbase.rsgroup.RSGroupInfo&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.101">addGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName,
                                                                int&nbsp;serverCount)
                                                         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>
@@ -551,7 +555,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeGroup</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.120">removeGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.121">removeGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;groupName)
           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>
@@ -565,7 +569,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteTableIfNecessary</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.127">deleteTableIfNecessary</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.128">deleteTableIfNecessary</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>
@@ -579,7 +583,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteNamespaceIfNecessary</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.133">deleteNamespaceIfNecessary</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.134">deleteNamespaceIfNecessary</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>
@@ -593,7 +597,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteGroups</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.141">deleteGroups</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.142">deleteGroups</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>
@@ -607,7 +611,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableRegionMap</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.hbase.TableName,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.153">getTableRegionMap</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.hbase.TableName,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.154">getTableRegionMap</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>
@@ -621,7 +625,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableServerRegionMap</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.hbase.TableName,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.hbase.ServerName,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.168">getTableServerRegionMap</a>()
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.hbase.TableName,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.hbase.ServerName,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.169">getTableServerRegionMap</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>
@@ -635,7 +639,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testBogusArgs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.196">testBogusArgs</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.197">testBogusArgs</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>
@@ -649,7 +653,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testCreateMultiRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.233">testCreateMultiRegion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.234">testCreateMultiRegion</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>
@@ -663,7 +667,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testCreateAndDrop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.241">testCreateAndDrop</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.242">testCreateAndDrop</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>
@@ -677,7 +681,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSimpleRegionServerMove</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.255">testSimpleRegionServerMove</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.256">testSimpleRegionServerMove</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>
@@ -693,7 +697,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumServers</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.275">getNumServers</a>()
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.276">getNumServers</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>
@@ -707,7 +711,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMoveServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.289">testMoveServers</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.290">testMoveServers</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>
@@ -721,7 +725,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testTableMoveTruncateAndDrop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.342">testTableMoveTruncateAndDrop</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.343">testTableMoveTruncateAndDrop</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>
@@ -735,7 +739,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testGroupBalance</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.400">testGroupBalance</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.401">testGroupBalance</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>
@@ -749,7 +753,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testRegionMove</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.478">testRegionMove</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.479">testRegionMove</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>
@@ -763,7 +767,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testFailRemoveGroup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.551">testFailRemoveGroup</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.552">testFailRemoveGroup</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>
@@ -779,7 +783,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testKillRS</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.584">testKillRS</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.585">testKillRS</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>
@@ -793,7 +797,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testValidGroupNames</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.653">testValidGroupNames</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.654">testValidGroupNames</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>
@@ -807,7 +811,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getGroupName</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.671">getGroupName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;baseName)</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.672">getGroupName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;baseName)</pre>
 </li>
 </ul>
 <a name="testMultiTableMove--">
@@ -816,7 +820,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMultiTableMove</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.676">testMultiTableMove</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.677">testMultiTableMove</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>
@@ -830,7 +834,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testDisabledTableMove</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.732">testDisabledTableMove</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.733">testDisabledTableMove</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>
@@ -838,13 +842,27 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="testNonExistentTableMove--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testNonExistentTableMove</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.766">testNonExistentTableMove</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="testMoveServersAndTables--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>testMoveServersAndTables</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.765">testMoveServersAndTables</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.797">testMoveServersAndTables</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>
@@ -858,7 +876,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testClearDeadServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.889">testClearDeadServers</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.921">testClearDeadServers</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>
@@ -872,7 +890,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testRemoveServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.930">testRemoveServers</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.962">testRemoveServers</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>
@@ -886,7 +904,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testCreateWhenRsgroupNoOnlineServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.1004">testCreateWhenRsgroupNoOnlineServers</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#line.1036">testCreateWhenRsgroupNoOnlineServers</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>


[04/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html
index 7f89c08..9ee12ef 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html
@@ -29,906 +29,911 @@
 <span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import java.lang.Thread.UncaughtExceptionHandler;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.util.ArrayList;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.ConcurrentModificationException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.HashMap;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.HashSet;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedMap;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.BlockingQueue;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.DelayQueue;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.Delayed;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.ThreadFactory;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.TimeUnit;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.LongAdder;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.concurrent.locks.ReentrantReadWriteLock;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.conf.Configuration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HRegion.FlushResult;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.htrace.core.TraceScope;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.slf4j.Logger;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.slf4j.LoggerFactory;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>/**<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * Thread that flushes cache on request<a name="line.60"></a>
-<span class="sourceLineNo">061</span> *<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * NOTE: This class extends Thread rather than Chore because the sleep time<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * can be interrupted when there is something to do, rather than the Chore<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * sleep time which is invariant.<a name="line.64"></a>
-<span class="sourceLineNo">065</span> *<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * @see FlushRequester<a name="line.66"></a>
-<span class="sourceLineNo">067</span> */<a name="line.67"></a>
-<span class="sourceLineNo">068</span>@InterfaceAudience.Private<a name="line.68"></a>
-<span class="sourceLineNo">069</span>class MemStoreFlusher implements FlushRequester {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private static final Logger LOG = LoggerFactory.getLogger(MemStoreFlusher.class);<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private Configuration conf;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  // These two data members go together.  Any entry in the one must have<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  // a corresponding entry in the other.<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private final BlockingQueue&lt;FlushQueueEntry&gt; flushQueue = new DelayQueue&lt;&gt;();<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private final Map&lt;Region, FlushRegionEntry&gt; regionsInQueue = new HashMap&lt;&gt;();<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private AtomicBoolean wakeupPending = new AtomicBoolean();<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private final long threadWakeFrequency;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private final HRegionServer server;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private final Object blockSignal = new Object();<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  private long blockingWaitTime;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private final LongAdder updatesBlockedMsHighWater = new LongAdder();<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private final FlushHandler[] flushHandlers;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private List&lt;FlushRequestListener&gt; flushRequestListeners = new ArrayList&lt;&gt;(1);<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private FlushType flushType;<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Singleton instance inserted into flush queue used for signaling.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private static final FlushQueueEntry WAKEUPFLUSH_INSTANCE = new FlushQueueEntry() {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    @Override<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public long getDelay(TimeUnit unit) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return 0;<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>    @Override<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public int compareTo(Delayed o) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return -1;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>    @Override<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public boolean equals(Object obj) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      return obj == this;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    @Override<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public int hashCode() {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      return 42;<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">024</span>import java.util.Collection;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.ConcurrentModificationException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.HashMap;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.HashSet;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedMap;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.BlockingQueue;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.DelayQueue;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.Delayed;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.ThreadFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.TimeUnit;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.atomic.LongAdder;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.concurrent.locks.ReentrantReadWriteLock;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.HRegion.FlushResult;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.htrace.core.TraceScope;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.slf4j.Logger;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.slf4j.LoggerFactory;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>/**<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * Thread that flushes cache on request<a name="line.61"></a>
+<span class="sourceLineNo">062</span> *<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * NOTE: This class extends Thread rather than Chore because the sleep time<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * can be interrupted when there is something to do, rather than the Chore<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * sleep time which is invariant.<a name="line.65"></a>
+<span class="sourceLineNo">066</span> *<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * @see FlushRequester<a name="line.67"></a>
+<span class="sourceLineNo">068</span> */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>@InterfaceAudience.Private<a name="line.69"></a>
+<span class="sourceLineNo">070</span>class MemStoreFlusher implements FlushRequester {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private static final Logger LOG = LoggerFactory.getLogger(MemStoreFlusher.class);<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private Configuration conf;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  // These two data members go together.  Any entry in the one must have<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  // a corresponding entry in the other.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private final BlockingQueue&lt;FlushQueueEntry&gt; flushQueue = new DelayQueue&lt;&gt;();<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private final Map&lt;Region, FlushRegionEntry&gt; regionsInQueue = new HashMap&lt;&gt;();<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private AtomicBoolean wakeupPending = new AtomicBoolean();<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private final long threadWakeFrequency;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private final HRegionServer server;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  private final Object blockSignal = new Object();<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  private long blockingWaitTime;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private final LongAdder updatesBlockedMsHighWater = new LongAdder();<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final FlushHandler[] flushHandlers;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  private List&lt;FlushRequestListener&gt; flushRequestListeners = new ArrayList&lt;&gt;(1);<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private FlushType flushType;<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  /**<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * Singleton instance inserted into flush queue used for signaling.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   */<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private static final FlushQueueEntry WAKEUPFLUSH_INSTANCE = new FlushQueueEntry() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    @Override<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public long getDelay(TimeUnit unit) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      return 0;<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 int compareTo(Delayed o) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      return -1;<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>    @Override<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    public boolean equals(Object obj) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      return obj == this;<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>    @Override<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    public int hashCode() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      return 42;<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>  /**<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @param conf<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param server<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public MemStoreFlusher(final Configuration conf,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      final HRegionServer server) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    super();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    this.conf = conf;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    this.server = server;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    this.threadWakeFrequency =<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        conf.getLong(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    this.blockingWaitTime = conf.getInt("hbase.hstore.blockingWaitTime",<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      90000);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    int handlerCount = conf.getInt("hbase.hstore.flusher.count", 2);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    this.flushHandlers = new FlushHandler[handlerCount];<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    LOG.info("globalMemStoreLimit="<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        + TraditionalBinaryPrefix<a name="line.134"></a>
-<span class="sourceLineNo">135</span>            .long2String(this.server.getRegionServerAccounting().getGlobalMemStoreLimit(), "", 1)<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        + ", globalMemStoreLimitLowMark="<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        + TraditionalBinaryPrefix.long2String(<a name="line.137"></a>
-<span class="sourceLineNo">138</span>          this.server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1)<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        + ", Offheap="<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        + (this.server.getRegionServerAccounting().isOffheap()));<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public LongAdder getUpdatesBlockedMsHighWater() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    return this.updatesBlockedMsHighWater;<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>  public void setFlushType(FlushType flushType) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    this.flushType = flushType;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>  /**<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * The memstore across all regions has exceeded the low water mark. Pick<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * one region to flush and flush it synchronously (this is called from the<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * flush thread)<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * @return true if successful<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  private boolean flushOneForGlobalPressure() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    SortedMap&lt;Long, HRegion&gt; regionsBySize = null;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    switch(flushType) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOffHeapSize();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        break;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      case ABOVE_ONHEAP_LOWER_MARK:<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      default:<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOnHeapSize();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    Set&lt;HRegion&gt; excludedRegions = new HashSet&lt;&gt;();<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    double secondaryMultiplier<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      = ServerRegionReplicaUtil.getRegionReplicaStoreFileRefreshMultiplier(conf);<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>    boolean flushedOne = false;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    while (!flushedOne) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      // Find the biggest region that doesn't have too many storefiles (might be null!)<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      HRegion bestFlushableRegion =<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          getBiggestMemStoreRegion(regionsBySize, excludedRegions, true);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      // Find the biggest region, total, even if it might have too many flushes.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      HRegion bestAnyRegion = getBiggestMemStoreRegion(regionsBySize, excludedRegions, false);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      // Find the biggest region that is a secondary region<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      HRegion bestRegionReplica = getBiggestMemStoreOfRegionReplica(regionsBySize, excludedRegions);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      if (bestAnyRegion == null) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        // If bestAnyRegion is null, assign replica. It may be null too. Next step is check for null<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        bestAnyRegion = bestRegionReplica;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      if (bestAnyRegion == null) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        LOG.error("Above memory mark but there are no flushable regions!");<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        return false;<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>      HRegion regionToFlush;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      long bestAnyRegionSize;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      long bestFlushableRegionSize;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      switch(flushType) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreOffHeapSize();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>          bestFlushableRegionSize = getMemStoreOffHeapSize(bestFlushableRegion);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          break;<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.203"></a>
-<span class="sourceLineNo">204</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreHeapSize();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>          bestFlushableRegionSize = getMemStoreHeapSize(bestFlushableRegion);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>          break;<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>        default:<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreDataSize();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          bestFlushableRegionSize = getMemStoreDataSize(bestFlushableRegion);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      if (bestAnyRegionSize &gt; 2 * bestFlushableRegionSize) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        // Even if it's not supposed to be flushed, pick a region if it's more than twice<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        // as big as the best flushable one - otherwise when we're under pressure we make<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        // lots of little flushes and cause lots of compactions, etc, which just makes<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        // life worse!<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        if (LOG.isDebugEnabled()) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          LOG.debug("Under global heap pressure: " + "Region "<a name="line.218"></a>
-<span class="sourceLineNo">219</span>              + bestAnyRegion.getRegionInfo().getRegionNameAsString()<a name="line.219"></a>
-<span class="sourceLineNo">220</span>              + " has too many " + "store files, but is "<a name="line.220"></a>
-<span class="sourceLineNo">221</span>              + TraditionalBinaryPrefix.long2String(bestAnyRegionSize, "", 1)<a name="line.221"></a>
-<span class="sourceLineNo">222</span>              + " vs best flushable region's "<a name="line.222"></a>
-<span class="sourceLineNo">223</span>              + TraditionalBinaryPrefix.long2String(<a name="line.223"></a>
-<span class="sourceLineNo">224</span>              bestFlushableRegionSize, "", 1)<a name="line.224"></a>
-<span class="sourceLineNo">225</span>              + ". Choosing the bigger.");<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        regionToFlush = bestAnyRegion;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      } else {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        if (bestFlushableRegion == null) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          regionToFlush = bestAnyRegion;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        } else {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          regionToFlush = bestFlushableRegion;<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><a name="line.235"></a>
-<span class="sourceLineNo">236</span>      long regionToFlushSize;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      long bestRegionReplicaSize;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      switch(flushType) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          regionToFlushSize = regionToFlush.getMemStoreOffHeapSize();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>          bestRegionReplicaSize = getMemStoreOffHeapSize(bestRegionReplica);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          break;<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          regionToFlushSize = regionToFlush.getMemStoreHeapSize();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          bestRegionReplicaSize = getMemStoreHeapSize(bestRegionReplica);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          break;<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>        default:<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          regionToFlushSize = regionToFlush.getMemStoreDataSize();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          bestRegionReplicaSize = getMemStoreDataSize(bestRegionReplica);<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>      Preconditions.checkState(<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        (regionToFlush != null &amp;&amp; regionToFlushSize &gt; 0) || bestRegionReplicaSize &gt; 0);<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      if (regionToFlush == null ||<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          (bestRegionReplica != null &amp;&amp;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>           ServerRegionReplicaUtil.isRegionReplicaStoreFileRefreshEnabled(conf) &amp;&amp;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>           (bestRegionReplicaSize &gt; secondaryMultiplier * regionToFlushSize))) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        LOG.info("Refreshing storefiles of region " + bestRegionReplica +<a name="line.263"></a>
-<span class="sourceLineNo">264</span>            " due to global heap pressure. Total memstore off heap size=" +<a name="line.264"></a>
-<span class="sourceLineNo">265</span>            TraditionalBinaryPrefix.long2String(<a name="line.265"></a>
-<span class="sourceLineNo">266</span>              server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.266"></a>
-<span class="sourceLineNo">267</span>            " memstore heap size=" + TraditionalBinaryPrefix.long2String(<a name="line.267"></a>
-<span class="sourceLineNo">268</span>              server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1));<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        flushedOne = refreshStoreFilesAndReclaimMemory(bestRegionReplica);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        if (!flushedOne) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          LOG.info("Excluding secondary region " + bestRegionReplica +<a name="line.271"></a>
-<span class="sourceLineNo">272</span>              " - trying to find a different region to refresh files.");<a name="line.272"></a>
-<span class="sourceLineNo">273</span>          excludedRegions.add(bestRegionReplica);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      } else {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        LOG.info("Flush of region " + regionToFlush + " due to global heap pressure. " +<a name="line.276"></a>
-<span class="sourceLineNo">277</span>            "Flush type=" + flushType.toString() +<a name="line.277"></a>
-<span class="sourceLineNo">278</span>            "Total Memstore Heap size=" +<a name="line.278"></a>
-<span class="sourceLineNo">279</span>            TraditionalBinaryPrefix.long2String(<a name="line.279"></a>
-<span class="sourceLineNo">280</span>                server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1) +<a name="line.280"></a>
-<span class="sourceLineNo">281</span>            "Total Memstore Off-Heap size=" +<a name="line.281"></a>
-<span class="sourceLineNo">282</span>            TraditionalBinaryPrefix.long2String(<a name="line.282"></a>
-<span class="sourceLineNo">283</span>                server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.283"></a>
-<span class="sourceLineNo">284</span>            ", Region memstore size=" +<a name="line.284"></a>
-<span class="sourceLineNo">285</span>            TraditionalBinaryPrefix.long2String(regionToFlushSize, "", 1));<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        flushedOne = flushRegion(regionToFlush, true, false, FlushLifeCycleTracker.DUMMY);<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (!flushedOne) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          LOG.info("Excluding unflushable region " + regionToFlush +<a name="line.289"></a>
-<span class="sourceLineNo">290</span>              " - trying to find a different region to flush.");<a name="line.290"></a>
-<span class="sourceLineNo">291</span>          excludedRegions.add(regionToFlush);<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>    }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return true;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  /**<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * @return Return memstore offheap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   */<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  private static long getMemStoreOffHeapSize(HRegion r) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    return r == null? 0: r.getMemStoreOffHeapSize();<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  }<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>   * @return Return memstore heap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   */<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  private static long getMemStoreHeapSize(HRegion r) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    return r == null? 0: r.getMemStoreHeapSize();<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">312</span>  /**<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * @return Return memstore data size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  private static long getMemStoreDataSize(HRegion r) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    return r == null? 0: r.getMemStoreDataSize();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  private class FlushHandler extends HasThread {<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    private FlushHandler(String name) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      super(name);<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>    @Override<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    public void run() {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      while (!server.isStopped()) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        FlushQueueEntry fqe = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        try {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          wakeupPending.set(false); // allow someone to wake us up again<a name="line.330"></a>
-<span class="sourceLineNo">331</span>          fqe = flushQueue.poll(threadWakeFrequency, TimeUnit.MILLISECONDS);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>          if (fqe == null || fqe == WAKEUPFLUSH_INSTANCE) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>            FlushType type = isAboveLowWaterMark();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            if (type != FlushType.NORMAL) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>              LOG.debug("Flush thread woke up because memory above low water="<a name="line.335"></a>
-<span class="sourceLineNo">336</span>                  + TraditionalBinaryPrefix.long2String(<a name="line.336"></a>
-<span class="sourceLineNo">337</span>                    server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1));<a name="line.337"></a>
-<span class="sourceLineNo">338</span>              // For offheap memstore, even if the lower water mark was breached due to heap overhead<a name="line.338"></a>
-<span class="sourceLineNo">339</span>              // we still select the regions based on the region's memstore data size.<a name="line.339"></a>
-<span class="sourceLineNo">340</span>              // TODO : If we want to decide based on heap over head it can be done without tracking<a name="line.340"></a>
-<span class="sourceLineNo">341</span>              // it per region.<a name="line.341"></a>
-<span class="sourceLineNo">342</span>              if (!flushOneForGlobalPressure()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>                // Wasn't able to flush any region, but we're above low water mark<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                // This is unlikely to happen, but might happen when closing the<a name="line.344"></a>
-<span class="sourceLineNo">345</span>                // entire server - another thread is flushing regions. We'll just<a name="line.345"></a>
-<span class="sourceLineNo">346</span>                // sleep a little bit to avoid spinning, and then pretend that<a name="line.346"></a>
-<span class="sourceLineNo">347</span>                // we flushed one, so anyone blocked will check again<a name="line.347"></a>
-<span class="sourceLineNo">348</span>                Thread.sleep(1000);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>                wakeUpIfBlocking();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>              }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>              // Enqueue another one of these tokens so we'll wake up again<a name="line.351"></a>
-<span class="sourceLineNo">352</span>              wakeupFlushThread();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>            }<a name="line.353"></a>
-<span class="sourceLineNo">354</span>            continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          FlushRegionEntry fre = (FlushRegionEntry) fqe;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>          if (!flushRegion(fre)) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            break;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>          }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        } catch (InterruptedException ex) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          continue;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        } catch (ConcurrentModificationException ex) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          continue;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        } catch (Exception ex) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          LOG.error("Cache flusher failed for entry " + fqe, ex);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (!server.checkFileSystem()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            break;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      synchronized (regionsInQueue) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        regionsInQueue.clear();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        flushQueue.clear();<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>      // Signal anyone waiting, so they see the close flag<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      wakeUpIfBlocking();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      LOG.info(getName() + " exiting");<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  /**<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @param conf<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param server<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public MemStoreFlusher(final Configuration conf,<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      final HRegionServer server) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    super();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    this.conf = conf;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    this.server = server;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    this.threadWakeFrequency =<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        conf.getLong(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    this.blockingWaitTime = conf.getInt("hbase.hstore.blockingWaitTime",<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      90000);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    int handlerCount = conf.getInt("hbase.hstore.flusher.count", 2);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.flushHandlers = new FlushHandler[handlerCount];<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    LOG.info("globalMemStoreLimit="<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        + TraditionalBinaryPrefix<a name="line.135"></a>
+<span class="sourceLineNo">136</span>            .long2String(this.server.getRegionServerAccounting().getGlobalMemStoreLimit(), "", 1)<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        + ", globalMemStoreLimitLowMark="<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        + TraditionalBinaryPrefix.long2String(<a name="line.138"></a>
+<span class="sourceLineNo">139</span>          this.server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1)<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        + ", Offheap="<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        + (this.server.getRegionServerAccounting().isOffheap()));<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>  public LongAdder getUpdatesBlockedMsHighWater() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return this.updatesBlockedMsHighWater;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  public void setFlushType(FlushType flushType) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    this.flushType = flushType;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>  /**<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * The memstore across all regions has exceeded the low water mark. Pick<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * one region to flush and flush it synchronously (this is called from the<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * flush thread)<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return true if successful<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  private boolean flushOneForGlobalPressure() {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; regionsBySize = null;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    switch(flushType) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOffHeapSize();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        break;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      case ABOVE_ONHEAP_LOWER_MARK:<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      default:<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOnHeapSize();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    Set&lt;HRegion&gt; excludedRegions = new HashSet&lt;&gt;();<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>    double secondaryMultiplier<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      = ServerRegionReplicaUtil.getRegionReplicaStoreFileRefreshMultiplier(conf);<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    boolean flushedOne = false;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    while (!flushedOne) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      // Find the biggest region that doesn't have too many storefiles (might be null!)<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      HRegion bestFlushableRegion =<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          getBiggestMemStoreRegion(regionsBySize, excludedRegions, true);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      // Find the biggest region, total, even if it might have too many flushes.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      HRegion bestAnyRegion = getBiggestMemStoreRegion(regionsBySize, excludedRegions, false);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      // Find the biggest region that is a secondary region<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      HRegion bestRegionReplica = getBiggestMemStoreOfRegionReplica(regionsBySize, excludedRegions);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      if (bestAnyRegion == null) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        // If bestAnyRegion is null, assign replica. It may be null too. Next step is check for null<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        bestAnyRegion = bestRegionReplica;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      if (bestAnyRegion == null) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        LOG.error("Above memory mark but there are no flushable regions!");<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        return false;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>      HRegion regionToFlush;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      long bestAnyRegionSize;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      long bestFlushableRegionSize;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      switch(flushType) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreOffHeapSize();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          bestFlushableRegionSize = getMemStoreOffHeapSize(bestFlushableRegion);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>          break;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreHeapSize();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          bestFlushableRegionSize = getMemStoreHeapSize(bestFlushableRegion);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          break;<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>        default:<a name="line.209"></a>
+<span class="sourceLineNo">210</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreDataSize();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          bestFlushableRegionSize = getMemStoreDataSize(bestFlushableRegion);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      if (bestAnyRegionSize &gt; 2 * bestFlushableRegionSize) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        // Even if it's not supposed to be flushed, pick a region if it's more than twice<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        // as big as the best flushable one - otherwise when we're under pressure we make<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        // lots of little flushes and cause lots of compactions, etc, which just makes<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        // life worse!<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        if (LOG.isDebugEnabled()) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          LOG.debug("Under global heap pressure: " + "Region "<a name="line.219"></a>
+<span class="sourceLineNo">220</span>              + bestAnyRegion.getRegionInfo().getRegionNameAsString()<a name="line.220"></a>
+<span class="sourceLineNo">221</span>              + " has too many " + "store files, but is "<a name="line.221"></a>
+<span class="sourceLineNo">222</span>              + TraditionalBinaryPrefix.long2String(bestAnyRegionSize, "", 1)<a name="line.222"></a>
+<span class="sourceLineNo">223</span>              + " vs best flushable region's "<a name="line.223"></a>
+<span class="sourceLineNo">224</span>              + TraditionalBinaryPrefix.long2String(<a name="line.224"></a>
+<span class="sourceLineNo">225</span>              bestFlushableRegionSize, "", 1)<a name="line.225"></a>
+<span class="sourceLineNo">226</span>              + ". Choosing the bigger.");<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        regionToFlush = bestAnyRegion;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      } else {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        if (bestFlushableRegion == null) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          regionToFlush = bestAnyRegion;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>          regionToFlush = bestFlushableRegion;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        }<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>      long regionToFlushSize;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      long bestRegionReplicaSize;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      switch(flushType) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          regionToFlushSize = regionToFlush.getMemStoreOffHeapSize();<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          bestRegionReplicaSize = getMemStoreOffHeapSize(bestRegionReplica);<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>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          regionToFlushSize = regionToFlush.getMemStoreHeapSize();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          bestRegionReplicaSize = getMemStoreHeapSize(bestRegionReplica);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          break;<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>        default:<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          regionToFlushSize = regionToFlush.getMemStoreDataSize();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          bestRegionReplicaSize = getMemStoreDataSize(bestRegionReplica);<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>      Preconditions.checkState(<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        (regionToFlush != null &amp;&amp; regionToFlushSize &gt; 0) || bestRegionReplicaSize &gt; 0);<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>      if (regionToFlush == null ||<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          (bestRegionReplica != null &amp;&amp;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>           ServerRegionReplicaUtil.isRegionReplicaStoreFileRefreshEnabled(conf) &amp;&amp;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>           (bestRegionReplicaSize &gt; secondaryMultiplier * regionToFlushSize))) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        LOG.info("Refreshing storefiles of region " + bestRegionReplica +<a name="line.264"></a>
+<span class="sourceLineNo">265</span>            " due to global heap pressure. Total memstore off heap size=" +<a name="line.265"></a>
+<span class="sourceLineNo">266</span>            TraditionalBinaryPrefix.long2String(<a name="line.266"></a>
+<span class="sourceLineNo">267</span>              server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.267"></a>
+<span class="sourceLineNo">268</span>            " memstore heap size=" + TraditionalBinaryPrefix.long2String(<a name="line.268"></a>
+<span class="sourceLineNo">269</span>              server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1));<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        flushedOne = refreshStoreFilesAndReclaimMemory(bestRegionReplica);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        if (!flushedOne) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          LOG.info("Excluding secondary region " + bestRegionReplica +<a name="line.272"></a>
+<span class="sourceLineNo">273</span>              " - trying to find a different region to refresh files.");<a name="line.273"></a>
+<span class="sourceLineNo">274</span>          excludedRegions.add(bestRegionReplica);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      } else {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        LOG.info("Flush of region " + regionToFlush + " due to global heap pressure. " +<a name="line.277"></a>
+<span class="sourceLineNo">278</span>            "Flush type=" + flushType.toString() +<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            "Total Memstore Heap size=" +<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            TraditionalBinaryPrefix.long2String(<a name="line.280"></a>
+<span class="sourceLineNo">281</span>                server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1) +<a name="line.281"></a>
+<span class="sourceLineNo">282</span>            "Total Memstore Off-Heap size=" +<a name="line.282"></a>
+<span class="sourceLineNo">283</span>            TraditionalBinaryPrefix.long2String(<a name="line.283"></a>
+<span class="sourceLineNo">284</span>                server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.284"></a>
+<span class="sourceLineNo">285</span>            ", Region memstore size=" +<a name="line.285"></a>
+<span class="sourceLineNo">286</span>            TraditionalBinaryPrefix.long2String(regionToFlushSize, "", 1));<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        flushedOne = flushRegion(regionToFlush, true, false, FlushLifeCycleTracker.DUMMY);<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>        if (!flushedOne) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          LOG.info("Excluding unflushable region " + regionToFlush +<a name="line.290"></a>
+<span class="sourceLineNo">291</span>              " - trying to find a different region to flush.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          excludedRegions.add(regionToFlush);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        }<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>    return true;<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>  /**<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @return Return memstore offheap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   */<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  private static long getMemStoreOffHeapSize(HRegion r) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    return r == null? 0: r.getMemStoreOffHeapSize();<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>   * @return Return memstore heap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   */<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  private static long getMemStoreHeapSize(HRegion r) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    return r == null? 0: r.getMemStoreHeapSize();<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  }<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>   * @return Return memstore data size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  private static long getMemStoreDataSize(HRegion r) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    return r == null? 0: r.getMemStoreDataSize();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  private class FlushHandler extends HasThread {<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    private FlushHandler(String name) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      super(name);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>    @Override<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    public void run() {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      while (!server.isStopped()) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        FlushQueueEntry fqe = null;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>          wakeupPending.set(false); // allow someone to wake us up again<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          fqe = flushQueue.poll(threadWakeFrequency, TimeUnit.MILLISECONDS);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          if (fqe == null || fqe == WAKEUPFLUSH_INSTANCE) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            FlushType type = isAboveLowWaterMark();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>            if (type != FlushType.NORMAL) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>              LOG.debug("Flush thread woke up because memory above low water="<a name="line.336"></a>
+<span class="sourceLineNo">337</span>                  + TraditionalBinaryPrefix.long2String(<a name="line.337"></a>
+<span class="sourceLineNo">338</span>                    server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1));<a name="line.338"></a>
+<span class="sourceLineNo">339</span>              // For offheap memstore, even if the lower water mark was breached due to heap overhead<a name="line.339"></a>
+<span class="sourceLineNo">340</span>              // we still select the regions based on the region's memstore data size.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>              // TODO : If we want to decide based on heap over head it can be done without tracking<a name="line.341"></a>
+<span class="sourceLineNo">342</span>              // it per region.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              if (!flushOneForGlobalPressure()) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                // Wasn't able to flush any region, but we're above low water mark<a name="line.344"></a>
+<span class="sourceLineNo">345</span>                // This is unlikely to happen, but might happen when closing the<a name="line.345"></a>
+<span class="sourceLineNo">346</span>                // entire server - another thread is flushing regions. We'll just<a name="line.346"></a>
+<span class="sourceLineNo">347</span>                // sleep a little bit to avoid spinning, and then pretend that<a name="line.347"></a>
+<span class="sourceLineNo">348</span>                // we flushed one, so anyone blocked will check again<a name="line.348"></a>
+<span class="sourceLineNo">349</span>                Thread.sleep(1000);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                wakeUpIfBlocking();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>              }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>              // Enqueue another one of these tokens so we'll wake up again<a name="line.352"></a>
+<span class="sourceLineNo">353</span>              wakeupFlushThread();<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            }<a name="line.354"></a>
+<span class="sourceLineNo">355</span>            continue;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          FlushRegionEntry fre = (FlushRegionEntry) fqe;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          if (!flushRegion(fre)) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>            break;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        } catch (InterruptedException ex) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>          continue;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        } catch (ConcurrentModificationException ex) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>          continue;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        } catch (Exception ex) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>          LOG.error("Cache flusher failed for entry " + fqe, ex);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          if (!server.checkFileSystem()) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>            break;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      synchronized (regionsInQueue) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        regionsInQueue.clear();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        flushQueue.clear();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>      // Signal anyone waiting, so they see the close flag<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      wakeUpIfBlocking();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      LOG.info(getName() + " exiting");<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    }<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
 <span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private void wakeupFlushThread() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    if (wakeupPending.compareAndSet(false, true)) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      flushQueue.add(WAKEUPFLUSH_INSTANCE);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  private HRegion getBiggestMemStoreRegion(<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      SortedMap&lt;Long, HRegion&gt; regionsBySize,<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      Set&lt;HRegion&gt; excludedRegions,<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      boolean checkStoreFileCount) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    synchronized (regionsInQueue) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      for (HRegion region : regionsBySize.values()) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (excludedRegions.contains(region)) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          continue;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        }<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>        if (region.writestate.flushing || !region.writestate.writesEnabled) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>          continue;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>        if (checkStoreFileCount &amp;&amp; isTooManyStoreFiles(region)) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          continue;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        return region;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      }<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return null;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  private HRegion getBiggestMemStoreOfRegionReplica(SortedMap&lt;Long, HRegion&gt; regionsBySize,<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      Set&lt;HRegion&gt; excludedRegions) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    synchronized (regionsInQueue) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      for (HRegion region : regionsBySize.values()) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        if (excludedRegions.contains(region)) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          continue;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>        if (RegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          continue;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>        return region;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    return null;<a name="line.427"></a>
-<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>  private boolean refreshStoreFilesAndReclaimMemory(Region region) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    try {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      return region.refreshStoreFiles();<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    } catch (IOException e) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      LOG.warn("Refreshing store files failed with exception", e);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    return false;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
-<span class="sourceLineNo">438</span><a name="line.438"></a>
-<span class="sourceLineNo">439</span>  /**<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * Return true if global memory usage is above the high watermark<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   */<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private FlushType isAboveHighWaterMark() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return server.getRegionServerAccounting().isAboveHighWaterMark();<a name="line.443"></a>
-<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>  /**<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * Return true if we're above the low watermark<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private FlushType isAboveLowWaterMark() {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    return server.getRegionServerAccounting().isAboveLowWaterMark();<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>  @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  public void requestFlush(HRegion r, boolean forceFlushAllStores, FlushLifeCycleTracker tracker) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    r.incrementFlushesQueuedCount();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    synchronized (regionsInQueue) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      if (!regionsInQueue.containsKey(r)) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        // This entry has no delay so it will be added at the top of the flush<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        // queue. It'll come out near immediately.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        FlushRegionEntry fqe = new FlushRegionEntry(r, forceFlushAllStores, tracker);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        this.regionsInQueue.put(r, fqe);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        this.flushQueue.add(fqe);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      } else {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        tracker.notExecuted("Flush already requested on " + r);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  @Override<a name="line.469"></a>
-<span class="sourceLineNo">470</span>  public void requestDelayedFlush(HRegion r, long delay, boolean forceFlushAllStores) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    r.incrementFlushesQueuedCount();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    synchronized (regionsInQueue) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      if (!regionsInQueue.containsKey(r)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        // This entry has some delay<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        FlushRegionEntry fqe =<a name="line.475"></a>
-<span class="sourceLineNo">476</span>            new FlushRegionEntry(r, forceFlushAllStores, FlushLifeCycleTracker.DUMMY);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        fqe.requeue(delay);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        this.regionsInQueue.put(r, fqe);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        this.flushQueue.add(fqe);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      }<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>  public int getFlushQueueSize() {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    return flushQueue.size();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  }<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>   * Only interrupt once it's done with a run through the work loop.<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   */<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  void interruptIfNecessary() {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    lock.writeLock().lock();<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    try {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      for (FlushHandler flushHander : flushHandlers) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        if (flushHander != null) flushHander.interrupt();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    } finally {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      lock.writeLock().unlock();<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><a name="line.501"></a>
-<span class="sourceLineNo">502</span>  synchronized void start(UncaughtExceptionHandler eh) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    ThreadFactory flusherThreadFactory = Threads.newDaemonThreadFactory(<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        server.getServerName().toShortString() + "-MemStoreFlusher", eh);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    for (int i = 0; i &lt; flushHandlers.length; i++) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      flushHandlers[i] = new FlushHandler("MemStoreFlusher." + i);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      flusherThreadFactory.newThread(flushHandlers[i]);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      flushHandlers[i].start();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>  }<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>  boolean isAlive() {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    for (FlushHandler flushHander : flushHandlers) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      if (flushHander != null &amp;&amp; flushHander.isAlive()) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return true;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    return false;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>  }<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>  void join() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    for (FlushHandler flushHander : flushHandlers) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      if (flushHander != null) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        Threads.shutdown(flushHander.getThread());<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>  /**<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * A flushRegion that checks store file count.  If too many, puts the flush<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * on delay queue to retry later.<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * @param fqe<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * @return true if the region was successfully flushed, false otherwise. If<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   * false, there will be accompanying log messages explaining why the region was<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   * not flushed.<a name="line.535"></a>
-<span class="sourceLineNo">536</span>   */<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  private boolean flushRegion(final FlushRegionEntry fqe) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    HRegion region = fqe.region;<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    if (!region.getRegionInfo().isMetaRegion() &amp;&amp; isTooManyStoreFiles(region)) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (fqe.isMaximumWait(this.blockingWaitTime)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.info("Waited " + (EnvironmentEdgeManager.currentTime() - fqe.createTime) +<a name="line.541"></a>
-<span class="sourceLineNo">542</span>          "ms on a compaction to clean up 'too many store files'; waited " +<a name="line.542"></a>
-<span class="sourceLineNo">543</span>          "long enough... proceeding with flush of " +<a name="line.543"></a>
-<span class="sourceLineNo">544</span>          region.getRegionInfo().getRegionNameAsString());<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      } else {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        // If this is first time we've been put off, then emit a log message.<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        if (fqe.getRequeueCount() &lt;= 0) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>          // Note: We don't impose blockingStoreFiles constraint on meta regions<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          LOG.warn("Region " + region.getRegionInfo().getEncodedName() + " has too many " +<a name="line.549"></a>
-<span class="sourceLineNo">550</span>            "store files; delaying flush up to " + this.blockingWaitTime + "ms");<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          if (!this.server.compactSplitThread.requestSplit(region)) {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>            try {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>              this.server.compactSplitThread.requestSystemCompaction(region,<a name="line.553"></a>
-<span class="sourceLineNo">554</span>                Thread.currentThread().getName());<a name="line.554"></a>
-<span class="sourceLineNo">555</span>            } catch (IOException e) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>              e = e instanceof RemoteException ?<a name="line.556"></a>
-<span class="sourceLineNo">557</span>                      ((RemoteException)e).unwrapRemoteException() : e;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>              LOG.error("Cache flush failed for region " +<a name="line.558"></a>
-<span class="sourceLineNo">559</span>                Bytes.toStringBinary(region.getRegionInfo().getRegionName()), e);<a name="line.559"></a>
-<span class="sourceLineNo">560</span>            }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>          }<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo

<TRUNCATED>

[17/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html
index 6c0ac86..43720f2 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.67">RegionLocationFinder</a>
+class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.61">RegionLocationFinder</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 will find where data for a region is located in HDFS. It ranks
  <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase"><code>ServerName</code></a>'s by the size of the store files they are holding for a
@@ -309,7 +309,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/master/balancer/RegionLocationFinder.html#line.68">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.62">LOG</a></pre>
 </li>
 </ul>
 <a name="CACHE_TIME">
@@ -318,7 +318,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>CACHE_TIME</h4>
-<pre>private static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.69">CACHE_TIME</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.63">CACHE_TIME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.balancer.RegionLocationFinder.CACHE_TIME">Constant Field Values</a></dd>
@@ -331,7 +331,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>EMPTY_BLOCK_DISTRIBUTION</h4>
-<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.70">EMPTY_BLOCK_DISTRIBUTION</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.64">EMPTY_BLOCK_DISTRIBUTION</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -340,7 +340,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.71">conf</a></pre>
+<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.65">conf</a></pre>
 </li>
 </ul>
 <a name="status">
@@ -349,7 +349,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>status</h4>
-<pre>private volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.72">status</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.66">status</a></pre>
 </li>
 </ul>
 <a name="services">
@@ -358,7 +358,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>services</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.73">services</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.67">services</a></pre>
 </li>
 </ul>
 <a name="executor">
@@ -367,7 +367,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>executor</h4>
-<pre>private final&nbsp;org.apache.hbase.thirdparty.com.google.common.util.concurrent.ListeningExecutorService <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.74">executor</a></pre>
+<pre>private final&nbsp;org.apache.hbase.thirdparty.com.google.common.util.concurrent.ListeningExecutorService <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.68">executor</a></pre>
 </li>
 </ul>
 <a name="lastFullRefresh">
@@ -376,7 +376,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>lastFullRefresh</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.76">lastFullRefresh</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.70">lastFullRefresh</a></pre>
 </li>
 </ul>
 <a name="loader">
@@ -385,7 +385,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>loader</h4>
-<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.cache.CacheLoader&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.78">loader</a></pre>
+<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.cache.CacheLoader&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.72">loader</a></pre>
 </li>
 </ul>
 <a name="cache">
@@ -394,7 +394,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>cache</h4>
-<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.99">cache</a></pre>
+<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.93">cache</a></pre>
 </li>
 </ul>
 </li>
@@ -411,7 +411,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionLocationFinder</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.101">RegionLocationFinder</a>()</pre>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.95">RegionLocationFinder</a>()</pre>
 </li>
 </ul>
 </li>
@@ -428,7 +428,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createCache</h4>
-<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.116">createCache</a>()</pre>
+<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.110">createCache</a>()</pre>
 <div class="block">Create a cache for region to list of servers</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -442,7 +442,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getConf</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.122">getConf</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.116">getConf</a>()</pre>
 </li>
 </ul>
 <a name="setConf-org.apache.hadoop.conf.Configuration-">
@@ -451,7 +451,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setConf</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.126">setConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.120">setConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="setServices-org.apache.hadoop.hbase.master.MasterServices-">
@@ -460,7 +460,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setServices</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.130">setServices</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;services)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.124">setServices</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;services)</pre>
 </li>
 </ul>
 <a name="setClusterMetrics-org.apache.hadoop.hbase.ClusterMetrics-">
@@ -469,7 +469,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setClusterMetrics</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.134">setClusterMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;status)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.128">setClusterMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;status)</pre>
 </li>
 </ul>
 <a name="scheduleFullRefresh--">
@@ -478,7 +478,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>scheduleFullRefresh</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.148">scheduleFullRefresh</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.143">scheduleFullRefresh</a>()</pre>
 <div class="block">Refresh all the region locations.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -492,7 +492,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTopBlockLocations</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.168">getTopBlockLocations</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.163">getTopBlockLocations</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</pre>
 </li>
 </ul>
 <a name="getTopBlockLocations-org.apache.hadoop.hbase.client.RegionInfo-java.lang.String-">
@@ -501,7 +501,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTopBlockLocations</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.177">getTopBlockLocations</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.172">getTopBlockLocations</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                                                 <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;currentHost)</pre>
 <div class="block">Returns an ordered list of hosts which have better locality for this region
  than the current host.</div>
@@ -513,7 +513,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>internalGetTopBlockLocation</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.194">internalGetTopBlockLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.193">internalGetTopBlockLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</pre>
 <div class="block">Returns an ordered list of hosts that are hosting the blocks for this
  region. The weight of each host is the sum of the block lengths of all
  files on that host, so the first host in the list is the server which holds
@@ -532,7 +532,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDescriptor</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.217">getTableDescriptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.216">getTableDescriptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">return TableDescriptor for a given tableName</div>
 <dl>
@@ -541,7 +541,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>TableDescriptor</dd>
 <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> - if table descriptor cannot be loaded</dd>
+<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>
@@ -551,7 +551,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>mapHostNameToServerName</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.238">mapHostNameToServerName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;hosts)</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.237">mapHostNameToServerName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;hosts)</pre>
 <div class="block">Map hostname to ServerName, The output ServerName list will have the same
  order as input hosts.</div>
 <dl>
@@ -568,7 +568,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockDistribution</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.267">getBlockDistribution</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.273">getBlockDistribution</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
 </li>
 </ul>
 <a name="asyncGetBlockDistribution-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -577,7 +577,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>asyncGetBlockDistribution</h4>
-<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.util.concurrent.ListenableFuture&lt;<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.271">asyncGetBlockDistribution</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
+<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.util.concurrent.ListenableFuture&lt;<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.294">asyncGetBlockDistribution</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
 </li>
 </ul>
 <a name="refreshAndWait-java.util.Collection-">
@@ -586,7 +586,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshAndWait</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.280">refreshAndWait</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;hris)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.303">refreshAndWait</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;hris)</pre>
 </li>
 </ul>
 <a name="getCache--">
@@ -595,7 +595,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getCache</h4>
-<pre>org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.303">getCache</a>()</pre>
+<pre>org.apache.hbase.thirdparty.com.google.common.cache.LoadingCache&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#line.326">getCache</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 55a97e3..890d83d 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -347,10 +347,10 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index e602642..7b8e220 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -208,9 +208,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.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
index 3e1ea7f..9eb46aa 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -125,8 +125,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 3eb0c51..f7e51ee 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -441,19 +441,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index b17b611..8807f56 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -212,11 +212,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" 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/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 31ce475..bda8bbd 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -228,12 +228,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
index 1239bd7..332c004 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3382">HRegionServer.MovedRegionInfo</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3387">HRegionServer.MovedRegionInfo</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>
 </li>
 </ul>
@@ -218,7 +218,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>serverName</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3383">serverName</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3388">serverName</a></pre>
 </li>
 </ul>
 <a name="seqNum">
@@ -227,7 +227,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>seqNum</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3384">seqNum</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3389">seqNum</a></pre>
 </li>
 </ul>
 <a name="ts">
@@ -236,7 +236,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ts</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3385">ts</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3390">ts</a></pre>
 </li>
 </ul>
 </li>
@@ -253,7 +253,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MovedRegionInfo</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3387">MovedRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3392">MovedRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                        long&nbsp;closeSeqNum)</pre>
 </li>
 </ul>
@@ -271,7 +271,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3393">getServerName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3398">getServerName</a>()</pre>
 </li>
 </ul>
 <a name="getSeqNum--">
@@ -280,7 +280,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getSeqNum</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3397">getSeqNum</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3402">getSeqNum</a>()</pre>
 </li>
 </ul>
 <a name="getMoveTime--">
@@ -289,7 +289,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMoveTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3401">getMoveTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3406">getMoveTime</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
index 01fb6e7..46a36b5 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3469">HRegionServer.MovedRegionsCleaner</a>
+<pre>protected static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3474">HRegionServer.MovedRegionsCleaner</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></pre>
 <div class="block">Creates a Chore thread to clean the moved region cache.</div>
@@ -242,7 +242,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3470">regionServer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3475">regionServer</a></pre>
 </li>
 </ul>
 <a name="stoppable">
@@ -251,7 +251,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>stoppable</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3471">stoppable</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3476">stoppable</a></pre>
 </li>
 </ul>
 </li>
@@ -268,7 +268,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MovedRegionsCleaner</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3473">MovedRegionsCleaner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;regionServer,
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3478">MovedRegionsCleaner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;regionServer,
                             <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stoppable)</pre>
 </li>
 </ul>
@@ -286,7 +286,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionsCleaner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3481">create</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs)</pre>
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionsCleaner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3486">create</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs)</pre>
 </li>
 </ul>
 <a name="chore--">
@@ -295,7 +295,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>chore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3492">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3497">chore</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore--">ScheduledChore</a></code></span></div>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
 <dl>
@@ -310,7 +310,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3497">stop</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3502">stop</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">Stoppable</a></code></span></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -328,7 +328,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3502">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionsCleaner.html#line.3507">isStopped</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--">isStopped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></dd>


[03/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html
index 3a5c274..08ea9e7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.html
@@ -33,208 +33,218 @@
 <span class="sourceLineNo">025</span>import java.util.Set;<a name="line.25"></a>
 <span class="sourceLineNo">026</span><a name="line.26"></a>
 <span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.TableName;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.net.Address;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.AddRSGroupRequest;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.BalanceRSGroupRequest;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerRequest;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerResponse;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableRequest;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableResponse;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoRequest;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoResponse;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.ListRSGroupInfosRequest;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersAndTablesRequest;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersRequest;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveTablesRequest;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdminService;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveRSGroupRequest;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveServersRequest;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupProtos;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.50"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.net.Address;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.AddRSGroupRequest;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.BalanceRSGroupRequest;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerRequest;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfServerResponse;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableRequest;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoOfTableResponse;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoRequest;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.GetRSGroupInfoResponse;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.ListRSGroupInfosRequest;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersAndTablesRequest;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveServersRequest;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.MoveTablesRequest;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RSGroupAdminService;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveRSGroupRequest;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupAdminProtos.RemoveServersRequest;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.protobuf.generated.RSGroupProtos;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.50"></a>
 <span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Client used for managing region server group information.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> */<a name="line.54"></a>
-<span class="sourceLineNo">055</span>@InterfaceAudience.Private<a name="line.55"></a>
-<span class="sourceLineNo">056</span>class RSGroupAdminClient implements RSGroupAdmin {<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private RSGroupAdminService.BlockingInterface stub;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  public RSGroupAdminClient(Connection conn) throws IOException {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    stub = RSGroupAdminService.newBlockingStub(conn.getAdmin().coprocessorService());<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  }<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  @Override<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  public RSGroupInfo getRSGroupInfo(String groupName) throws IOException {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    try {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      GetRSGroupInfoResponse resp = stub.getRSGroupInfo(null,<a name="line.66"></a>
-<span class="sourceLineNo">067</span>          GetRSGroupInfoRequest.newBuilder().setRSGroupName(groupName).build());<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      if(resp.hasRSGroupInfo()) {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>        return RSGroupProtobufUtil.toGroupInfo(resp.getRSGroupInfo());<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      }<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      return null;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    } catch (ServiceException e) {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>      throw ProtobufUtil.handleRemoteException(e);<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>  @Override<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public RSGroupInfo getRSGroupInfoOfTable(TableName tableName) throws IOException {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    GetRSGroupInfoOfTableRequest request = GetRSGroupInfoOfTableRequest.newBuilder().setTableName(<a name="line.79"></a>
-<span class="sourceLineNo">080</span>        ProtobufUtil.toProtoTableName(tableName)).build();<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    try {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      GetRSGroupInfoOfTableResponse resp = stub.getRSGroupInfoOfTable(null, request);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      if (resp.hasRSGroupInfo()) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>        return RSGroupProtobufUtil.toGroupInfo(resp.getRSGroupInfo());<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      }<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      return null;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    } catch (ServiceException e) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      throw ProtobufUtil.handleRemoteException(e);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  @Override<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public void moveServers(Set&lt;Address&gt; servers, String targetGroup) throws IOException {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    Set&lt;HBaseProtos.ServerName&gt; hostPorts = Sets.newHashSet();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    for(Address el: servers) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      hostPorts.add(HBaseProtos.ServerName.newBuilder()<a name="line.96"></a>
-<span class="sourceLineNo">097</span>        .setHostName(el.getHostname())<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        .setPort(el.getPort())<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        .build());<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    MoveServersRequest request = MoveServersRequest.newBuilder()<a name="line.101"></a>
-<span class="sourceLineNo">102</span>            .setTargetGroup(targetGroup)<a name="line.102"></a>
-<span class="sourceLineNo">103</span>            .addAllServers(hostPorts)<a name="line.103"></a>
-<span class="sourceLineNo">104</span>            .build();<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    try {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      stub.moveServers(null, request);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    } catch (ServiceException e) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      throw ProtobufUtil.handleRemoteException(e);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<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>  @Override<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public void moveTables(Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    MoveTablesRequest.Builder builder = MoveTablesRequest.newBuilder().setTargetGroup(targetGroup);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    for(TableName tableName: tables) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      builder.addTableName(ProtobufUtil.toProtoTableName(tableName));<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    try {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      stub.moveTables(null, builder.build());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    } catch (ServiceException e) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      throw ProtobufUtil.handleRemoteException(e);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    }<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  }<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 void addRSGroup(String groupName) throws IOException {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    AddRSGroupRequest request = AddRSGroupRequest.newBuilder().setRSGroupName(groupName).build();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    try {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      stub.addRSGroup(null, request);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    } catch (ServiceException e) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      throw ProtobufUtil.handleRemoteException(e);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  }<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>  @Override<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  public void removeRSGroup(String name) throws IOException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    RemoveRSGroupRequest request = RemoveRSGroupRequest.newBuilder().setRSGroupName(name).build();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    try {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      stub.removeRSGroup(null, request);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    } catch (ServiceException e) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      throw ProtobufUtil.handleRemoteException(e);<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><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  @Override<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public boolean balanceRSGroup(String groupName) throws IOException {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    BalanceRSGroupRequest request = BalanceRSGroupRequest.newBuilder()<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        .setRSGroupName(groupName).build();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    try {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return stub.balanceRSGroup(null, request).getBalanceRan();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    } catch (ServiceException e) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      throw ProtobufUtil.handleRemoteException(e);<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>  @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  public List&lt;RSGroupInfo&gt; listRSGroups() throws IOException {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    try {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      List&lt;RSGroupProtos.RSGroupInfo&gt; resp = stub.listRSGroupInfos(null,<a name="line.159"></a>
-<span class="sourceLineNo">160</span>          ListRSGroupInfosRequest.getDefaultInstance()).getRSGroupInfoList();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      List&lt;RSGroupInfo&gt; result = new ArrayList&lt;&gt;(resp.size());<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      for(RSGroupProtos.RSGroupInfo entry : resp) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        result.add(RSGroupProtobufUtil.toGroupInfo(entry));<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      return result;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    } catch (ServiceException e) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      throw ProtobufUtil.handleRemoteException(e);<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>  @Override<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  public RSGroupInfo getRSGroupOfServer(Address hostPort) throws IOException {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    GetRSGroupInfoOfServerRequest request = GetRSGroupInfoOfServerRequest.newBuilder()<a name="line.173"></a>
-<span class="sourceLineNo">174</span>            .setServer(HBaseProtos.ServerName.newBuilder()<a name="line.174"></a>
-<span class="sourceLineNo">175</span>                .setHostName(hostPort.getHostname())<a name="line.175"></a>
-<span class="sourceLineNo">176</span>                .setPort(hostPort.getPort())<a name="line.176"></a>
-<span class="sourceLineNo">177</span>                .build())<a name="line.177"></a>
-<span class="sourceLineNo">178</span>            .build();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    try {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      GetRSGroupInfoOfServerResponse resp = stub.getRSGroupInfoOfServer(null, request);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      if (resp.hasRSGroupInfo()) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        return RSGroupProtobufUtil.toGroupInfo(resp.getRSGroupInfo());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      return null;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    } catch (ServiceException e) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      throw ProtobufUtil.handleRemoteException(e);<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><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  @Override<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  public void moveServersAndTables(Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables, String targetGroup)<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      throws IOException {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    MoveServersAndTablesRequest.Builder builder =<a name="line.193"></a>
-<span class="sourceLineNo">194</span>            MoveServersAndTablesRequest.newBuilder().setTargetGroup(targetGroup);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    for(Address el: servers) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      builder.addServers(HBaseProtos.ServerName.newBuilder()<a name="line.196"></a>
-<span class="sourceLineNo">197</span>              .setHostName(el.getHostname())<a name="line.197"></a>
-<span class="sourceLineNo">198</span>              .setPort(el.getPort())<a name="line.198"></a>
-<span class="sourceLineNo">199</span>              .build());<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    for(TableName tableName: tables) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      builder.addTableName(ProtobufUtil.toProtoTableName(tableName));<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    try {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      stub.moveServersAndTables(null, builder.build());<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    } catch (ServiceException e) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      throw ProtobufUtil.handleRemoteException(e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  }<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>  @Override<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  public void removeServers(Set&lt;Address&gt; servers) throws IOException {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    Set&lt;HBaseProtos.ServerName&gt; hostPorts = Sets.newHashSet();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    for(Address el: servers) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      hostPorts.add(HBaseProtos.ServerName.newBuilder()<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          .setHostName(el.getHostname())<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          .setPort(el.getPort())<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          .build());<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    RemoveServersRequest request = RemoveServersRequest.newBuilder()<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        .addAllServers(hostPorts)<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        .build();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    try {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      stub.removeServers(null, request);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    } catch (ServiceException e) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      throw ProtobufUtil.handleRemoteException(e);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>}<a name="line.229"></a>
+<span class="sourceLineNo">052</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<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> * Client used for managing region server group information.<a name="line.55"></a>
+<span class="sourceLineNo">056</span> */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>@InterfaceAudience.Private<a name="line.57"></a>
+<span class="sourceLineNo">058</span>class RSGroupAdminClient implements RSGroupAdmin {<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private RSGroupAdminService.BlockingInterface stub;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private Admin admin;<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public RSGroupAdminClient(Connection conn) throws IOException {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    admin = conn.getAdmin();<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    stub = RSGroupAdminService.newBlockingStub(admin.coprocessorService());<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  }<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  @Override<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  public RSGroupInfo getRSGroupInfo(String groupName) throws IOException {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    try {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      GetRSGroupInfoResponse resp = stub.getRSGroupInfo(null,<a name="line.70"></a>
+<span class="sourceLineNo">071</span>          GetRSGroupInfoRequest.newBuilder().setRSGroupName(groupName).build());<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      if(resp.hasRSGroupInfo()) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>        return RSGroupProtobufUtil.toGroupInfo(resp.getRSGroupInfo());<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      }<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      return null;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    } catch (ServiceException e) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      throw ProtobufUtil.handleRemoteException(e);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    }<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  @Override<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  public RSGroupInfo getRSGroupInfoOfTable(TableName tableName) throws IOException {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    GetRSGroupInfoOfTableRequest request = GetRSGroupInfoOfTableRequest.newBuilder().setTableName(<a name="line.83"></a>
+<span class="sourceLineNo">084</span>        ProtobufUtil.toProtoTableName(tableName)).build();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    try {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      GetRSGroupInfoOfTableResponse resp = stub.getRSGroupInfoOfTable(null, request);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      if (resp.hasRSGroupInfo()) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>        return RSGroupProtobufUtil.toGroupInfo(resp.getRSGroupInfo());<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      return null;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    } catch (ServiceException e) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      throw ProtobufUtil.handleRemoteException(e);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    }<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  @Override<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public void moveServers(Set&lt;Address&gt; servers, String targetGroup) throws IOException {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    Set&lt;HBaseProtos.ServerName&gt; hostPorts = Sets.newHashSet();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    for(Address el: servers) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      hostPorts.add(HBaseProtos.ServerName.newBuilder()<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        .setHostName(el.getHostname())<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        .setPort(el.getPort())<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        .build());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    }<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    MoveServersRequest request = MoveServersRequest.newBuilder()<a name="line.105"></a>
+<span class="sourceLineNo">106</span>            .setTargetGroup(targetGroup)<a name="line.106"></a>
+<span class="sourceLineNo">107</span>            .addAllServers(hostPorts)<a name="line.107"></a>
+<span class="sourceLineNo">108</span>            .build();<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    try {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      stub.moveServers(null, request);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    } catch (ServiceException e) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      throw ProtobufUtil.handleRemoteException(e);<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><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  @Override<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  public void moveTables(Set&lt;TableName&gt; tables, String targetGroup) throws IOException {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    MoveTablesRequest.Builder builder = MoveTablesRequest.newBuilder().setTargetGroup(targetGroup);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    for(TableName tableName: tables) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      builder.addTableName(ProtobufUtil.toProtoTableName(tableName));<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      if (!admin.tableExists(tableName)) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        throw new TableNotFoundException(tableName);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      }<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    }<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    try {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      stub.moveTables(null, builder.build());<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    } catch (ServiceException e) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      throw ProtobufUtil.handleRemoteException(e);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    }<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>  @Override<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  public void addRSGroup(String groupName) throws IOException {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    AddRSGroupRequest request = AddRSGroupRequest.newBuilder().setRSGroupName(groupName).build();<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    try {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      stub.addRSGroup(null, request);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    } catch (ServiceException e) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      throw ProtobufUtil.handleRemoteException(e);<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><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  @Override<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  public void removeRSGroup(String name) throws IOException {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    RemoveRSGroupRequest request = RemoveRSGroupRequest.newBuilder().setRSGroupName(name).build();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    try {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      stub.removeRSGroup(null, request);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    } catch (ServiceException e) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      throw ProtobufUtil.handleRemoteException(e);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>  @Override<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  public boolean balanceRSGroup(String groupName) throws IOException {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    BalanceRSGroupRequest request = BalanceRSGroupRequest.newBuilder()<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        .setRSGroupName(groupName).build();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    try {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      return stub.balanceRSGroup(null, request).getBalanceRan();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    } catch (ServiceException e) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      throw ProtobufUtil.handleRemoteException(e);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>  @Override<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  public List&lt;RSGroupInfo&gt; listRSGroups() throws IOException {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    try {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      List&lt;RSGroupProtos.RSGroupInfo&gt; resp = stub.listRSGroupInfos(null,<a name="line.166"></a>
+<span class="sourceLineNo">167</span>          ListRSGroupInfosRequest.getDefaultInstance()).getRSGroupInfoList();<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      List&lt;RSGroupInfo&gt; result = new ArrayList&lt;&gt;(resp.size());<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      for(RSGroupProtos.RSGroupInfo entry : resp) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        result.add(RSGroupProtobufUtil.toGroupInfo(entry));<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      return result;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    } catch (ServiceException e) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      throw ProtobufUtil.handleRemoteException(e);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    }<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  @Override<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public RSGroupInfo getRSGroupOfServer(Address hostPort) throws IOException {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    GetRSGroupInfoOfServerRequest request = GetRSGroupInfoOfServerRequest.newBuilder()<a name="line.180"></a>
+<span class="sourceLineNo">181</span>            .setServer(HBaseProtos.ServerName.newBuilder()<a name="line.181"></a>
+<span class="sourceLineNo">182</span>                .setHostName(hostPort.getHostname())<a name="line.182"></a>
+<span class="sourceLineNo">183</span>                .setPort(hostPort.getPort())<a name="line.183"></a>
+<span class="sourceLineNo">184</span>                .build())<a name="line.184"></a>
+<span class="sourceLineNo">185</span>            .build();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    try {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      GetRSGroupInfoOfServerResponse resp = stub.getRSGroupInfoOfServer(null, request);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      if (resp.hasRSGroupInfo()) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        return RSGroupProtobufUtil.toGroupInfo(resp.getRSGroupInfo());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      return null;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    } catch (ServiceException e) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      throw ProtobufUtil.handleRemoteException(e);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    }<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>  @Override<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  public void moveServersAndTables(Set&lt;Address&gt; servers, Set&lt;TableName&gt; tables, String targetGroup)<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      throws IOException {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    MoveServersAndTablesRequest.Builder builder =<a name="line.200"></a>
+<span class="sourceLineNo">201</span>            MoveServersAndTablesRequest.newBuilder().setTargetGroup(targetGroup);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    for(Address el: servers) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      builder.addServers(HBaseProtos.ServerName.newBuilder()<a name="line.203"></a>
+<span class="sourceLineNo">204</span>              .setHostName(el.getHostname())<a name="line.204"></a>
+<span class="sourceLineNo">205</span>              .setPort(el.getPort())<a name="line.205"></a>
+<span class="sourceLineNo">206</span>              .build());<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    for(TableName tableName: tables) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      builder.addTableName(ProtobufUtil.toProtoTableName(tableName));<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (!admin.tableExists(tableName)) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        throw new TableNotFoundException(tableName);<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>    try {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      stub.moveServersAndTables(null, builder.build());<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    } catch (ServiceException e) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      throw ProtobufUtil.handleRemoteException(e);<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>  @Override<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  public void removeServers(Set&lt;Address&gt; servers) throws IOException {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    Set&lt;HBaseProtos.ServerName&gt; hostPorts = Sets.newHashSet();<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    for(Address el: servers) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      hostPorts.add(HBaseProtos.ServerName.newBuilder()<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          .setHostName(el.getHostname())<a name="line.226"></a>
+<span class="sourceLineNo">227</span>          .setPort(el.getPort())<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          .build());<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    RemoveServersRequest request = RemoveServersRequest.newBuilder()<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        .addAllServers(hostPorts)<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        .build();<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    try {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      stub.removeServers(null, request);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    } catch (ServiceException e) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      throw ProtobufUtil.handleRemoteException(e);<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>}<a name="line.239"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index c319471..9189760 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -324,7 +324,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 19e2ba2..53b0f07 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -426,7 +426,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index d45b0c2..f0ababb 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -284,7 +284,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 3808b2e..35e08e5 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -281,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 219f234..368210a 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -484,7 +484,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 8bc86c1..0954698 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -334,7 +334,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 33d4278..8f29865 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -452,7 +452,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 9b3a2d4..7ed47a5 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -407,7 +407,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index 7895c5e..119b1c2 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -429,7 +429,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 9d7b8c4..e546d6c 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -368,7 +368,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 9cbfbfc..772124f 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -762,7 +762,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index b22c6dc..dc156e6 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -328,7 +328,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index cce07a3..cca3be2 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -298,7 +298,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 2427e1e..fd42634 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -324,7 +324,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index b58a8c7..6c3f707 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -301,7 +301,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index fae8d0d..86a5c0a 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -296,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 6efb670..5235467 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -324,7 +324,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 2594825..f71763b 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -292,7 +292,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index f54cea0..69c1d43 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -326,7 +326,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index 405325a..2d03a19 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -513,7 +513,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index 4cc68f9..3d4e3b7 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="20180319" />
+    <meta name="Date-Revision-yyyymmdd" content="20180320" />
     <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" />
@@ -723,7 +723,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-03-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index de675bc..105bc46 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -54092,6 +54092,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionOpen.html#testNonExistentRegionReplica--">testNonExistentRegionReplica()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionOpen.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionOpen</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testNonExistentTableMove--">testNonExistentTableMove()</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroupsBase</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/TestLoadIncrementalHFiles.html#testNonHfileFolder--">testNonHfileFolder()</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>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/TestLoadIncrementalHFiles.html#testNonHfileFolder-java.lang.String-boolean-">testNonHfileFolder(String, boolean)</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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 4837d80..ec56445 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -158,8 +158,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TagUsage.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TagUsage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestCacheOnWrite.CacheOnWriteType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TagUsage.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TagUsage</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/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 9ce4a25..32e1bbd 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -575,15 +575,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/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/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/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/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/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>
+<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/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/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/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/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/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/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/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 b5bacb6..e9c1d93 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/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/648c9317/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 3a402bf..df88362 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -653,11 +653,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<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/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>
 <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/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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/testdevapidocs/org/apache/hadoop/hbase/rsgroup/IntegrationTestRSGroup.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/rsgroup/IntegrationTestRSGroup.html b/testdevapidocs/org/apache/hadoop/hbase/rsgroup/IntegrationTestRSGroup.html
index 636c2ec..2cd4e08 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/rsgroup/IntegrationTestRSGroup.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/rsgroup/IntegrationTestRSGroup.html
@@ -197,7 +197,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.rsgroup.<a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroupsBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#addGroup-java.lang.String-int-">addGroup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#deleteGroups--">deleteGroups</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#deleteNamespaceIfNecessary--">deleteNamespaceIfNecessary</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#deleteTableIfNecessary--">deleteTableIfNecessary</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#getNumServers--">getNumServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#getTableRegionMap--">getTableRegionMap</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#getTableServerRegionMap--">getTableServerRegionMap</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#removeGroup-java.lang.String-">remo
 veGroup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#setup--">setup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testBogusArgs--">testBogusArgs</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testClearDeadServers--">testClearDeadServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testCreateAndDrop--">testCreateAndDrop</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testCreateMultiRegion--">testCreateMultiRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testCreateWhenRsgroupNoOnlineServers--">testCreateWhenRsgroupNoOnlineServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testDisabledTableMove--">testDisabledTableMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testFailRemoveGroup--">t
 estFailRemoveGroup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testGroupBalance--">testGroupBalance</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testKillRS--">testKillRS</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testMoveServers--">testMoveServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testMoveServersAndTables--">testMoveServersAndTables</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testMultiTableMove--">testMultiTableMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testRegionMove--">testRegionMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testRemoveServers--">testRemoveServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testSimpleRegionServerMove--">testSimpleRegionServe
 rMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testTableMoveTruncateAndDrop--">testTableMoveTruncateAndDrop</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testValidGroupNames--">testValidGroupNames</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#addGroup-java.lang.String-int-">addGroup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#deleteGroups--">deleteGroups</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#deleteNamespaceIfNecessary--">deleteNamespaceIfNecessary</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#deleteTableIfNecessary--">deleteTableIfNecessary</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#getNumServers--">getNumServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#getTableRegionMap--">getTableRegionMap</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#getTableServerRegionMap--">getTableServerRegionMap</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#removeGroup-java.lang.String-">remo
 veGroup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#setup--">setup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testBogusArgs--">testBogusArgs</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testClearDeadServers--">testClearDeadServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testCreateAndDrop--">testCreateAndDrop</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testCreateMultiRegion--">testCreateMultiRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testCreateWhenRsgroupNoOnlineServers--">testCreateWhenRsgroupNoOnlineServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testDisabledTableMove--">testDisabledTableMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testFailRemoveGroup--">t
 estFailRemoveGroup</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testGroupBalance--">testGroupBalance</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testKillRS--">testKillRS</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testMoveServers--">testMoveServers</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testMoveServersAndTables--">testMoveServersAndTables</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testMultiTableMove--">testMultiTableMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testNonExistentTableMove--">testNonExistentTableMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testRegionMove--">testRegionMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testRemoveServers--">testRemoveServer
 s</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testSimpleRegionServerMove--">testSimpleRegionServerMove</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testTableMoveTruncateAndDrop--">testTableMoveTruncateAndDrop</a>, <a href="../../../../../org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#testValidGroupNames--">testValidGroupNames</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">


[07/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html
index 7f89c08..9ee12ef 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushHandler.html
@@ -29,906 +29,911 @@
 <span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import java.lang.Thread.UncaughtExceptionHandler;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.util.ArrayList;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.ConcurrentModificationException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.HashMap;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.HashSet;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedMap;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.BlockingQueue;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.DelayQueue;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.Delayed;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.ThreadFactory;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.TimeUnit;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.LongAdder;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.concurrent.locks.ReentrantReadWriteLock;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.conf.Configuration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HRegion.FlushResult;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.htrace.core.TraceScope;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.slf4j.Logger;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.slf4j.LoggerFactory;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>/**<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * Thread that flushes cache on request<a name="line.60"></a>
-<span class="sourceLineNo">061</span> *<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * NOTE: This class extends Thread rather than Chore because the sleep time<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * can be interrupted when there is something to do, rather than the Chore<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * sleep time which is invariant.<a name="line.64"></a>
-<span class="sourceLineNo">065</span> *<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * @see FlushRequester<a name="line.66"></a>
-<span class="sourceLineNo">067</span> */<a name="line.67"></a>
-<span class="sourceLineNo">068</span>@InterfaceAudience.Private<a name="line.68"></a>
-<span class="sourceLineNo">069</span>class MemStoreFlusher implements FlushRequester {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private static final Logger LOG = LoggerFactory.getLogger(MemStoreFlusher.class);<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private Configuration conf;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  // These two data members go together.  Any entry in the one must have<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  // a corresponding entry in the other.<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private final BlockingQueue&lt;FlushQueueEntry&gt; flushQueue = new DelayQueue&lt;&gt;();<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private final Map&lt;Region, FlushRegionEntry&gt; regionsInQueue = new HashMap&lt;&gt;();<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private AtomicBoolean wakeupPending = new AtomicBoolean();<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private final long threadWakeFrequency;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private final HRegionServer server;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private final Object blockSignal = new Object();<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  private long blockingWaitTime;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private final LongAdder updatesBlockedMsHighWater = new LongAdder();<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private final FlushHandler[] flushHandlers;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private List&lt;FlushRequestListener&gt; flushRequestListeners = new ArrayList&lt;&gt;(1);<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private FlushType flushType;<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Singleton instance inserted into flush queue used for signaling.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private static final FlushQueueEntry WAKEUPFLUSH_INSTANCE = new FlushQueueEntry() {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    @Override<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public long getDelay(TimeUnit unit) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return 0;<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>    @Override<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public int compareTo(Delayed o) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return -1;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>    @Override<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public boolean equals(Object obj) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      return obj == this;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    @Override<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public int hashCode() {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      return 42;<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">024</span>import java.util.Collection;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.ConcurrentModificationException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.HashMap;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.HashSet;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedMap;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.BlockingQueue;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.DelayQueue;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.Delayed;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.ThreadFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.TimeUnit;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.atomic.LongAdder;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.concurrent.locks.ReentrantReadWriteLock;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.HRegion.FlushResult;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.htrace.core.TraceScope;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.slf4j.Logger;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.slf4j.LoggerFactory;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>/**<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * Thread that flushes cache on request<a name="line.61"></a>
+<span class="sourceLineNo">062</span> *<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * NOTE: This class extends Thread rather than Chore because the sleep time<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * can be interrupted when there is something to do, rather than the Chore<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * sleep time which is invariant.<a name="line.65"></a>
+<span class="sourceLineNo">066</span> *<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * @see FlushRequester<a name="line.67"></a>
+<span class="sourceLineNo">068</span> */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>@InterfaceAudience.Private<a name="line.69"></a>
+<span class="sourceLineNo">070</span>class MemStoreFlusher implements FlushRequester {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private static final Logger LOG = LoggerFactory.getLogger(MemStoreFlusher.class);<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private Configuration conf;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  // These two data members go together.  Any entry in the one must have<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  // a corresponding entry in the other.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private final BlockingQueue&lt;FlushQueueEntry&gt; flushQueue = new DelayQueue&lt;&gt;();<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private final Map&lt;Region, FlushRegionEntry&gt; regionsInQueue = new HashMap&lt;&gt;();<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private AtomicBoolean wakeupPending = new AtomicBoolean();<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private final long threadWakeFrequency;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private final HRegionServer server;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  private final Object blockSignal = new Object();<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  private long blockingWaitTime;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private final LongAdder updatesBlockedMsHighWater = new LongAdder();<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final FlushHandler[] flushHandlers;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  private List&lt;FlushRequestListener&gt; flushRequestListeners = new ArrayList&lt;&gt;(1);<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private FlushType flushType;<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  /**<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * Singleton instance inserted into flush queue used for signaling.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   */<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private static final FlushQueueEntry WAKEUPFLUSH_INSTANCE = new FlushQueueEntry() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    @Override<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public long getDelay(TimeUnit unit) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      return 0;<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 int compareTo(Delayed o) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      return -1;<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>    @Override<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    public boolean equals(Object obj) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      return obj == this;<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>    @Override<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    public int hashCode() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      return 42;<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>  /**<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @param conf<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param server<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public MemStoreFlusher(final Configuration conf,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      final HRegionServer server) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    super();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    this.conf = conf;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    this.server = server;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    this.threadWakeFrequency =<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        conf.getLong(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    this.blockingWaitTime = conf.getInt("hbase.hstore.blockingWaitTime",<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      90000);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    int handlerCount = conf.getInt("hbase.hstore.flusher.count", 2);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    this.flushHandlers = new FlushHandler[handlerCount];<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    LOG.info("globalMemStoreLimit="<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        + TraditionalBinaryPrefix<a name="line.134"></a>
-<span class="sourceLineNo">135</span>            .long2String(this.server.getRegionServerAccounting().getGlobalMemStoreLimit(), "", 1)<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        + ", globalMemStoreLimitLowMark="<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        + TraditionalBinaryPrefix.long2String(<a name="line.137"></a>
-<span class="sourceLineNo">138</span>          this.server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1)<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        + ", Offheap="<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        + (this.server.getRegionServerAccounting().isOffheap()));<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public LongAdder getUpdatesBlockedMsHighWater() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    return this.updatesBlockedMsHighWater;<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>  public void setFlushType(FlushType flushType) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    this.flushType = flushType;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>  /**<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * The memstore across all regions has exceeded the low water mark. Pick<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * one region to flush and flush it synchronously (this is called from the<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * flush thread)<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * @return true if successful<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  private boolean flushOneForGlobalPressure() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    SortedMap&lt;Long, HRegion&gt; regionsBySize = null;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    switch(flushType) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOffHeapSize();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        break;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      case ABOVE_ONHEAP_LOWER_MARK:<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      default:<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOnHeapSize();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    Set&lt;HRegion&gt; excludedRegions = new HashSet&lt;&gt;();<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    double secondaryMultiplier<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      = ServerRegionReplicaUtil.getRegionReplicaStoreFileRefreshMultiplier(conf);<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>    boolean flushedOne = false;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    while (!flushedOne) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      // Find the biggest region that doesn't have too many storefiles (might be null!)<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      HRegion bestFlushableRegion =<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          getBiggestMemStoreRegion(regionsBySize, excludedRegions, true);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      // Find the biggest region, total, even if it might have too many flushes.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      HRegion bestAnyRegion = getBiggestMemStoreRegion(regionsBySize, excludedRegions, false);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      // Find the biggest region that is a secondary region<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      HRegion bestRegionReplica = getBiggestMemStoreOfRegionReplica(regionsBySize, excludedRegions);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      if (bestAnyRegion == null) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        // If bestAnyRegion is null, assign replica. It may be null too. Next step is check for null<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        bestAnyRegion = bestRegionReplica;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      if (bestAnyRegion == null) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        LOG.error("Above memory mark but there are no flushable regions!");<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        return false;<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>      HRegion regionToFlush;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      long bestAnyRegionSize;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      long bestFlushableRegionSize;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      switch(flushType) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreOffHeapSize();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>          bestFlushableRegionSize = getMemStoreOffHeapSize(bestFlushableRegion);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          break;<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.203"></a>
-<span class="sourceLineNo">204</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreHeapSize();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>          bestFlushableRegionSize = getMemStoreHeapSize(bestFlushableRegion);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>          break;<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>        default:<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreDataSize();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          bestFlushableRegionSize = getMemStoreDataSize(bestFlushableRegion);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      if (bestAnyRegionSize &gt; 2 * bestFlushableRegionSize) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        // Even if it's not supposed to be flushed, pick a region if it's more than twice<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        // as big as the best flushable one - otherwise when we're under pressure we make<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        // lots of little flushes and cause lots of compactions, etc, which just makes<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        // life worse!<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        if (LOG.isDebugEnabled()) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          LOG.debug("Under global heap pressure: " + "Region "<a name="line.218"></a>
-<span class="sourceLineNo">219</span>              + bestAnyRegion.getRegionInfo().getRegionNameAsString()<a name="line.219"></a>
-<span class="sourceLineNo">220</span>              + " has too many " + "store files, but is "<a name="line.220"></a>
-<span class="sourceLineNo">221</span>              + TraditionalBinaryPrefix.long2String(bestAnyRegionSize, "", 1)<a name="line.221"></a>
-<span class="sourceLineNo">222</span>              + " vs best flushable region's "<a name="line.222"></a>
-<span class="sourceLineNo">223</span>              + TraditionalBinaryPrefix.long2String(<a name="line.223"></a>
-<span class="sourceLineNo">224</span>              bestFlushableRegionSize, "", 1)<a name="line.224"></a>
-<span class="sourceLineNo">225</span>              + ". Choosing the bigger.");<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        regionToFlush = bestAnyRegion;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      } else {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        if (bestFlushableRegion == null) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          regionToFlush = bestAnyRegion;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        } else {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          regionToFlush = bestFlushableRegion;<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><a name="line.235"></a>
-<span class="sourceLineNo">236</span>      long regionToFlushSize;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      long bestRegionReplicaSize;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      switch(flushType) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          regionToFlushSize = regionToFlush.getMemStoreOffHeapSize();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>          bestRegionReplicaSize = getMemStoreOffHeapSize(bestRegionReplica);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          break;<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          regionToFlushSize = regionToFlush.getMemStoreHeapSize();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          bestRegionReplicaSize = getMemStoreHeapSize(bestRegionReplica);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          break;<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>        default:<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          regionToFlushSize = regionToFlush.getMemStoreDataSize();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          bestRegionReplicaSize = getMemStoreDataSize(bestRegionReplica);<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>      Preconditions.checkState(<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        (regionToFlush != null &amp;&amp; regionToFlushSize &gt; 0) || bestRegionReplicaSize &gt; 0);<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      if (regionToFlush == null ||<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          (bestRegionReplica != null &amp;&amp;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>           ServerRegionReplicaUtil.isRegionReplicaStoreFileRefreshEnabled(conf) &amp;&amp;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>           (bestRegionReplicaSize &gt; secondaryMultiplier * regionToFlushSize))) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        LOG.info("Refreshing storefiles of region " + bestRegionReplica +<a name="line.263"></a>
-<span class="sourceLineNo">264</span>            " due to global heap pressure. Total memstore off heap size=" +<a name="line.264"></a>
-<span class="sourceLineNo">265</span>            TraditionalBinaryPrefix.long2String(<a name="line.265"></a>
-<span class="sourceLineNo">266</span>              server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.266"></a>
-<span class="sourceLineNo">267</span>            " memstore heap size=" + TraditionalBinaryPrefix.long2String(<a name="line.267"></a>
-<span class="sourceLineNo">268</span>              server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1));<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        flushedOne = refreshStoreFilesAndReclaimMemory(bestRegionReplica);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        if (!flushedOne) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          LOG.info("Excluding secondary region " + bestRegionReplica +<a name="line.271"></a>
-<span class="sourceLineNo">272</span>              " - trying to find a different region to refresh files.");<a name="line.272"></a>
-<span class="sourceLineNo">273</span>          excludedRegions.add(bestRegionReplica);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      } else {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        LOG.info("Flush of region " + regionToFlush + " due to global heap pressure. " +<a name="line.276"></a>
-<span class="sourceLineNo">277</span>            "Flush type=" + flushType.toString() +<a name="line.277"></a>
-<span class="sourceLineNo">278</span>            "Total Memstore Heap size=" +<a name="line.278"></a>
-<span class="sourceLineNo">279</span>            TraditionalBinaryPrefix.long2String(<a name="line.279"></a>
-<span class="sourceLineNo">280</span>                server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1) +<a name="line.280"></a>
-<span class="sourceLineNo">281</span>            "Total Memstore Off-Heap size=" +<a name="line.281"></a>
-<span class="sourceLineNo">282</span>            TraditionalBinaryPrefix.long2String(<a name="line.282"></a>
-<span class="sourceLineNo">283</span>                server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.283"></a>
-<span class="sourceLineNo">284</span>            ", Region memstore size=" +<a name="line.284"></a>
-<span class="sourceLineNo">285</span>            TraditionalBinaryPrefix.long2String(regionToFlushSize, "", 1));<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        flushedOne = flushRegion(regionToFlush, true, false, FlushLifeCycleTracker.DUMMY);<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (!flushedOne) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          LOG.info("Excluding unflushable region " + regionToFlush +<a name="line.289"></a>
-<span class="sourceLineNo">290</span>              " - trying to find a different region to flush.");<a name="line.290"></a>
-<span class="sourceLineNo">291</span>          excludedRegions.add(regionToFlush);<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>    }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return true;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  /**<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * @return Return memstore offheap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   */<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  private static long getMemStoreOffHeapSize(HRegion r) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    return r == null? 0: r.getMemStoreOffHeapSize();<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  }<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>   * @return Return memstore heap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   */<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  private static long getMemStoreHeapSize(HRegion r) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    return r == null? 0: r.getMemStoreHeapSize();<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">312</span>  /**<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * @return Return memstore data size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  private static long getMemStoreDataSize(HRegion r) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    return r == null? 0: r.getMemStoreDataSize();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  private class FlushHandler extends HasThread {<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    private FlushHandler(String name) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      super(name);<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>    @Override<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    public void run() {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      while (!server.isStopped()) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        FlushQueueEntry fqe = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        try {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          wakeupPending.set(false); // allow someone to wake us up again<a name="line.330"></a>
-<span class="sourceLineNo">331</span>          fqe = flushQueue.poll(threadWakeFrequency, TimeUnit.MILLISECONDS);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>          if (fqe == null || fqe == WAKEUPFLUSH_INSTANCE) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>            FlushType type = isAboveLowWaterMark();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            if (type != FlushType.NORMAL) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>              LOG.debug("Flush thread woke up because memory above low water="<a name="line.335"></a>
-<span class="sourceLineNo">336</span>                  + TraditionalBinaryPrefix.long2String(<a name="line.336"></a>
-<span class="sourceLineNo">337</span>                    server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1));<a name="line.337"></a>
-<span class="sourceLineNo">338</span>              // For offheap memstore, even if the lower water mark was breached due to heap overhead<a name="line.338"></a>
-<span class="sourceLineNo">339</span>              // we still select the regions based on the region's memstore data size.<a name="line.339"></a>
-<span class="sourceLineNo">340</span>              // TODO : If we want to decide based on heap over head it can be done without tracking<a name="line.340"></a>
-<span class="sourceLineNo">341</span>              // it per region.<a name="line.341"></a>
-<span class="sourceLineNo">342</span>              if (!flushOneForGlobalPressure()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>                // Wasn't able to flush any region, but we're above low water mark<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                // This is unlikely to happen, but might happen when closing the<a name="line.344"></a>
-<span class="sourceLineNo">345</span>                // entire server - another thread is flushing regions. We'll just<a name="line.345"></a>
-<span class="sourceLineNo">346</span>                // sleep a little bit to avoid spinning, and then pretend that<a name="line.346"></a>
-<span class="sourceLineNo">347</span>                // we flushed one, so anyone blocked will check again<a name="line.347"></a>
-<span class="sourceLineNo">348</span>                Thread.sleep(1000);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>                wakeUpIfBlocking();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>              }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>              // Enqueue another one of these tokens so we'll wake up again<a name="line.351"></a>
-<span class="sourceLineNo">352</span>              wakeupFlushThread();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>            }<a name="line.353"></a>
-<span class="sourceLineNo">354</span>            continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          FlushRegionEntry fre = (FlushRegionEntry) fqe;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>          if (!flushRegion(fre)) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            break;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>          }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        } catch (InterruptedException ex) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          continue;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        } catch (ConcurrentModificationException ex) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          continue;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        } catch (Exception ex) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          LOG.error("Cache flusher failed for entry " + fqe, ex);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (!server.checkFileSystem()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            break;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      synchronized (regionsInQueue) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        regionsInQueue.clear();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        flushQueue.clear();<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>      // Signal anyone waiting, so they see the close flag<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      wakeUpIfBlocking();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      LOG.info(getName() + " exiting");<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  /**<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @param conf<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param server<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public MemStoreFlusher(final Configuration conf,<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      final HRegionServer server) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    super();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    this.conf = conf;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    this.server = server;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    this.threadWakeFrequency =<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        conf.getLong(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    this.blockingWaitTime = conf.getInt("hbase.hstore.blockingWaitTime",<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      90000);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    int handlerCount = conf.getInt("hbase.hstore.flusher.count", 2);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.flushHandlers = new FlushHandler[handlerCount];<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    LOG.info("globalMemStoreLimit="<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        + TraditionalBinaryPrefix<a name="line.135"></a>
+<span class="sourceLineNo">136</span>            .long2String(this.server.getRegionServerAccounting().getGlobalMemStoreLimit(), "", 1)<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        + ", globalMemStoreLimitLowMark="<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        + TraditionalBinaryPrefix.long2String(<a name="line.138"></a>
+<span class="sourceLineNo">139</span>          this.server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1)<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        + ", Offheap="<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        + (this.server.getRegionServerAccounting().isOffheap()));<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>  public LongAdder getUpdatesBlockedMsHighWater() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return this.updatesBlockedMsHighWater;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  public void setFlushType(FlushType flushType) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    this.flushType = flushType;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>  /**<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * The memstore across all regions has exceeded the low water mark. Pick<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * one region to flush and flush it synchronously (this is called from the<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * flush thread)<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return true if successful<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  private boolean flushOneForGlobalPressure() {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; regionsBySize = null;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    switch(flushType) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOffHeapSize();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        break;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      case ABOVE_ONHEAP_LOWER_MARK:<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      default:<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOnHeapSize();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    Set&lt;HRegion&gt; excludedRegions = new HashSet&lt;&gt;();<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>    double secondaryMultiplier<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      = ServerRegionReplicaUtil.getRegionReplicaStoreFileRefreshMultiplier(conf);<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    boolean flushedOne = false;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    while (!flushedOne) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      // Find the biggest region that doesn't have too many storefiles (might be null!)<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      HRegion bestFlushableRegion =<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          getBiggestMemStoreRegion(regionsBySize, excludedRegions, true);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      // Find the biggest region, total, even if it might have too many flushes.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      HRegion bestAnyRegion = getBiggestMemStoreRegion(regionsBySize, excludedRegions, false);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      // Find the biggest region that is a secondary region<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      HRegion bestRegionReplica = getBiggestMemStoreOfRegionReplica(regionsBySize, excludedRegions);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      if (bestAnyRegion == null) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        // If bestAnyRegion is null, assign replica. It may be null too. Next step is check for null<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        bestAnyRegion = bestRegionReplica;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      if (bestAnyRegion == null) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        LOG.error("Above memory mark but there are no flushable regions!");<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        return false;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>      HRegion regionToFlush;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      long bestAnyRegionSize;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      long bestFlushableRegionSize;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      switch(flushType) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreOffHeapSize();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          bestFlushableRegionSize = getMemStoreOffHeapSize(bestFlushableRegion);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>          break;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreHeapSize();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          bestFlushableRegionSize = getMemStoreHeapSize(bestFlushableRegion);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          break;<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>        default:<a name="line.209"></a>
+<span class="sourceLineNo">210</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreDataSize();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          bestFlushableRegionSize = getMemStoreDataSize(bestFlushableRegion);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      if (bestAnyRegionSize &gt; 2 * bestFlushableRegionSize) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        // Even if it's not supposed to be flushed, pick a region if it's more than twice<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        // as big as the best flushable one - otherwise when we're under pressure we make<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        // lots of little flushes and cause lots of compactions, etc, which just makes<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        // life worse!<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        if (LOG.isDebugEnabled()) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          LOG.debug("Under global heap pressure: " + "Region "<a name="line.219"></a>
+<span class="sourceLineNo">220</span>              + bestAnyRegion.getRegionInfo().getRegionNameAsString()<a name="line.220"></a>
+<span class="sourceLineNo">221</span>              + " has too many " + "store files, but is "<a name="line.221"></a>
+<span class="sourceLineNo">222</span>              + TraditionalBinaryPrefix.long2String(bestAnyRegionSize, "", 1)<a name="line.222"></a>
+<span class="sourceLineNo">223</span>              + " vs best flushable region's "<a name="line.223"></a>
+<span class="sourceLineNo">224</span>              + TraditionalBinaryPrefix.long2String(<a name="line.224"></a>
+<span class="sourceLineNo">225</span>              bestFlushableRegionSize, "", 1)<a name="line.225"></a>
+<span class="sourceLineNo">226</span>              + ". Choosing the bigger.");<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        regionToFlush = bestAnyRegion;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      } else {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        if (bestFlushableRegion == null) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          regionToFlush = bestAnyRegion;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>          regionToFlush = bestFlushableRegion;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        }<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>      long regionToFlushSize;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      long bestRegionReplicaSize;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      switch(flushType) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          regionToFlushSize = regionToFlush.getMemStoreOffHeapSize();<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          bestRegionReplicaSize = getMemStoreOffHeapSize(bestRegionReplica);<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>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          regionToFlushSize = regionToFlush.getMemStoreHeapSize();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          bestRegionReplicaSize = getMemStoreHeapSize(bestRegionReplica);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          break;<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>        default:<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          regionToFlushSize = regionToFlush.getMemStoreDataSize();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          bestRegionReplicaSize = getMemStoreDataSize(bestRegionReplica);<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>      Preconditions.checkState(<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        (regionToFlush != null &amp;&amp; regionToFlushSize &gt; 0) || bestRegionReplicaSize &gt; 0);<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>      if (regionToFlush == null ||<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          (bestRegionReplica != null &amp;&amp;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>           ServerRegionReplicaUtil.isRegionReplicaStoreFileRefreshEnabled(conf) &amp;&amp;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>           (bestRegionReplicaSize &gt; secondaryMultiplier * regionToFlushSize))) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        LOG.info("Refreshing storefiles of region " + bestRegionReplica +<a name="line.264"></a>
+<span class="sourceLineNo">265</span>            " due to global heap pressure. Total memstore off heap size=" +<a name="line.265"></a>
+<span class="sourceLineNo">266</span>            TraditionalBinaryPrefix.long2String(<a name="line.266"></a>
+<span class="sourceLineNo">267</span>              server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.267"></a>
+<span class="sourceLineNo">268</span>            " memstore heap size=" + TraditionalBinaryPrefix.long2String(<a name="line.268"></a>
+<span class="sourceLineNo">269</span>              server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1));<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        flushedOne = refreshStoreFilesAndReclaimMemory(bestRegionReplica);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        if (!flushedOne) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          LOG.info("Excluding secondary region " + bestRegionReplica +<a name="line.272"></a>
+<span class="sourceLineNo">273</span>              " - trying to find a different region to refresh files.");<a name="line.273"></a>
+<span class="sourceLineNo">274</span>          excludedRegions.add(bestRegionReplica);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      } else {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        LOG.info("Flush of region " + regionToFlush + " due to global heap pressure. " +<a name="line.277"></a>
+<span class="sourceLineNo">278</span>            "Flush type=" + flushType.toString() +<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            "Total Memstore Heap size=" +<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            TraditionalBinaryPrefix.long2String(<a name="line.280"></a>
+<span class="sourceLineNo">281</span>                server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1) +<a name="line.281"></a>
+<span class="sourceLineNo">282</span>            "Total Memstore Off-Heap size=" +<a name="line.282"></a>
+<span class="sourceLineNo">283</span>            TraditionalBinaryPrefix.long2String(<a name="line.283"></a>
+<span class="sourceLineNo">284</span>                server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.284"></a>
+<span class="sourceLineNo">285</span>            ", Region memstore size=" +<a name="line.285"></a>
+<span class="sourceLineNo">286</span>            TraditionalBinaryPrefix.long2String(regionToFlushSize, "", 1));<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        flushedOne = flushRegion(regionToFlush, true, false, FlushLifeCycleTracker.DUMMY);<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>        if (!flushedOne) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          LOG.info("Excluding unflushable region " + regionToFlush +<a name="line.290"></a>
+<span class="sourceLineNo">291</span>              " - trying to find a different region to flush.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          excludedRegions.add(regionToFlush);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        }<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>    return true;<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>  /**<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @return Return memstore offheap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   */<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  private static long getMemStoreOffHeapSize(HRegion r) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    return r == null? 0: r.getMemStoreOffHeapSize();<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>   * @return Return memstore heap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   */<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  private static long getMemStoreHeapSize(HRegion r) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    return r == null? 0: r.getMemStoreHeapSize();<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  }<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>   * @return Return memstore data size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  private static long getMemStoreDataSize(HRegion r) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    return r == null? 0: r.getMemStoreDataSize();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  private class FlushHandler extends HasThread {<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    private FlushHandler(String name) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      super(name);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>    @Override<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    public void run() {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      while (!server.isStopped()) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        FlushQueueEntry fqe = null;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>          wakeupPending.set(false); // allow someone to wake us up again<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          fqe = flushQueue.poll(threadWakeFrequency, TimeUnit.MILLISECONDS);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          if (fqe == null || fqe == WAKEUPFLUSH_INSTANCE) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            FlushType type = isAboveLowWaterMark();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>            if (type != FlushType.NORMAL) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>              LOG.debug("Flush thread woke up because memory above low water="<a name="line.336"></a>
+<span class="sourceLineNo">337</span>                  + TraditionalBinaryPrefix.long2String(<a name="line.337"></a>
+<span class="sourceLineNo">338</span>                    server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1));<a name="line.338"></a>
+<span class="sourceLineNo">339</span>              // For offheap memstore, even if the lower water mark was breached due to heap overhead<a name="line.339"></a>
+<span class="sourceLineNo">340</span>              // we still select the regions based on the region's memstore data size.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>              // TODO : If we want to decide based on heap over head it can be done without tracking<a name="line.341"></a>
+<span class="sourceLineNo">342</span>              // it per region.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              if (!flushOneForGlobalPressure()) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                // Wasn't able to flush any region, but we're above low water mark<a name="line.344"></a>
+<span class="sourceLineNo">345</span>                // This is unlikely to happen, but might happen when closing the<a name="line.345"></a>
+<span class="sourceLineNo">346</span>                // entire server - another thread is flushing regions. We'll just<a name="line.346"></a>
+<span class="sourceLineNo">347</span>                // sleep a little bit to avoid spinning, and then pretend that<a name="line.347"></a>
+<span class="sourceLineNo">348</span>                // we flushed one, so anyone blocked will check again<a name="line.348"></a>
+<span class="sourceLineNo">349</span>                Thread.sleep(1000);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                wakeUpIfBlocking();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>              }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>              // Enqueue another one of these tokens so we'll wake up again<a name="line.352"></a>
+<span class="sourceLineNo">353</span>              wakeupFlushThread();<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            }<a name="line.354"></a>
+<span class="sourceLineNo">355</span>            continue;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          FlushRegionEntry fre = (FlushRegionEntry) fqe;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          if (!flushRegion(fre)) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>            break;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        } catch (InterruptedException ex) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>          continue;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        } catch (ConcurrentModificationException ex) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>          continue;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        } catch (Exception ex) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>          LOG.error("Cache flusher failed for entry " + fqe, ex);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          if (!server.checkFileSystem()) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>            break;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      synchronized (regionsInQueue) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        regionsInQueue.clear();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        flushQueue.clear();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>      // Signal anyone waiting, so they see the close flag<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      wakeUpIfBlocking();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      LOG.info(getName() + " exiting");<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    }<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
 <span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private void wakeupFlushThread() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    if (wakeupPending.compareAndSet(false, true)) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      flushQueue.add(WAKEUPFLUSH_INSTANCE);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  private HRegion getBiggestMemStoreRegion(<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      SortedMap&lt;Long, HRegion&gt; regionsBySize,<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      Set&lt;HRegion&gt; excludedRegions,<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      boolean checkStoreFileCount) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    synchronized (regionsInQueue) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      for (HRegion region : regionsBySize.values()) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (excludedRegions.contains(region)) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          continue;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        }<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>        if (region.writestate.flushing || !region.writestate.writesEnabled) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>          continue;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>        if (checkStoreFileCount &amp;&amp; isTooManyStoreFiles(region)) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          continue;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        return region;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      }<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return null;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  private HRegion getBiggestMemStoreOfRegionReplica(SortedMap&lt;Long, HRegion&gt; regionsBySize,<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      Set&lt;HRegion&gt; excludedRegions) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    synchronized (regionsInQueue) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      for (HRegion region : regionsBySize.values()) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        if (excludedRegions.contains(region)) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          continue;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>        if (RegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          continue;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>        return region;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    return null;<a name="line.427"></a>
-<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>  private boolean refreshStoreFilesAndReclaimMemory(Region region) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    try {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      return region.refreshStoreFiles();<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    } catch (IOException e) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      LOG.warn("Refreshing store files failed with exception", e);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    return false;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
-<span class="sourceLineNo">438</span><a name="line.438"></a>
-<span class="sourceLineNo">439</span>  /**<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * Return true if global memory usage is above the high watermark<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   */<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private FlushType isAboveHighWaterMark() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return server.getRegionServerAccounting().isAboveHighWaterMark();<a name="line.443"></a>
-<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>  /**<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * Return true if we're above the low watermark<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private FlushType isAboveLowWaterMark() {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    return server.getRegionServerAccounting().isAboveLowWaterMark();<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>  @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  public void requestFlush(HRegion r, boolean forceFlushAllStores, FlushLifeCycleTracker tracker) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    r.incrementFlushesQueuedCount();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    synchronized (regionsInQueue) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      if (!regionsInQueue.containsKey(r)) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        // This entry has no delay so it will be added at the top of the flush<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        // queue. It'll come out near immediately.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        FlushRegionEntry fqe = new FlushRegionEntry(r, forceFlushAllStores, tracker);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        this.regionsInQueue.put(r, fqe);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        this.flushQueue.add(fqe);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      } else {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        tracker.notExecuted("Flush already requested on " + r);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  @Override<a name="line.469"></a>
-<span class="sourceLineNo">470</span>  public void requestDelayedFlush(HRegion r, long delay, boolean forceFlushAllStores) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    r.incrementFlushesQueuedCount();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    synchronized (regionsInQueue) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      if (!regionsInQueue.containsKey(r)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        // This entry has some delay<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        FlushRegionEntry fqe =<a name="line.475"></a>
-<span class="sourceLineNo">476</span>            new FlushRegionEntry(r, forceFlushAllStores, FlushLifeCycleTracker.DUMMY);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        fqe.requeue(delay);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        this.regionsInQueue.put(r, fqe);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        this.flushQueue.add(fqe);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      }<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>  public int getFlushQueueSize() {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    return flushQueue.size();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  }<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>   * Only interrupt once it's done with a run through the work loop.<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   */<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  void interruptIfNecessary() {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    lock.writeLock().lock();<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    try {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      for (FlushHandler flushHander : flushHandlers) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        if (flushHander != null) flushHander.interrupt();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    } finally {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      lock.writeLock().unlock();<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><a name="line.501"></a>
-<span class="sourceLineNo">502</span>  synchronized void start(UncaughtExceptionHandler eh) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    ThreadFactory flusherThreadFactory = Threads.newDaemonThreadFactory(<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        server.getServerName().toShortString() + "-MemStoreFlusher", eh);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    for (int i = 0; i &lt; flushHandlers.length; i++) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      flushHandlers[i] = new FlushHandler("MemStoreFlusher." + i);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      flusherThreadFactory.newThread(flushHandlers[i]);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      flushHandlers[i].start();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>  }<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>  boolean isAlive() {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    for (FlushHandler flushHander : flushHandlers) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      if (flushHander != null &amp;&amp; flushHander.isAlive()) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return true;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    return false;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>  }<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>  void join() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    for (FlushHandler flushHander : flushHandlers) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      if (flushHander != null) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        Threads.shutdown(flushHander.getThread());<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>  /**<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * A flushRegion that checks store file count.  If too many, puts the flush<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * on delay queue to retry later.<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * @param fqe<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * @return true if the region was successfully flushed, false otherwise. If<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   * false, there will be accompanying log messages explaining why the region was<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   * not flushed.<a name="line.535"></a>
-<span class="sourceLineNo">536</span>   */<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  private boolean flushRegion(final FlushRegionEntry fqe) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    HRegion region = fqe.region;<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    if (!region.getRegionInfo().isMetaRegion() &amp;&amp; isTooManyStoreFiles(region)) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (fqe.isMaximumWait(this.blockingWaitTime)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.info("Waited " + (EnvironmentEdgeManager.currentTime() - fqe.createTime) +<a name="line.541"></a>
-<span class="sourceLineNo">542</span>          "ms on a compaction to clean up 'too many store files'; waited " +<a name="line.542"></a>
-<span class="sourceLineNo">543</span>          "long enough... proceeding with flush of " +<a name="line.543"></a>
-<span class="sourceLineNo">544</span>          region.getRegionInfo().getRegionNameAsString());<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      } else {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        // If this is first time we've been put off, then emit a log message.<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        if (fqe.getRequeueCount() &lt;= 0) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>          // Note: We don't impose blockingStoreFiles constraint on meta regions<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          LOG.warn("Region " + region.getRegionInfo().getEncodedName() + " has too many " +<a name="line.549"></a>
-<span class="sourceLineNo">550</span>            "store files; delaying flush up to " + this.blockingWaitTime + "ms");<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          if (!this.server.compactSplitThread.requestSplit(region)) {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>            try {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>              this.server.compactSplitThread.requestSystemCompaction(region,<a name="line.553"></a>
-<span class="sourceLineNo">554</span>                Thread.currentThread().getName());<a name="line.554"></a>
-<span class="sourceLineNo">555</span>            } catch (IOException e) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>              e = e instanceof RemoteException ?<a name="line.556"></a>
-<span class="sourceLineNo">557</span>                      ((RemoteException)e).unwrapRemoteException() : e;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>              LOG.error("Cache flush failed for region " +<a name="line.558"></a>
-<span class="sourceLineNo">559</span>                Bytes.toStringBinary(region.getRegionInfo().getRegionName()), e);<a name="line.559"></a>
-<span class="sourceLineNo">560</span>            }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>          }<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        }<a name="line.562"></a>
-<span class="sourceLin

<TRUNCATED>

[08/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
index b1c7be8..7f2e325 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
@@ -2767,1025 +2767,1030 @@
 <span class="sourceLineNo">2759</span>    configurationManager.registerObserver(region);<a name="line.2759"></a>
 <span class="sourceLineNo">2760</span>  }<a name="line.2760"></a>
 <span class="sourceLineNo">2761</span><a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>  /**<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>   *   the biggest.  If two regions are the same size, then the last one found wins; i.e. this<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>   *   method may NOT return all regions.<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>   */<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>  SortedMap&lt;Long, HRegion&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>    // we'll sort the regions in reverse<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    SortedMap&lt;Long, HRegion&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>        new Comparator&lt;Long&gt;() {<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>          @Override<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>          public int compare(Long a, Long b) {<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>            return -1 * a.compareTo(b);<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>          }<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        });<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      sortedRegions.put(region.getMemStoreOffHeapSize(), region);<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>    }<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>    return sortedRegions;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>  }<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span><a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>  /**<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>   *   biggest.  If two regions are the same size, then the last one found wins; i.e. this method<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>   *   may NOT return all regions.<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>   */<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>  SortedMap&lt;Long, HRegion&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>    // we'll sort the regions in reverse<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>    SortedMap&lt;Long, HRegion&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>        new Comparator&lt;Long&gt;() {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>          @Override<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>          public int compare(Long a, Long b) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>            return -1 * a.compareTo(b);<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>          }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>        });<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>      sortedRegions.put(region.getMemStoreHeapSize(), region);<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>    }<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>    return sortedRegions;<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>  }<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span><a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>  /**<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>   * @return time stamp in millis of when this region server was started<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>   */<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>  public long getStartcode() {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>    return this.startcode;<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>  }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span><a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>  /** @return reference to FlushRequester */<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>  @Override<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>  public FlushRequester getFlushRequester() {<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>    return this.cacheFlusher;<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>  }<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span><a name="line.2816"></a>
+<span class="sourceLineNo">2762</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>      long size) {<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>    }<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>    sortedRegions.get(size).add(region);<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>  }<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>  /**<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>   *   the biggest.<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>   */<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>    // we'll sort the regions in reverse<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>        new Comparator&lt;Long&gt;() {<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>          @Override<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>          public int compare(Long a, Long b) {<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>            return -1 * a.compareTo(b);<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>          }<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>        });<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>    }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>    return sortedRegions;<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>  }<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span><a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>  /**<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>   *   biggest.<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>   */<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>    // we'll sort the regions in reverse<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>        new Comparator&lt;Long&gt;() {<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>          @Override<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>          public int compare(Long a, Long b) {<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>            return -1 * a.compareTo(b);<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>          }<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>        });<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>    }<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>    return sortedRegions;<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>  }<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span><a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>  /**<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>   * @return time stamp in millis of when this region server was started<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>   */<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>  public long getStartcode() {<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>    return this.startcode;<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>  }<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span><a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>  /** @return reference to FlushRequester */<a name="line.2816"></a>
 <span class="sourceLineNo">2817</span>  @Override<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>    return this.compactSplitThread;<a name="line.2819"></a>
+<span class="sourceLineNo">2818</span>  public FlushRequester getFlushRequester() {<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>    return this.cacheFlusher;<a name="line.2819"></a>
 <span class="sourceLineNo">2820</span>  }<a name="line.2820"></a>
 <span class="sourceLineNo">2821</span><a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  /**<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>   * Get the top N most loaded regions this server is serving so we can tell the<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>   * master which regions it can reallocate if we're overloaded. TODO: actually<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>   * calculate which regions are most loaded. (Right now, we're just grabbing<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>   * the first N regions being served regardless of load.)<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>   */<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>  protected RegionInfo[] getMostLoadedRegions() {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>    ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;&gt;();<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>    for (Region r : onlineRegions.values()) {<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>      if (!r.isAvailable()) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>        continue;<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      }<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      if (regions.size() &lt; numRegionsToReport) {<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>        regions.add(r.getRegionInfo());<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      } else {<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>        break;<a name="line.2837"></a>
+<span class="sourceLineNo">2822</span>  @Override<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>    return this.compactSplitThread;<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>  }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span><a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>  /**<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>   * Get the top N most loaded regions this server is serving so we can tell the<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>   * master which regions it can reallocate if we're overloaded. TODO: actually<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>   * calculate which regions are most loaded. (Right now, we're just grabbing<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>   * the first N regions being served regardless of load.)<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>   */<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>  protected RegionInfo[] getMostLoadedRegions() {<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>    ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;&gt;();<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>    for (Region r : onlineRegions.values()) {<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>      if (!r.isAvailable()) {<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>        continue;<a name="line.2837"></a>
 <span class="sourceLineNo">2838</span>      }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    }<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>    return regions.toArray(new RegionInfo[regions.size()]);<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>  }<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span><a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>  @Override<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>  public Leases getLeases() {<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>    return leases;<a name="line.2845"></a>
+<span class="sourceLineNo">2839</span>      if (regions.size() &lt; numRegionsToReport) {<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>        regions.add(r.getRegionInfo());<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>      } else {<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>        break;<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>      }<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>    }<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>    return regions.toArray(new RegionInfo[regions.size()]);<a name="line.2845"></a>
 <span class="sourceLineNo">2846</span>  }<a name="line.2846"></a>
 <span class="sourceLineNo">2847</span><a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  /**<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>   * @return Return the rootDir.<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>   */<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>  protected Path getRootDir() {<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    return rootDir;<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>  }<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span><a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>  /**<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>   * @return Return the fs.<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>   */<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>  @Override<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>  public FileSystem getFileSystem() {<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>    return fs;<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>  }<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span><a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>  /**<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>   * @return Return the walRootDir.<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>   */<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>  protected Path getWALRootDir() {<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>    return walRootDir;<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>  }<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span><a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>  /**<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>   * @return Return the walFs.<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>   */<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>  protected FileSystem getWALFileSystem() {<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>    return walFs;<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>  }<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span><a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>  @Override<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>  public String toString() {<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>    return getServerName().toString();<a name="line.2879"></a>
+<span class="sourceLineNo">2848</span>  @Override<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>  public Leases getLeases() {<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>    return leases;<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>  }<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span><a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>  /**<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>   * @return Return the rootDir.<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>   */<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>  protected Path getRootDir() {<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>    return rootDir;<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>  }<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span><a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>  /**<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>   * @return Return the fs.<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>   */<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>  @Override<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>  public FileSystem getFileSystem() {<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>    return fs;<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>  }<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span><a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>  /**<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>   * @return Return the walRootDir.<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>   */<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>  protected Path getWALRootDir() {<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>    return walRootDir;<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>  }<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span><a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>  /**<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>   * @return Return the walFs.<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>   */<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>  protected FileSystem getWALFileSystem() {<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>    return walFs;<a name="line.2879"></a>
 <span class="sourceLineNo">2880</span>  }<a name="line.2880"></a>
 <span class="sourceLineNo">2881</span><a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>  /**<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>   * Interval at which threads should run<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>   *<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>   * @return the interval<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>   */<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>  public int getThreadWakeFrequency() {<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    return threadWakeFrequency;<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>  }<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span><a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>  @Override<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>  public ZKWatcher getZooKeeper() {<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>    return zooKeeper;<a name="line.2893"></a>
+<span class="sourceLineNo">2882</span>  @Override<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>  public String toString() {<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>    return getServerName().toString();<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>  }<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span><a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>  /**<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>   * Interval at which threads should run<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span>   *<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>   * @return the interval<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>   */<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>  public int getThreadWakeFrequency() {<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>    return threadWakeFrequency;<a name="line.2893"></a>
 <span class="sourceLineNo">2894</span>  }<a name="line.2894"></a>
 <span class="sourceLineNo">2895</span><a name="line.2895"></a>
 <span class="sourceLineNo">2896</span>  @Override<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>    return csm;<a name="line.2898"></a>
+<span class="sourceLineNo">2897</span>  public ZKWatcher getZooKeeper() {<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>    return zooKeeper;<a name="line.2898"></a>
 <span class="sourceLineNo">2899</span>  }<a name="line.2899"></a>
 <span class="sourceLineNo">2900</span><a name="line.2900"></a>
 <span class="sourceLineNo">2901</span>  @Override<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>  public ServerName getServerName() {<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span>    return serverName;<a name="line.2903"></a>
+<span class="sourceLineNo">2902</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>    return csm;<a name="line.2903"></a>
 <span class="sourceLineNo">2904</span>  }<a name="line.2904"></a>
 <span class="sourceLineNo">2905</span><a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>    return this.rsHost;<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>  }<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span><a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>  @Override<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>    return this.regionsInTransitionInRS;<a name="line.2912"></a>
+<span class="sourceLineNo">2906</span>  @Override<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span>  public ServerName getServerName() {<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>    return serverName;<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>  }<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span><a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span>    return this.rsHost;<a name="line.2912"></a>
 <span class="sourceLineNo">2913</span>  }<a name="line.2913"></a>
 <span class="sourceLineNo">2914</span><a name="line.2914"></a>
 <span class="sourceLineNo">2915</span>  @Override<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>  public ExecutorService getExecutorService() {<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>    return executorService;<a name="line.2917"></a>
+<span class="sourceLineNo">2916</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>    return this.regionsInTransitionInRS;<a name="line.2917"></a>
 <span class="sourceLineNo">2918</span>  }<a name="line.2918"></a>
 <span class="sourceLineNo">2919</span><a name="line.2919"></a>
 <span class="sourceLineNo">2920</span>  @Override<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>  public ChoreService getChoreService() {<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>    return choreService;<a name="line.2922"></a>
+<span class="sourceLineNo">2921</span>  public ExecutorService getExecutorService() {<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>    return executorService;<a name="line.2922"></a>
 <span class="sourceLineNo">2923</span>  }<a name="line.2923"></a>
 <span class="sourceLineNo">2924</span><a name="line.2924"></a>
 <span class="sourceLineNo">2925</span>  @Override<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>    return rsQuotaManager;<a name="line.2927"></a>
+<span class="sourceLineNo">2926</span>  public ChoreService getChoreService() {<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>    return choreService;<a name="line.2927"></a>
 <span class="sourceLineNo">2928</span>  }<a name="line.2928"></a>
 <span class="sourceLineNo">2929</span><a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>  //<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>  // Main program and support routines<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>  //<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>  /**<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>   * Load the replication executorService objects, if any<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>   */<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    if ((server instanceof HMaster) &amp;&amp;<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>      (!LoadBalancer.isTablesOnMaster(conf) || LoadBalancer.isSystemTablesOnlyOnMaster(conf))) {<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>      return;<a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>    }<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span><a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>    // read in the name of the source replication class from the config file.<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span><a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>    // read in the name of the sink replication class from the config file.<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span><a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>    // only one object.<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>    } else {<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>    }<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>  }<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span><a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>    Class&lt;? extends T&gt; clazz = null;<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>    try {<a name="line.2969"></a>
-<span class="sourceLineNo">2970</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>      throw new IOException("Could not find class for " + classname);<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>    }<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>    return service;<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>  }<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span><a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>  /**<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>   *<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>   * @param regionServerClass<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>   * @param conf2<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>   * @return HRegionServer instance.<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span>   */<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>  public static HRegionServer constructRegionServer(<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span>      Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>      final Configuration conf2) {<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>    try {<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>      Constructor&lt;? extends HRegionServer&gt; c = regionServerClass<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>          .getConstructor(Configuration.class);<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span>      return c.newInstance(conf2);<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>    } catch (Exception e) {<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>          + regionServerClass.toString(), e);<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>    }<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>  }<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span><a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>  /**<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>   */<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>  public static void main(String[] args) throws Exception {<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>    VersionInfo.logVersion();<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>    @SuppressWarnings("unchecked")<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span><a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>  }<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span><a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>  /**<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>   * Gets the online regions of the specified table.<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>   * all the ONLINE regions in the table.<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>   * @param tableName<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>   */<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span>  @Override<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>     synchronized (this.onlineRegions) {<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span>           tableRegions.add(region);<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>         }<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>       }<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span>     }<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>     return tableRegions;<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>   }<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span><a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>  @Override<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>    List&lt;HRegion&gt; allRegions = new ArrayList&lt;&gt;();<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>    synchronized (this.onlineRegions) {<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>      // Return a clone copy of the onlineRegions<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>      allRegions.addAll(onlineRegions.values());<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>    }<a name="line.3044"></a>
-<span class="sourceLineNo">3045</span>    return allRegions;<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>  }<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span><a name="line.3047"></a>
-<span class="sourceLineNo">3048</span>  /**<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>   * Gets the online tables in this RS.<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>   * This method looks at the in-memory onlineRegions.<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>   * @return all the online tables in this RS<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>   */<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>    synchronized (this.onlineRegions) {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span>      }<a name="line.3058"></a>
-<span class="sourceLineNo">3059</span>    }<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span>    return tables;<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>  }<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span><a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>  // used by org/apache/hbase/tmpl/regionserver/RSStatusTmpl.jamon (HBASE-4070).<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>  public String[] getRegionServerCoprocessors() {<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>    try {<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>    } catch (IOException exception) {<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span>          "skipping.");<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>    }<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span>    for (HRegion region: regions) {<a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>      try {<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>      } catch (IOException exception) {<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>            "; skipping.");<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>      }<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>    }<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>    return coprocessors.toArray(new String[coprocessors.size()]);<a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>  }<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span><a name="line.3087"></a>
-<span class="sourceLineNo">3088</span>  /**<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>   * @param region Region to close<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>   */<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>    try {<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>            " - ignoring and continuing");<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>      }<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>    } catch (IOException e) {<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>          " - ignoring and continuing", e);<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>    }<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>  }<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span><a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>  /**<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>   * when stopping. If called from the master, the region will update the znode status.<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>   *<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>   * &lt;p&gt;<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>   * &lt;/p&gt;<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span><a name="line.3112"></a>
+<span class="sourceLineNo">2930</span>  @Override<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>    return rsQuotaManager;<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>  }<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span><a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>  //<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span>  // Main program and support routines<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>  //<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>  /**<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>   * Load the replication executorService objects, if any<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>   */<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span>    if ((server instanceof HMaster) &amp;&amp;<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>      (!LoadBalancer.isTablesOnMaster(conf) || LoadBalancer.isSystemTablesOnlyOnMaster(conf))) {<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>      return;<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>    }<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span><a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>    // read in the name of the source replication class from the config file.<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span><a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>    // read in the name of the sink replication class from the config file.<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span><a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>    // only one object.<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>    } else {<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>    }<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>  }<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span><a name="line.2969"></a>
+<span class="sourceLineNo">2970</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>    Class&lt;? extends T&gt; clazz = null;<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>    try {<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>      throw new IOException("Could not find class for " + classname);<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>    }<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>    return service;<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>  }<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span><a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>  /**<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>   *<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>   * @param regionServerClass<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>   * @param conf2<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>   * @return HRegionServer instance.<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>   */<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>  public static HRegionServer constructRegionServer(<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>      Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span>      final Configuration conf2) {<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>    try {<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>      Constructor&lt;? extends HRegionServer&gt; c = regionServerClass<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>          .getConstructor(Configuration.class);<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>      return c.newInstance(conf2);<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>    } catch (Exception e) {<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>          + regionServerClass.toString(), e);<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>    }<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>  }<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span><a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>  /**<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>   */<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>  public static void main(String[] args) throws Exception {<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>    VersionInfo.logVersion();<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>    @SuppressWarnings("unchecked")<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span><a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>  }<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span><a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>  /**<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>   * Gets the online regions of the specified table.<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>   * all the ONLINE regions in the table.<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>   * @param tableName<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>   */<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>  @Override<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span>     synchronized (this.onlineRegions) {<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>           tableRegions.add(region);<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span>         }<a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>       }<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>     }<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>     return tableRegions;<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>   }<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span><a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>  @Override<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>    List&lt;HRegion&gt; allRegions = new ArrayList&lt;&gt;();<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>    synchronized (this.onlineRegions) {<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>      // Return a clone copy of the onlineRegions<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>      allRegions.addAll(onlineRegions.values());<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>    }<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>    return allRegions;<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span>  }<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span><a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  /**<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>   * Gets the online tables in this RS.<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>   * This method looks at the in-memory onlineRegions.<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span>   * @return all the online tables in this RS<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>   */<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>    synchronized (this.onlineRegions) {<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>      }<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>    }<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>    return tables;<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span>  }<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span><a name="line.3067"></a>
+<span class="sourceLineNo">3068</span>  // used by org/apache/hbase/tmpl/regionserver/RSStatusTmpl.jamon (HBASE-4070).<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>  public String[] getRegionServerCoprocessors() {<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>    try {<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>    } catch (IOException exception) {<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>          "skipping.");<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>    }<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>    for (HRegion region: regions) {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>      try {<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span>      } catch (IOException exception) {<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>            "; skipping.");<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span>      }<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>    }<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>    return coprocessors.toArray(new String[coprocessors.size()]);<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>  }<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span><a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>  /**<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>   * @param region Region to close<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>   */<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3097"></a>
+<span class="sourceLineNo">3098</span>    try {<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>            " - ignoring and continuing");<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span>      }<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span>    } catch (IOException e) {<a name="line.3103"></a>
+<span class="sourceLineNo">3104</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>          " - ignoring and continuing", e);<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>    }<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>  }<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span><a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>  /**<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>   * when stopping. If called from the master, the region will update the znode status.<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>   *<a name="line.3112"></a>
 <span class="sourceLineNo">3113</span>   * &lt;p&gt;<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>   * &lt;/p&gt;<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>   *<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>   * @param encodedName Region to close<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>   * @param abort True if we are aborting<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>   * @return True if closed a region.<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>   * @throws NotServingRegionException if the region is not online<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>   */<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>  protected boolean closeRegion(String encodedName, final boolean abort, final ServerName sn)<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>      throws NotServingRegionException {<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>    //Check for permissions to close.<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>    // Can be null if we're calling close on a region that's not online<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>      try {<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>      } catch (IOException exp) {<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>        return false;<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>      }<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>    }<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span><a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>        Boolean.FALSE);<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span><a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>        // We're going to try to do a standard close then.<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>            " Doing a standard close now");<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>        return closeRegion(encodedName, abort, sn);<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span>      }<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span>      // Let's get the region from the online region list again<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>      actualRegion = this.getRegion(encodedName);<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>        // The master deletes the znode when it receives this exception.<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>      }<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>      return true;<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>    }<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span><a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>    if (actualRegion == null) {<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>      // The master deletes the znode when it receives this exception.<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>          " is not online, and is not opening.");<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>    }<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span><a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>    CloseRegionHandler crh;<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>    if (hri.isMetaRegion()) {<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>    } else {<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>      crh = new CloseRegionHandler(this, this, hri, abort, sn);<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>    }<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>    this.executorService.submit(crh);<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>    return true;<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>  }<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span><a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>  /**<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>   * Close and offline the region for split or merge<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>   *<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>   * @param regionEncodedName the name of the region(s) to close<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>   * @return true if closed the region successfully.<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>   * @throws IOException<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>  */<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>  protected boolean closeAndOfflineRegionForSplitOrMerge(final List&lt;String&gt; regionEncodedName)<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>      throws IOException {<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>    for (int i = 0; i &lt; regionEncodedName.size(); ++i) {<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>      HRegion regionToClose = this.getRegion(regionEncodedName.get(i));<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>      if (regionToClose != null) {<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>        Map&lt;byte[], List&lt;HStoreFile&gt;&gt; hstoreFiles = null;<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>        Exception exceptionToThrow = null;<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>        try {<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>          hstoreFiles = regionToClose.close(false);<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>        } catch (Exception e) {<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>          exceptionToThrow = e;<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>        }<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>        if (exceptionToThrow == null &amp;&amp; hstoreFiles == null) {<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>          // The region was closed by someone else<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>          exceptionToThrow =<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>            new IOException("Failed to close region: already closed by another thread");<a name="line.3204"></a>
+<span class="sourceLineNo">3114</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>   * &lt;/p&gt;<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span><a name="line.3117"></a>
+<span class="sourceLineNo">3118</span>   * &lt;p&gt;<a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>   * &lt;/p&gt;<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>   *<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>   * @param encodedName Region to close<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>   * @param abort True if we are aborting<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>   * @return True if closed a region.<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>   * @throws NotServingRegionException if the region is not online<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>   */<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>  protected boolean closeRegion(String encodedName, final boolean abort, final ServerName sn)<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>      throws NotServingRegionException {<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>    //Check for permissions to close.<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>    // Can be null if we're calling close on a region that's not online<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>      try {<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>      } catch (IOException exp) {<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>        return false;<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>      }<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>    }<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span><a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>        Boolean.FALSE);<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span><a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span>        // We're going to try to do a standard close then.<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>            " Doing a standard close now");<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>        return closeRegion(encodedName, abort, sn);<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>      }<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span>      // Let's get the region from the online region list again<a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>      actualRegion = this.getRegion(encodedName);<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>        // The master deletes the znode when it receives this exception.<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>      }<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>      return true;<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>    }<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span><a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>    if (actualRegion == null) {<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>      // The master deletes the znode when it receives this exception.<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>          " is not online, and is not opening.");<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>    }<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span><a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>    CloseRegionHandler crh;<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>    if (hri.isMetaRegion()) {<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>    } else {<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>      crh = new CloseRegionHandler(this, this, hri, abort, sn);<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>    }<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>    this.executorService.submit(crh);<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>    return true;<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>  }<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span><a name="line.3186"></a>
+<span class="sourceLineNo">3187</span>  /**<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>   * Close and offline the region for split or merge<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>   *<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>   * @param regionEncodedName the name of the region(s) to close<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>   * @return true if closed the region successfully.<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>   * @throws IOException<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>  */<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span>  protected boolean closeAndOfflineRegionForSplitOrMerge(final List&lt;String&gt; regionEncodedName)<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span>      throws IOException {<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span>    for (int i = 0; i &lt; regionEncodedName.size(); ++i) {<a name="line.3196"></a>
+<span class="sourceLineNo">3197</span>      HRegion regionToClose = this.getRegion(regionEncodedName.get(i));<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span>      if (regionToClose != null) {<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span>        Map&lt;byte[], List&lt;HStoreFile&gt;&gt; hstoreFiles = null;<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>        Exception exceptionToThrow = null;<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span>        try {<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>          hstoreFiles = regionToClose.close(false);<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span>        } catch (Exception e) {<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>          exceptionToThrow = e;<a name="line.3204"></a>
 <span class="sourceLineNo">3205</span>        }<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>        if (exceptionToThrow != null) {<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>          if (exceptionToThrow instanceof IOException) {<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>            throw (IOException) exceptionToThrow;<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>          }<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>          throw new IOException(exceptionToThrow);<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>        }<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>        // Offline the region<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>        this.removeRegion(regionToClose, null);<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>      }<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>    }<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>    return true;<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>  }<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span><a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>   /**<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>   * @param regionName<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>   *         named region is not member of the online regions.<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>   */<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>  }<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span><a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>  public InetSocketAddress[] getRegionBlockLocations(final String encodedRegionName) {<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>    return this.regionFavoredNodesMap.get(encodedRegionName);<a 

<TRUNCATED>

[06/18] hbase-site git commit: Published site at 2a3f4a0a4eb7bb67985050b0e007576c468f217e.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/648c9317/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushQueueEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushQueueEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushQueueEntry.html
index 7f89c08..9ee12ef 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushQueueEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MemStoreFlusher.FlushQueueEntry.html
@@ -29,906 +29,911 @@
 <span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import java.lang.Thread.UncaughtExceptionHandler;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.util.ArrayList;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.ConcurrentModificationException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.HashMap;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.HashSet;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.SortedMap;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.BlockingQueue;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.DelayQueue;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.Delayed;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.ThreadFactory;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.TimeUnit;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.LongAdder;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.concurrent.locks.ReentrantReadWriteLock;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.conf.Configuration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.regionserver.HRegion.FlushResult;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.htrace.core.TraceScope;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.slf4j.Logger;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.slf4j.LoggerFactory;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>/**<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * Thread that flushes cache on request<a name="line.60"></a>
-<span class="sourceLineNo">061</span> *<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * NOTE: This class extends Thread rather than Chore because the sleep time<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * can be interrupted when there is something to do, rather than the Chore<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * sleep time which is invariant.<a name="line.64"></a>
-<span class="sourceLineNo">065</span> *<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * @see FlushRequester<a name="line.66"></a>
-<span class="sourceLineNo">067</span> */<a name="line.67"></a>
-<span class="sourceLineNo">068</span>@InterfaceAudience.Private<a name="line.68"></a>
-<span class="sourceLineNo">069</span>class MemStoreFlusher implements FlushRequester {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private static final Logger LOG = LoggerFactory.getLogger(MemStoreFlusher.class);<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private Configuration conf;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  // These two data members go together.  Any entry in the one must have<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  // a corresponding entry in the other.<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private final BlockingQueue&lt;FlushQueueEntry&gt; flushQueue = new DelayQueue&lt;&gt;();<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private final Map&lt;Region, FlushRegionEntry&gt; regionsInQueue = new HashMap&lt;&gt;();<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private AtomicBoolean wakeupPending = new AtomicBoolean();<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private final long threadWakeFrequency;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private final HRegionServer server;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private final Object blockSignal = new Object();<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  private long blockingWaitTime;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private final LongAdder updatesBlockedMsHighWater = new LongAdder();<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private final FlushHandler[] flushHandlers;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private List&lt;FlushRequestListener&gt; flushRequestListeners = new ArrayList&lt;&gt;(1);<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private FlushType flushType;<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Singleton instance inserted into flush queue used for signaling.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private static final FlushQueueEntry WAKEUPFLUSH_INSTANCE = new FlushQueueEntry() {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    @Override<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public long getDelay(TimeUnit unit) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return 0;<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>    @Override<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public int compareTo(Delayed o) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return -1;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>    @Override<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public boolean equals(Object obj) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      return obj == this;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    @Override<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public int hashCode() {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      return 42;<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">024</span>import java.util.Collection;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.ConcurrentModificationException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.HashMap;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.HashSet;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.SortedMap;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.BlockingQueue;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.DelayQueue;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.Delayed;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.ThreadFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.concurrent.TimeUnit;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.atomic.LongAdder;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.concurrent.locks.ReentrantReadWriteLock;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HConstants;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.regionserver.HRegion.FlushResult;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.htrace.core.TraceScope;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.slf4j.Logger;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.slf4j.LoggerFactory;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>/**<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * Thread that flushes cache on request<a name="line.61"></a>
+<span class="sourceLineNo">062</span> *<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * NOTE: This class extends Thread rather than Chore because the sleep time<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * can be interrupted when there is something to do, rather than the Chore<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * sleep time which is invariant.<a name="line.65"></a>
+<span class="sourceLineNo">066</span> *<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * @see FlushRequester<a name="line.67"></a>
+<span class="sourceLineNo">068</span> */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>@InterfaceAudience.Private<a name="line.69"></a>
+<span class="sourceLineNo">070</span>class MemStoreFlusher implements FlushRequester {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private static final Logger LOG = LoggerFactory.getLogger(MemStoreFlusher.class);<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private Configuration conf;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  // These two data members go together.  Any entry in the one must have<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  // a corresponding entry in the other.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private final BlockingQueue&lt;FlushQueueEntry&gt; flushQueue = new DelayQueue&lt;&gt;();<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private final Map&lt;Region, FlushRegionEntry&gt; regionsInQueue = new HashMap&lt;&gt;();<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private AtomicBoolean wakeupPending = new AtomicBoolean();<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private final long threadWakeFrequency;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private final HRegionServer server;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  private final Object blockSignal = new Object();<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  private long blockingWaitTime;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private final LongAdder updatesBlockedMsHighWater = new LongAdder();<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final FlushHandler[] flushHandlers;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  private List&lt;FlushRequestListener&gt; flushRequestListeners = new ArrayList&lt;&gt;(1);<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private FlushType flushType;<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  /**<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * Singleton instance inserted into flush queue used for signaling.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   */<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private static final FlushQueueEntry WAKEUPFLUSH_INSTANCE = new FlushQueueEntry() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    @Override<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public long getDelay(TimeUnit unit) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      return 0;<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 int compareTo(Delayed o) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      return -1;<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>    @Override<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    public boolean equals(Object obj) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      return obj == this;<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>    @Override<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    public int hashCode() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      return 42;<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>  /**<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @param conf<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param server<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public MemStoreFlusher(final Configuration conf,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      final HRegionServer server) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    super();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    this.conf = conf;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    this.server = server;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    this.threadWakeFrequency =<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        conf.getLong(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    this.blockingWaitTime = conf.getInt("hbase.hstore.blockingWaitTime",<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      90000);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    int handlerCount = conf.getInt("hbase.hstore.flusher.count", 2);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    this.flushHandlers = new FlushHandler[handlerCount];<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    LOG.info("globalMemStoreLimit="<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        + TraditionalBinaryPrefix<a name="line.134"></a>
-<span class="sourceLineNo">135</span>            .long2String(this.server.getRegionServerAccounting().getGlobalMemStoreLimit(), "", 1)<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        + ", globalMemStoreLimitLowMark="<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        + TraditionalBinaryPrefix.long2String(<a name="line.137"></a>
-<span class="sourceLineNo">138</span>          this.server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1)<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        + ", Offheap="<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        + (this.server.getRegionServerAccounting().isOffheap()));<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public LongAdder getUpdatesBlockedMsHighWater() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    return this.updatesBlockedMsHighWater;<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>  public void setFlushType(FlushType flushType) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    this.flushType = flushType;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>  /**<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * The memstore across all regions has exceeded the low water mark. Pick<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * one region to flush and flush it synchronously (this is called from the<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * flush thread)<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * @return true if successful<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  private boolean flushOneForGlobalPressure() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    SortedMap&lt;Long, HRegion&gt; regionsBySize = null;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    switch(flushType) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOffHeapSize();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        break;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      case ABOVE_ONHEAP_LOWER_MARK:<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      default:<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOnHeapSize();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    Set&lt;HRegion&gt; excludedRegions = new HashSet&lt;&gt;();<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    double secondaryMultiplier<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      = ServerRegionReplicaUtil.getRegionReplicaStoreFileRefreshMultiplier(conf);<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>    boolean flushedOne = false;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    while (!flushedOne) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      // Find the biggest region that doesn't have too many storefiles (might be null!)<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      HRegion bestFlushableRegion =<a name="line.177"></a>
-<span class="sourceLineNo">178</span>          getBiggestMemStoreRegion(regionsBySize, excludedRegions, true);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      // Find the biggest region, total, even if it might have too many flushes.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      HRegion bestAnyRegion = getBiggestMemStoreRegion(regionsBySize, excludedRegions, false);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      // Find the biggest region that is a secondary region<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      HRegion bestRegionReplica = getBiggestMemStoreOfRegionReplica(regionsBySize, excludedRegions);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      if (bestAnyRegion == null) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        // If bestAnyRegion is null, assign replica. It may be null too. Next step is check for null<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        bestAnyRegion = bestRegionReplica;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      if (bestAnyRegion == null) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        LOG.error("Above memory mark but there are no flushable regions!");<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        return false;<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>      HRegion regionToFlush;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      long bestAnyRegionSize;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      long bestFlushableRegionSize;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      switch(flushType) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreOffHeapSize();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>          bestFlushableRegionSize = getMemStoreOffHeapSize(bestFlushableRegion);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          break;<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.203"></a>
-<span class="sourceLineNo">204</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreHeapSize();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>          bestFlushableRegionSize = getMemStoreHeapSize(bestFlushableRegion);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>          break;<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>        default:<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreDataSize();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          bestFlushableRegionSize = getMemStoreDataSize(bestFlushableRegion);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      if (bestAnyRegionSize &gt; 2 * bestFlushableRegionSize) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        // Even if it's not supposed to be flushed, pick a region if it's more than twice<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        // as big as the best flushable one - otherwise when we're under pressure we make<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        // lots of little flushes and cause lots of compactions, etc, which just makes<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        // life worse!<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        if (LOG.isDebugEnabled()) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          LOG.debug("Under global heap pressure: " + "Region "<a name="line.218"></a>
-<span class="sourceLineNo">219</span>              + bestAnyRegion.getRegionInfo().getRegionNameAsString()<a name="line.219"></a>
-<span class="sourceLineNo">220</span>              + " has too many " + "store files, but is "<a name="line.220"></a>
-<span class="sourceLineNo">221</span>              + TraditionalBinaryPrefix.long2String(bestAnyRegionSize, "", 1)<a name="line.221"></a>
-<span class="sourceLineNo">222</span>              + " vs best flushable region's "<a name="line.222"></a>
-<span class="sourceLineNo">223</span>              + TraditionalBinaryPrefix.long2String(<a name="line.223"></a>
-<span class="sourceLineNo">224</span>              bestFlushableRegionSize, "", 1)<a name="line.224"></a>
-<span class="sourceLineNo">225</span>              + ". Choosing the bigger.");<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        regionToFlush = bestAnyRegion;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      } else {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        if (bestFlushableRegion == null) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          regionToFlush = bestAnyRegion;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        } else {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          regionToFlush = bestFlushableRegion;<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><a name="line.235"></a>
-<span class="sourceLineNo">236</span>      long regionToFlushSize;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      long bestRegionReplicaSize;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      switch(flushType) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          regionToFlushSize = regionToFlush.getMemStoreOffHeapSize();<a name="line.241"></a>
-<span class="sourceLineNo">242</span>          bestRegionReplicaSize = getMemStoreOffHeapSize(bestRegionReplica);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          break;<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          regionToFlushSize = regionToFlush.getMemStoreHeapSize();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          bestRegionReplicaSize = getMemStoreHeapSize(bestRegionReplica);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          break;<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>        default:<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          regionToFlushSize = regionToFlush.getMemStoreDataSize();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          bestRegionReplicaSize = getMemStoreDataSize(bestRegionReplica);<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>      Preconditions.checkState(<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        (regionToFlush != null &amp;&amp; regionToFlushSize &gt; 0) || bestRegionReplicaSize &gt; 0);<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>      if (regionToFlush == null ||<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          (bestRegionReplica != null &amp;&amp;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>           ServerRegionReplicaUtil.isRegionReplicaStoreFileRefreshEnabled(conf) &amp;&amp;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>           (bestRegionReplicaSize &gt; secondaryMultiplier * regionToFlushSize))) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        LOG.info("Refreshing storefiles of region " + bestRegionReplica +<a name="line.263"></a>
-<span class="sourceLineNo">264</span>            " due to global heap pressure. Total memstore off heap size=" +<a name="line.264"></a>
-<span class="sourceLineNo">265</span>            TraditionalBinaryPrefix.long2String(<a name="line.265"></a>
-<span class="sourceLineNo">266</span>              server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.266"></a>
-<span class="sourceLineNo">267</span>            " memstore heap size=" + TraditionalBinaryPrefix.long2String(<a name="line.267"></a>
-<span class="sourceLineNo">268</span>              server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1));<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        flushedOne = refreshStoreFilesAndReclaimMemory(bestRegionReplica);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        if (!flushedOne) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>          LOG.info("Excluding secondary region " + bestRegionReplica +<a name="line.271"></a>
-<span class="sourceLineNo">272</span>              " - trying to find a different region to refresh files.");<a name="line.272"></a>
-<span class="sourceLineNo">273</span>          excludedRegions.add(bestRegionReplica);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      } else {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        LOG.info("Flush of region " + regionToFlush + " due to global heap pressure. " +<a name="line.276"></a>
-<span class="sourceLineNo">277</span>            "Flush type=" + flushType.toString() +<a name="line.277"></a>
-<span class="sourceLineNo">278</span>            "Total Memstore Heap size=" +<a name="line.278"></a>
-<span class="sourceLineNo">279</span>            TraditionalBinaryPrefix.long2String(<a name="line.279"></a>
-<span class="sourceLineNo">280</span>                server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1) +<a name="line.280"></a>
-<span class="sourceLineNo">281</span>            "Total Memstore Off-Heap size=" +<a name="line.281"></a>
-<span class="sourceLineNo">282</span>            TraditionalBinaryPrefix.long2String(<a name="line.282"></a>
-<span class="sourceLineNo">283</span>                server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.283"></a>
-<span class="sourceLineNo">284</span>            ", Region memstore size=" +<a name="line.284"></a>
-<span class="sourceLineNo">285</span>            TraditionalBinaryPrefix.long2String(regionToFlushSize, "", 1));<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        flushedOne = flushRegion(regionToFlush, true, false, FlushLifeCycleTracker.DUMMY);<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (!flushedOne) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          LOG.info("Excluding unflushable region " + regionToFlush +<a name="line.289"></a>
-<span class="sourceLineNo">290</span>              " - trying to find a different region to flush.");<a name="line.290"></a>
-<span class="sourceLineNo">291</span>          excludedRegions.add(regionToFlush);<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>    }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return true;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  /**<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * @return Return memstore offheap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   */<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  private static long getMemStoreOffHeapSize(HRegion r) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    return r == null? 0: r.getMemStoreOffHeapSize();<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  }<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>   * @return Return memstore heap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   */<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  private static long getMemStoreHeapSize(HRegion r) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    return r == null? 0: r.getMemStoreHeapSize();<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">312</span>  /**<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * @return Return memstore data size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  private static long getMemStoreDataSize(HRegion r) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    return r == null? 0: r.getMemStoreDataSize();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  private class FlushHandler extends HasThread {<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    private FlushHandler(String name) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      super(name);<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>    @Override<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    public void run() {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      while (!server.isStopped()) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        FlushQueueEntry fqe = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        try {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          wakeupPending.set(false); // allow someone to wake us up again<a name="line.330"></a>
-<span class="sourceLineNo">331</span>          fqe = flushQueue.poll(threadWakeFrequency, TimeUnit.MILLISECONDS);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>          if (fqe == null || fqe == WAKEUPFLUSH_INSTANCE) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>            FlushType type = isAboveLowWaterMark();<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            if (type != FlushType.NORMAL) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>              LOG.debug("Flush thread woke up because memory above low water="<a name="line.335"></a>
-<span class="sourceLineNo">336</span>                  + TraditionalBinaryPrefix.long2String(<a name="line.336"></a>
-<span class="sourceLineNo">337</span>                    server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1));<a name="line.337"></a>
-<span class="sourceLineNo">338</span>              // For offheap memstore, even if the lower water mark was breached due to heap overhead<a name="line.338"></a>
-<span class="sourceLineNo">339</span>              // we still select the regions based on the region's memstore data size.<a name="line.339"></a>
-<span class="sourceLineNo">340</span>              // TODO : If we want to decide based on heap over head it can be done without tracking<a name="line.340"></a>
-<span class="sourceLineNo">341</span>              // it per region.<a name="line.341"></a>
-<span class="sourceLineNo">342</span>              if (!flushOneForGlobalPressure()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>                // Wasn't able to flush any region, but we're above low water mark<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                // This is unlikely to happen, but might happen when closing the<a name="line.344"></a>
-<span class="sourceLineNo">345</span>                // entire server - another thread is flushing regions. We'll just<a name="line.345"></a>
-<span class="sourceLineNo">346</span>                // sleep a little bit to avoid spinning, and then pretend that<a name="line.346"></a>
-<span class="sourceLineNo">347</span>                // we flushed one, so anyone blocked will check again<a name="line.347"></a>
-<span class="sourceLineNo">348</span>                Thread.sleep(1000);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>                wakeUpIfBlocking();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>              }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>              // Enqueue another one of these tokens so we'll wake up again<a name="line.351"></a>
-<span class="sourceLineNo">352</span>              wakeupFlushThread();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>            }<a name="line.353"></a>
-<span class="sourceLineNo">354</span>            continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          FlushRegionEntry fre = (FlushRegionEntry) fqe;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>          if (!flushRegion(fre)) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            break;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>          }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        } catch (InterruptedException ex) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          continue;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        } catch (ConcurrentModificationException ex) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          continue;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        } catch (Exception ex) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          LOG.error("Cache flusher failed for entry " + fqe, ex);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (!server.checkFileSystem()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            break;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          }<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      synchronized (regionsInQueue) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        regionsInQueue.clear();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        flushQueue.clear();<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>      // Signal anyone waiting, so they see the close flag<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      wakeUpIfBlocking();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      LOG.info(getName() + " exiting");<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  /**<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @param conf<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param server<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public MemStoreFlusher(final Configuration conf,<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      final HRegionServer server) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    super();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    this.conf = conf;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    this.server = server;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    this.threadWakeFrequency =<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        conf.getLong(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    this.blockingWaitTime = conf.getInt("hbase.hstore.blockingWaitTime",<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      90000);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    int handlerCount = conf.getInt("hbase.hstore.flusher.count", 2);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    this.flushHandlers = new FlushHandler[handlerCount];<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    LOG.info("globalMemStoreLimit="<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        + TraditionalBinaryPrefix<a name="line.135"></a>
+<span class="sourceLineNo">136</span>            .long2String(this.server.getRegionServerAccounting().getGlobalMemStoreLimit(), "", 1)<a name="line.136"></a>
+<span class="sourceLineNo">137</span>        + ", globalMemStoreLimitLowMark="<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        + TraditionalBinaryPrefix.long2String(<a name="line.138"></a>
+<span class="sourceLineNo">139</span>          this.server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1)<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        + ", Offheap="<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        + (this.server.getRegionServerAccounting().isOffheap()));<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>  public LongAdder getUpdatesBlockedMsHighWater() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return this.updatesBlockedMsHighWater;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  public void setFlushType(FlushType flushType) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    this.flushType = flushType;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>  /**<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * The memstore across all regions has exceeded the low water mark. Pick<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * one region to flush and flush it synchronously (this is called from the<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * flush thread)<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return true if successful<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  private boolean flushOneForGlobalPressure() {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; regionsBySize = null;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    switch(flushType) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOffHeapSize();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        break;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      case ABOVE_ONHEAP_LOWER_MARK:<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      default:<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        regionsBySize = server.getCopyOfOnlineRegionsSortedByOnHeapSize();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    Set&lt;HRegion&gt; excludedRegions = new HashSet&lt;&gt;();<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>    double secondaryMultiplier<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      = ServerRegionReplicaUtil.getRegionReplicaStoreFileRefreshMultiplier(conf);<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    boolean flushedOne = false;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    while (!flushedOne) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      // Find the biggest region that doesn't have too many storefiles (might be null!)<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      HRegion bestFlushableRegion =<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          getBiggestMemStoreRegion(regionsBySize, excludedRegions, true);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      // Find the biggest region, total, even if it might have too many flushes.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      HRegion bestAnyRegion = getBiggestMemStoreRegion(regionsBySize, excludedRegions, false);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      // Find the biggest region that is a secondary region<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      HRegion bestRegionReplica = getBiggestMemStoreOfRegionReplica(regionsBySize, excludedRegions);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      if (bestAnyRegion == null) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        // If bestAnyRegion is null, assign replica. It may be null too. Next step is check for null<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        bestAnyRegion = bestRegionReplica;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      }<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      if (bestAnyRegion == null) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        LOG.error("Above memory mark but there are no flushable regions!");<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        return false;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>      HRegion regionToFlush;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      long bestAnyRegionSize;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      long bestFlushableRegionSize;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      switch(flushType) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreOffHeapSize();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          bestFlushableRegionSize = getMemStoreOffHeapSize(bestFlushableRegion);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>          break;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreHeapSize();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          bestFlushableRegionSize = getMemStoreHeapSize(bestFlushableRegion);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>          break;<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>        default:<a name="line.209"></a>
+<span class="sourceLineNo">210</span>          bestAnyRegionSize = bestAnyRegion.getMemStoreDataSize();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          bestFlushableRegionSize = getMemStoreDataSize(bestFlushableRegion);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      if (bestAnyRegionSize &gt; 2 * bestFlushableRegionSize) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        // Even if it's not supposed to be flushed, pick a region if it's more than twice<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        // as big as the best flushable one - otherwise when we're under pressure we make<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        // lots of little flushes and cause lots of compactions, etc, which just makes<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        // life worse!<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        if (LOG.isDebugEnabled()) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          LOG.debug("Under global heap pressure: " + "Region "<a name="line.219"></a>
+<span class="sourceLineNo">220</span>              + bestAnyRegion.getRegionInfo().getRegionNameAsString()<a name="line.220"></a>
+<span class="sourceLineNo">221</span>              + " has too many " + "store files, but is "<a name="line.221"></a>
+<span class="sourceLineNo">222</span>              + TraditionalBinaryPrefix.long2String(bestAnyRegionSize, "", 1)<a name="line.222"></a>
+<span class="sourceLineNo">223</span>              + " vs best flushable region's "<a name="line.223"></a>
+<span class="sourceLineNo">224</span>              + TraditionalBinaryPrefix.long2String(<a name="line.224"></a>
+<span class="sourceLineNo">225</span>              bestFlushableRegionSize, "", 1)<a name="line.225"></a>
+<span class="sourceLineNo">226</span>              + ". Choosing the bigger.");<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        }<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        regionToFlush = bestAnyRegion;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      } else {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        if (bestFlushableRegion == null) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          regionToFlush = bestAnyRegion;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>          regionToFlush = bestFlushableRegion;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        }<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>      long regionToFlushSize;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      long bestRegionReplicaSize;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      switch(flushType) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        case ABOVE_OFFHEAP_HIGHER_MARK:<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        case ABOVE_OFFHEAP_LOWER_MARK:<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          regionToFlushSize = regionToFlush.getMemStoreOffHeapSize();<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          bestRegionReplicaSize = getMemStoreOffHeapSize(bestRegionReplica);<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>        case ABOVE_ONHEAP_HIGHER_MARK:<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        case ABOVE_ONHEAP_LOWER_MARK:<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          regionToFlushSize = regionToFlush.getMemStoreHeapSize();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          bestRegionReplicaSize = getMemStoreHeapSize(bestRegionReplica);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          break;<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>        default:<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          regionToFlushSize = regionToFlush.getMemStoreDataSize();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          bestRegionReplicaSize = getMemStoreDataSize(bestRegionReplica);<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>      Preconditions.checkState(<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        (regionToFlush != null &amp;&amp; regionToFlushSize &gt; 0) || bestRegionReplicaSize &gt; 0);<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>      if (regionToFlush == null ||<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          (bestRegionReplica != null &amp;&amp;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>           ServerRegionReplicaUtil.isRegionReplicaStoreFileRefreshEnabled(conf) &amp;&amp;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>           (bestRegionReplicaSize &gt; secondaryMultiplier * regionToFlushSize))) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        LOG.info("Refreshing storefiles of region " + bestRegionReplica +<a name="line.264"></a>
+<span class="sourceLineNo">265</span>            " due to global heap pressure. Total memstore off heap size=" +<a name="line.265"></a>
+<span class="sourceLineNo">266</span>            TraditionalBinaryPrefix.long2String(<a name="line.266"></a>
+<span class="sourceLineNo">267</span>              server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.267"></a>
+<span class="sourceLineNo">268</span>            " memstore heap size=" + TraditionalBinaryPrefix.long2String(<a name="line.268"></a>
+<span class="sourceLineNo">269</span>              server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1));<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        flushedOne = refreshStoreFilesAndReclaimMemory(bestRegionReplica);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        if (!flushedOne) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          LOG.info("Excluding secondary region " + bestRegionReplica +<a name="line.272"></a>
+<span class="sourceLineNo">273</span>              " - trying to find a different region to refresh files.");<a name="line.273"></a>
+<span class="sourceLineNo">274</span>          excludedRegions.add(bestRegionReplica);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      } else {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        LOG.info("Flush of region " + regionToFlush + " due to global heap pressure. " +<a name="line.277"></a>
+<span class="sourceLineNo">278</span>            "Flush type=" + flushType.toString() +<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            "Total Memstore Heap size=" +<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            TraditionalBinaryPrefix.long2String(<a name="line.280"></a>
+<span class="sourceLineNo">281</span>                server.getRegionServerAccounting().getGlobalMemStoreHeapSize(), "", 1) +<a name="line.281"></a>
+<span class="sourceLineNo">282</span>            "Total Memstore Off-Heap size=" +<a name="line.282"></a>
+<span class="sourceLineNo">283</span>            TraditionalBinaryPrefix.long2String(<a name="line.283"></a>
+<span class="sourceLineNo">284</span>                server.getRegionServerAccounting().getGlobalMemStoreOffHeapSize(), "", 1) +<a name="line.284"></a>
+<span class="sourceLineNo">285</span>            ", Region memstore size=" +<a name="line.285"></a>
+<span class="sourceLineNo">286</span>            TraditionalBinaryPrefix.long2String(regionToFlushSize, "", 1));<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        flushedOne = flushRegion(regionToFlush, true, false, FlushLifeCycleTracker.DUMMY);<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>        if (!flushedOne) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          LOG.info("Excluding unflushable region " + regionToFlush +<a name="line.290"></a>
+<span class="sourceLineNo">291</span>              " - trying to find a different region to flush.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          excludedRegions.add(regionToFlush);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        }<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>    return true;<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>  /**<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @return Return memstore offheap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   */<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  private static long getMemStoreOffHeapSize(HRegion r) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    return r == null? 0: r.getMemStoreOffHeapSize();<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>   * @return Return memstore heap size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   */<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  private static long getMemStoreHeapSize(HRegion r) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    return r == null? 0: r.getMemStoreHeapSize();<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  }<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>   * @return Return memstore data size or null if &lt;code&gt;r&lt;/code&gt; is null<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  private static long getMemStoreDataSize(HRegion r) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    return r == null? 0: r.getMemStoreDataSize();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  private class FlushHandler extends HasThread {<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    private FlushHandler(String name) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      super(name);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>    @Override<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    public void run() {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      while (!server.isStopped()) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        FlushQueueEntry fqe = null;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>          wakeupPending.set(false); // allow someone to wake us up again<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          fqe = flushQueue.poll(threadWakeFrequency, TimeUnit.MILLISECONDS);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          if (fqe == null || fqe == WAKEUPFLUSH_INSTANCE) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            FlushType type = isAboveLowWaterMark();<a name="line.334"></a>
+<span class="sourceLineNo">335</span>            if (type != FlushType.NORMAL) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>              LOG.debug("Flush thread woke up because memory above low water="<a name="line.336"></a>
+<span class="sourceLineNo">337</span>                  + TraditionalBinaryPrefix.long2String(<a name="line.337"></a>
+<span class="sourceLineNo">338</span>                    server.getRegionServerAccounting().getGlobalMemStoreLimitLowMark(), "", 1));<a name="line.338"></a>
+<span class="sourceLineNo">339</span>              // For offheap memstore, even if the lower water mark was breached due to heap overhead<a name="line.339"></a>
+<span class="sourceLineNo">340</span>              // we still select the regions based on the region's memstore data size.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>              // TODO : If we want to decide based on heap over head it can be done without tracking<a name="line.341"></a>
+<span class="sourceLineNo">342</span>              // it per region.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              if (!flushOneForGlobalPressure()) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                // Wasn't able to flush any region, but we're above low water mark<a name="line.344"></a>
+<span class="sourceLineNo">345</span>                // This is unlikely to happen, but might happen when closing the<a name="line.345"></a>
+<span class="sourceLineNo">346</span>                // entire server - another thread is flushing regions. We'll just<a name="line.346"></a>
+<span class="sourceLineNo">347</span>                // sleep a little bit to avoid spinning, and then pretend that<a name="line.347"></a>
+<span class="sourceLineNo">348</span>                // we flushed one, so anyone blocked will check again<a name="line.348"></a>
+<span class="sourceLineNo">349</span>                Thread.sleep(1000);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                wakeUpIfBlocking();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>              }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>              // Enqueue another one of these tokens so we'll wake up again<a name="line.352"></a>
+<span class="sourceLineNo">353</span>              wakeupFlushThread();<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            }<a name="line.354"></a>
+<span class="sourceLineNo">355</span>            continue;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          FlushRegionEntry fre = (FlushRegionEntry) fqe;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          if (!flushRegion(fre)) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>            break;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        } catch (InterruptedException ex) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>          continue;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        } catch (ConcurrentModificationException ex) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>          continue;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        } catch (Exception ex) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>          LOG.error("Cache flusher failed for entry " + fqe, ex);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          if (!server.checkFileSystem()) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>            break;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      synchronized (regionsInQueue) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        regionsInQueue.clear();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        flushQueue.clear();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>      // Signal anyone waiting, so they see the close flag<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      wakeUpIfBlocking();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      LOG.info(getName() + " exiting");<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    }<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
 <span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private void wakeupFlushThread() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    if (wakeupPending.compareAndSet(false, true)) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      flushQueue.add(WAKEUPFLUSH_INSTANCE);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  private HRegion getBiggestMemStoreRegion(<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      SortedMap&lt;Long, HRegion&gt; regionsBySize,<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      Set&lt;HRegion&gt; excludedRegions,<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      boolean checkStoreFileCount) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    synchronized (regionsInQueue) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      for (HRegion region : regionsBySize.values()) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (excludedRegions.contains(region)) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          continue;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        }<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>        if (region.writestate.flushing || !region.writestate.writesEnabled) {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>          continue;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>        if (checkStoreFileCount &amp;&amp; isTooManyStoreFiles(region)) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          continue;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        return region;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      }<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return null;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  private HRegion getBiggestMemStoreOfRegionReplica(SortedMap&lt;Long, HRegion&gt; regionsBySize,<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      Set&lt;HRegion&gt; excludedRegions) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    synchronized (regionsInQueue) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      for (HRegion region : regionsBySize.values()) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        if (excludedRegions.contains(region)) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          continue;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>        if (RegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          continue;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>        return region;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    }<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    return null;<a name="line.427"></a>
-<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>  private boolean refreshStoreFilesAndReclaimMemory(Region region) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    try {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      return region.refreshStoreFiles();<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    } catch (IOException e) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      LOG.warn("Refreshing store files failed with exception", e);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    return false;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
-<span class="sourceLineNo">438</span><a name="line.438"></a>
-<span class="sourceLineNo">439</span>  /**<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * Return true if global memory usage is above the high watermark<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   */<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private FlushType isAboveHighWaterMark() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return server.getRegionServerAccounting().isAboveHighWaterMark();<a name="line.443"></a>
-<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>  /**<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * Return true if we're above the low watermark<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private FlushType isAboveLowWaterMark() {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    return server.getRegionServerAccounting().isAboveLowWaterMark();<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>  @Override<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  public void requestFlush(HRegion r, boolean forceFlushAllStores, FlushLifeCycleTracker tracker) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    r.incrementFlushesQueuedCount();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    synchronized (regionsInQueue) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      if (!regionsInQueue.containsKey(r)) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        // This entry has no delay so it will be added at the top of the flush<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        // queue. It'll come out near immediately.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        FlushRegionEntry fqe = new FlushRegionEntry(r, forceFlushAllStores, tracker);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        this.regionsInQueue.put(r, fqe);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        this.flushQueue.add(fqe);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      } else {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        tracker.notExecuted("Flush already requested on " + r);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  @Override<a name="line.469"></a>
-<span class="sourceLineNo">470</span>  public void requestDelayedFlush(HRegion r, long delay, boolean forceFlushAllStores) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    r.incrementFlushesQueuedCount();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    synchronized (regionsInQueue) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      if (!regionsInQueue.containsKey(r)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        // This entry has some delay<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        FlushRegionEntry fqe =<a name="line.475"></a>
-<span class="sourceLineNo">476</span>            new FlushRegionEntry(r, forceFlushAllStores, FlushLifeCycleTracker.DUMMY);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        fqe.requeue(delay);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        this.regionsInQueue.put(r, fqe);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        this.flushQueue.add(fqe);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      }<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>  public int getFlushQueueSize() {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    return flushQueue.size();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  }<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>   * Only interrupt once it's done with a run through the work loop.<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   */<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  void interruptIfNecessary() {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    lock.writeLock().lock();<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    try {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      for (FlushHandler flushHander : flushHandlers) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        if (flushHander != null) flushHander.interrupt();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    } finally {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      lock.writeLock().unlock();<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><a name="line.501"></a>
-<span class="sourceLineNo">502</span>  synchronized void start(UncaughtExceptionHandler eh) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    ThreadFactory flusherThreadFactory = Threads.newDaemonThreadFactory(<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        server.getServerName().toShortString() + "-MemStoreFlusher", eh);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    for (int i = 0; i &lt; flushHandlers.length; i++) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      flushHandlers[i] = new FlushHandler("MemStoreFlusher." + i);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      flusherThreadFactory.newThread(flushHandlers[i]);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      flushHandlers[i].start();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>  }<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>  boolean isAlive() {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    for (FlushHandler flushHander : flushHandlers) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      if (flushHander != null &amp;&amp; flushHander.isAlive()) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return true;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    return false;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>  }<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>  void join() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    for (FlushHandler flushHander : flushHandlers) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      if (flushHander != null) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        Threads.shutdown(flushHander.getThread());<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>  /**<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * A flushRegion that checks store file count.  If too many, puts the flush<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * on delay queue to retry later.<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * @param fqe<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * @return true if the region was successfully flushed, false otherwise. If<a name="line.533"></a>
-<span class="sourceLineNo">534</span>   * false, there will be accompanying log messages explaining why the region was<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   * not flushed.<a name="line.535"></a>
-<span class="sourceLineNo">536</span>   */<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  private boolean flushRegion(final FlushRegionEntry fqe) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    HRegion region = fqe.region;<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    if (!region.getRegionInfo().isMetaRegion() &amp;&amp; isTooManyStoreFiles(region)) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (fqe.isMaximumWait(this.blockingWaitTime)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.info("Waited " + (EnvironmentEdgeManager.currentTime() - fqe.createTime) +<a name="line.541"></a>
-<span class="sourceLineNo">542</span>          "ms on a compaction to clean up 'too many store files'; waited " +<a name="line.542"></a>
-<span class="sourceLineNo">543</span>          "long enough... proceeding with flush of " +<a name="line.543"></a>
-<span class="sourceLineNo">544</span>          region.getRegionInfo().getRegionNameAsString());<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      } else {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>        // If this is first time we've been put off, then emit a log message.<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        if (fqe.getRequeueCount() &lt;= 0) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>          // Note: We don't impose blockingStoreFiles constraint on meta regions<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          LOG.warn("Region " + region.getRegionInfo().getEncodedName() + " has too many " +<a name="line.549"></a>
-<span class="sourceLineNo">550</span>            "store files; delaying flush up to " + this.blockingWaitTime + "ms");<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          if (!this.server.compactSplitThread.requestSplit(region)) {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>            try {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>              this.server.compactSplitThread.requestSystemCompaction(region,<a name="line.553"></a>
-<span class="sourceLineNo">554</span>                Thread.currentThread().getName());<a name="line.554"></a>
-<span class="sourceLineNo">555</span>            } catch (IOException e) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>              e = e instanceof RemoteException ?<a name="line.556"></a>
-<span class="sourceLineNo">557</span>                      ((RemoteException)e).unwrapRemoteException() : e;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>              LOG.error("Cache flush failed for region " +<a name="line.558"></a>
-<span class="sourceLineNo">559</span>                Bytes.toStringBinary(region.getRegionInfo().getRegionName()), e);<a name="line.559"></a>
-<span class="sourceLineNo">560</span>            }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>          }<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        }<a name="line.562"></a>
-<span c

<TRUNCATED>