<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
<span class="sourceLineNo">017</span> */<a name="line.17"></a>
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.master;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
<span class="sourceLineNo">021</span>import edu.umd.cs.findbugs.annotations.Nullable;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.io.UnsupportedEncodingException;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.nio.charset.StandardCharsets;<a name="line.23"></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.Map;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.util.Set;<a name="line.27"></a>
<span class="sourceLineNo">028</span><a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.hadoop.conf.Configuration;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.RegionMetrics;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.ServerName;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Size;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.TableName;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.UserMetrics;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.CompactionState;<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.RegionStatesCount;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.ReplicationLoadSink;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.ReplicationLoadSource;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<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.junit.After;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import org.junit.Before;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import org.junit.ClassRule;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import org.junit.Test;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import org.junit.experimental.categories.Category;<a name="line.53"></a>
<span class="sourceLineNo">054</span>import org.mockito.Mockito;<a name="line.54"></a>
<span class="sourceLineNo">055</span>import org.slf4j.Logger;<a name="line.55"></a>
<span class="sourceLineNo">056</span>import org.slf4j.LoggerFactory;<a name="line.56"></a>
<span class="sourceLineNo">057</span><a name="line.57"></a>
<span class="sourceLineNo">058</span>/**<a name="line.58"></a>
<span class="sourceLineNo">059</span> * Test for RegionsRecoveryChore<a name="line.59"></a>
<span class="sourceLineNo">060</span> */<a name="line.60"></a>
<span class="sourceLineNo">061</span>@Category({MasterTests.class, SmallTests.class})<a name="line.61"></a>
<span class="sourceLineNo">062</span>public class TestRegionsRecoveryChore {<a name="line.62"></a>
<span class="sourceLineNo">063</span><a name="line.63"></a>
<span class="sourceLineNo">064</span>  @ClassRule<a name="line.64"></a>
<span class="sourceLineNo">065</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.65"></a>
<span class="sourceLineNo">066</span>    HBaseClassTestRule.forClass(TestRegionsRecoveryChore.class);<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
<span class="sourceLineNo">068</span>  private static final Logger LOG = LoggerFactory.getLogger(TestRegionsRecoveryChore.class);<a name="line.68"></a>
<span class="sourceLineNo">069</span><a name="line.69"></a>
<span class="sourceLineNo">070</span>  private static final HBaseTestingUtility HBASE_TESTING_UTILITY = new HBaseTestingUtility();<a name="line.70"></a>
<span class="sourceLineNo">071</span><a name="line.71"></a>
<span class="sourceLineNo">072</span>  private static final String UTF_8_CHARSET = StandardCharsets.UTF_8.name();<a name="line.72"></a>
<span class="sourceLineNo">073</span><a name="line.73"></a>
<span class="sourceLineNo">074</span>  private HMaster hMaster;<a name="line.74"></a>
<span class="sourceLineNo">075</span><a name="line.75"></a>
<span class="sourceLineNo">076</span>  private AssignmentManager assignmentManager;<a name="line.76"></a>
<span class="sourceLineNo">077</span><a name="line.77"></a>
<span class="sourceLineNo">078</span>  private RegionsRecoveryChore regionsRecoveryChore;<a name="line.78"></a>
<span class="sourceLineNo">079</span><a name="line.79"></a>
<span class="sourceLineNo">080</span>  private static int regionNo;<a name="line.80"></a>
<span class="sourceLineNo">081</span>  public static final byte[][] REGION_NAME_LIST = new byte[][]{<a name="line.81"></a>
<span class="sourceLineNo">082</span>    new byte[]{114, 101, 103, 105, 111, 110, 50, 49, 95, 51},<a name="line.82"></a>
<span class="sourceLineNo">083</span>    new byte[]{114, 101, 103, 105, 111, 110, 50, 53, 95, 51},<a name="line.83"></a>
<span class="sourceLineNo">084</span>    new byte[]{114, 101, 103, 105, 111, 110, 50, 54, 95, 52},<a name="line.84"></a>
<span class="sourceLineNo">085</span>    new byte[]{114, 101, 103, 105, 111, 110, 51, 50, 95, 53},<a name="line.85"></a>
<span class="sourceLineNo">086</span>    new byte[]{114, 101, 103, 105, 111, 110, 51, 49, 95, 52},<a name="line.86"></a>
<span class="sourceLineNo">087</span>    new byte[]{114, 101, 103, 105, 111, 110, 51, 48, 95, 51},<a name="line.87"></a>
<span class="sourceLineNo">088</span>    new byte[]{114, 101, 103, 105, 111, 110, 50, 48, 95, 50},<a name="line.88"></a>
<span class="sourceLineNo">089</span>    new byte[]{114, 101, 103, 105, 111, 110, 50, 52, 95, 50},<a name="line.89"></a>
<span class="sourceLineNo">090</span>    new byte[]{114, 101, 103, 105, 111, 110, 50, 57, 95, 50},<a name="line.90"></a>
<span class="sourceLineNo">091</span>    new byte[]{114, 101, 103, 105, 111, 110, 51, 53, 95, 50},<a name="line.91"></a>
<span class="sourceLineNo">092</span>    new byte[]{114, 101, 103, 105, 111, 110, 49, 48, 56, 95, 49, 49}<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>  private Configuration getCustomConf() {<a name="line.95"></a>
<span class="sourceLineNo">096</span>    Configuration conf = HBASE_TESTING_UTILITY.getConfiguration();<a name="line.96"></a>
<span class="sourceLineNo">097</span>    conf.setInt("hbase.master.regions.recovery.check.interval", 100);<a name="line.97"></a>
<span class="sourceLineNo">098</span>    return conf;<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>  @Before<a name="line.101"></a>
<span class="sourceLineNo">102</span>  public void setUp() throws Exception {<a name="line.102"></a>
<span class="sourceLineNo">103</span>    this.hMaster = Mockito.mock(HMaster.class);<a name="line.103"></a>
<span class="sourceLineNo">104</span>    this.assignmentManager = Mockito.mock(AssignmentManager.class);<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>  @After<a name="line.107"></a>
<span class="sourceLineNo">108</span>  public void tearDown() throws Exception {<a name="line.108"></a>
<span class="sourceLineNo">109</span>    Mockito.verifyNoMoreInteractions(this.hMaster);<a name="line.109"></a>
<span class="sourceLineNo">110</span>    Mockito.verifyNoMoreInteractions(this.assignmentManager);<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>  @Test<a name="line.113"></a>
<span class="sourceLineNo">114</span>  public void testRegionReopensWithStoreRefConfig() throws Exception {<a name="line.114"></a>
<span class="sourceLineNo">115</span>    regionNo = 0;<a name="line.115"></a>
<span class="sourceLineNo">116</span>    ClusterMetrics clusterMetrics = TestRegionsRecoveryChore.getClusterMetrics(4);<a name="line.116"></a>
<span class="sourceLineNo">117</span>    final Map&lt;ServerName, ServerMetrics&gt; serverMetricsMap =<a name="line.117"></a>
<span class="sourceLineNo">118</span>      clusterMetrics.getLiveServerMetrics();<a name="line.118"></a>
<span class="sourceLineNo">119</span>    LOG.debug("All Region Names with refCount....");<a name="line.119"></a>
<span class="sourceLineNo">120</span>    for (ServerMetrics serverMetrics : serverMetricsMap.values()) {<a name="line.120"></a>
<span class="sourceLineNo">121</span>      Map&lt;byte[], RegionMetrics&gt; regionMetricsMap = serverMetrics.getRegionMetrics();<a name="line.121"></a>
<span class="sourceLineNo">122</span>      for (RegionMetrics regionMetrics : regionMetricsMap.values()) {<a name="line.122"></a>
<span class="sourceLineNo">123</span>        LOG.debug("name: " + new String(regionMetrics.getRegionName()) + " refCount: " +<a name="line.123"></a>
<span class="sourceLineNo">124</span>          regionMetrics.getStoreRefCount());<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>    Mockito.when(hMaster.getClusterMetrics()).thenReturn(clusterMetrics);<a name="line.127"></a>
<span class="sourceLineNo">128</span>    Mockito.when(hMaster.getAssignmentManager()).thenReturn(assignmentManager);<a name="line.128"></a>
<span class="sourceLineNo">129</span>    for (byte[] regionName : REGION_NAME_LIST) {<a name="line.129"></a>
<span class="sourceLineNo">130</span>      Mockito.when(assignmentManager.getRegionInfo(regionName))<a name="line.130"></a>
<span class="sourceLineNo">131</span>        .thenReturn(TestRegionsRecoveryChore.getRegionInfo(regionName));<a name="line.131"></a>
<span class="sourceLineNo">132</span>    }<a name="line.132"></a>
<span class="sourceLineNo">133</span>    Stoppable stoppable = new StoppableImplementation();<a name="line.133"></a>
<span class="sourceLineNo">134</span>    Configuration configuration = getCustomConf();<a name="line.134"></a>
<span class="sourceLineNo">135</span>    configuration.setInt("hbase.regions.recovery.store.file.ref.count", 300);<a name="line.135"></a>
<span class="sourceLineNo">136</span>    regionsRecoveryChore = new RegionsRecoveryChore(stoppable, configuration, hMaster);<a name="line.136"></a>
<span class="sourceLineNo">137</span>    regionsRecoveryChore.chore();<a name="line.137"></a>
<span class="sourceLineNo">138</span><a name="line.138"></a>
<span class="sourceLineNo">139</span>    // Verify that we need to reopen regions of 2 tables<a name="line.139"></a>
<span class="sourceLineNo">140</span>    Mockito.verify(hMaster, Mockito.times(2)).reopenRegions(Mockito.any(), Mockito.anyList(),<a name="line.140"></a>
<span class="sourceLineNo">141</span>      Mockito.anyLong(), Mockito.anyLong());<a name="line.141"></a>
<span class="sourceLineNo">142</span>    Mockito.verify(hMaster, Mockito.times(1)).getClusterMetrics();<a name="line.142"></a>
<span class="sourceLineNo">143</span><a name="line.143"></a>
<span class="sourceLineNo">144</span>    // Verify that we need to reopen total 3 regions that have refCount &gt; 300<a name="line.144"></a>
<span class="sourceLineNo">145</span>    Mockito.verify(hMaster, Mockito.times(3)).getAssignmentManager();<a name="line.145"></a>
<span class="sourceLineNo">146</span>    Mockito.verify(assignmentManager, Mockito.times(3))<a name="line.146"></a>
<span class="sourceLineNo">147</span>      .getRegionInfo(Mockito.any());<a name="line.147"></a>
<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
<span class="sourceLineNo">149</span><a name="line.149"></a>
<span class="sourceLineNo">150</span>  @Test<a name="line.150"></a>
<span class="sourceLineNo">151</span>  public void testRegionReopensWithLessThreshold() throws Exception {<a name="line.151"></a>
<span class="sourceLineNo">152</span>    regionNo = 0;<a name="line.152"></a>
<span class="sourceLineNo">153</span>    ClusterMetrics clusterMetrics = TestRegionsRecoveryChore.getClusterMetrics(4);<a name="line.153"></a>
<span class="sourceLineNo">154</span>    final Map&lt;ServerName, ServerMetrics&gt; serverMetricsMap =<a name="line.154"></a>
<span class="sourceLineNo">155</span>      clusterMetrics.getLiveServerMetrics();<a name="line.155"></a>
<span class="sourceLineNo">156</span>    LOG.debug("All Region Names with refCount....");<a name="line.156"></a>
<span class="sourceLineNo">157</span>    for (ServerMetrics serverMetrics : serverMetricsMap.values()) {<a name="line.157"></a>
<span class="sourceLineNo">158</span>      Map&lt;byte[], RegionMetrics&gt; regionMetricsMap = serverMetrics.getRegionMetrics();<a name="line.158"></a>
<span class="sourceLineNo">159</span>      for (RegionMetrics regionMetrics : regionMetricsMap.values()) {<a name="line.159"></a>
<span class="sourceLineNo">160</span>        LOG.debug("name: " + new String(regionMetrics.getRegionName()) + " refCount: " +<a name="line.160"></a>
<span class="sourceLineNo">161</span>          regionMetrics.getStoreRefCount());<a name="line.161"></a>
<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
<span class="sourceLineNo">164</span>    Mockito.when(hMaster.getClusterMetrics()).thenReturn(clusterMetrics);<a name="line.164"></a>
<span class="sourceLineNo">165</span>    Mockito.when(hMaster.getAssignmentManager()).thenReturn(assignmentManager);<a name="line.165"></a>
<span class="sourceLineNo">166</span>    for (byte[] regionName : REGION_NAME_LIST) {<a name="line.166"></a>
<span class="sourceLineNo">167</span>      Mockito.when(assignmentManager.getRegionInfo(regionName))<a name="line.167"></a>
<span class="sourceLineNo">168</span>        .thenReturn(TestRegionsRecoveryChore.getRegionInfo(regionName));<a name="line.168"></a>
<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
<span class="sourceLineNo">170</span>    Stoppable stoppable = new StoppableImplementation();<a name="line.170"></a>
<span class="sourceLineNo">171</span>    Configuration configuration = getCustomConf();<a name="line.171"></a>
<span class="sourceLineNo">172</span>    configuration.setInt("hbase.regions.recovery.store.file.ref.count", 400);<a name="line.172"></a>
<span class="sourceLineNo">173</span>    regionsRecoveryChore = new RegionsRecoveryChore(stoppable, configuration, hMaster);<a name="line.173"></a>
<span class="sourceLineNo">174</span>    regionsRecoveryChore.chore();<a name="line.174"></a>
<span class="sourceLineNo">175</span><a name="line.175"></a>
<span class="sourceLineNo">176</span>    // Verify that we need to reopen regions of only 1 table<a name="line.176"></a>
<span class="sourceLineNo">177</span>    Mockito.verify(hMaster, Mockito.times(1)).reopenRegions(Mockito.any(), Mockito.anyList(),<a name="line.177"></a>
<span class="sourceLineNo">178</span>      Mockito.anyLong(), Mockito.anyLong());<a name="line.178"></a>
<span class="sourceLineNo">179</span>    Mockito.verify(hMaster, Mockito.times(1)).getClusterMetrics();<a name="line.179"></a>
<span class="sourceLineNo">180</span><a name="line.180"></a>
<span class="sourceLineNo">181</span>    // Verify that we need to reopen only 1 region with refCount &gt; 400<a name="line.181"></a>
<span class="sourceLineNo">182</span>    Mockito.verify(hMaster, Mockito.times(1)).getAssignmentManager();<a name="line.182"></a>
<span class="sourceLineNo">183</span>    Mockito.verify(assignmentManager, Mockito.times(1))<a name="line.183"></a>
<span class="sourceLineNo">184</span>      .getRegionInfo(Mockito.any());<a name="line.184"></a>
<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
<span class="sourceLineNo">186</span><a name="line.186"></a>
<span class="sourceLineNo">187</span>  @Test<a name="line.187"></a>
<span class="sourceLineNo">188</span>  public void testRegionReopensWithoutStoreRefConfig() throws Exception {<a name="line.188"></a>
<span class="sourceLineNo">189</span>    regionNo = 0;<a name="line.189"></a>
<span class="sourceLineNo">190</span>    ClusterMetrics clusterMetrics = TestRegionsRecoveryChore.getClusterMetrics(10);<a name="line.190"></a>
<span class="sourceLineNo">191</span>    final Map&lt;ServerName, ServerMetrics&gt; serverMetricsMap =<a name="line.191"></a>
<span class="sourceLineNo">192</span>      clusterMetrics.getLiveServerMetrics();<a name="line.192"></a>
<span class="sourceLineNo">193</span>    LOG.debug("All Region Names with refCount....");<a name="line.193"></a>
<span class="sourceLineNo">194</span>    for (ServerMetrics serverMetrics : serverMetricsMap.values()) {<a name="line.194"></a>
<span class="sourceLineNo">195</span>      Map&lt;byte[], RegionMetrics&gt; regionMetricsMap = serverMetrics.getRegionMetrics();<a name="line.195"></a>
<span class="sourceLineNo">196</span>      for (RegionMetrics regionMetrics : regionMetricsMap.values()) {<a name="line.196"></a>
<span class="sourceLineNo">197</span>        LOG.debug("name: " + new String(regionMetrics.getRegionName()) + " refCount: " +<a name="line.197"></a>
<span class="sourceLineNo">198</span>          regionMetrics.getStoreRefCount());<a name="line.198"></a>
<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
<span class="sourceLineNo">201</span>    Mockito.when(hMaster.getClusterMetrics()).thenReturn(clusterMetrics);<a name="line.201"></a>
<span class="sourceLineNo">202</span>    Mockito.when(hMaster.getAssignmentManager()).thenReturn(assignmentManager);<a name="line.202"></a>
<span class="sourceLineNo">203</span>    for (byte[] regionName : REGION_NAME_LIST) {<a name="line.203"></a>
<span class="sourceLineNo">204</span>      Mockito.when(assignmentManager.getRegionInfo(regionName))<a name="line.204"></a>
<span class="sourceLineNo">205</span>        .thenReturn(TestRegionsRecoveryChore.getRegionInfo(regionName));<a name="line.205"></a>
<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
<span class="sourceLineNo">207</span>    Stoppable stoppable = new StoppableImplementation();<a name="line.207"></a>
<span class="sourceLineNo">208</span>    Configuration configuration = getCustomConf();<a name="line.208"></a>
<span class="sourceLineNo">209</span>    configuration.unset("hbase.regions.recovery.store.file.ref.count");<a name="line.209"></a>
<span class="sourceLineNo">210</span>    regionsRecoveryChore = new RegionsRecoveryChore(stoppable, configuration, hMaster);<a name="line.210"></a>
<span class="sourceLineNo">211</span>    regionsRecoveryChore.chore();<a name="line.211"></a>
<span class="sourceLineNo">212</span><a name="line.212"></a>
<span class="sourceLineNo">213</span>    // Verify that by default the feature is turned off so no regions<a name="line.213"></a>
<span class="sourceLineNo">214</span>    // should be reopened<a name="line.214"></a>
<span class="sourceLineNo">215</span>    Mockito.verify(hMaster, Mockito.times(0)).reopenRegions(Mockito.any(), Mockito.anyList(),<a name="line.215"></a>
<span class="sourceLineNo">216</span>      Mockito.anyLong(), Mockito.anyLong());<a name="line.216"></a>
<span class="sourceLineNo">217</span><a name="line.217"></a>
<span class="sourceLineNo">218</span>    // default maxCompactedStoreFileRefCount is -1 (no regions to be reopened using AM)<a name="line.218"></a>
<span class="sourceLineNo">219</span>    Mockito.verify(hMaster, Mockito.times(0)).getAssignmentManager();<a name="line.219"></a>
<span class="sourceLineNo">220</span>    Mockito.verify(assignmentManager, Mockito.times(0))<a name="line.220"></a>
<span class="sourceLineNo">221</span>      .getRegionInfo(Mockito.any());<a name="line.221"></a>
<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
<span class="sourceLineNo">223</span><a name="line.223"></a>
<span class="sourceLineNo">224</span>  private static ClusterMetrics getClusterMetrics(int noOfLiveServer) {<a name="line.224"></a>
<span class="sourceLineNo">225</span>    ClusterMetrics clusterMetrics = new ClusterMetrics() {<a name="line.225"></a>
<span class="sourceLineNo">226</span><a name="line.226"></a>
<span class="sourceLineNo">227</span>      @Nullable<a name="line.227"></a>
<span class="sourceLineNo">228</span>      @Override<a name="line.228"></a>
<span class="sourceLineNo">229</span>      public String getHBaseVersion() {<a name="line.229"></a>
<span class="sourceLineNo">230</span>        return null;<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>      @Override<a name="line.233"></a>
<span class="sourceLineNo">234</span>      public List&lt;ServerName&gt; getDeadServerNames() {<a name="line.234"></a>
<span class="sourceLineNo">235</span>        return null;<a name="line.235"></a>
<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
<span class="sourceLineNo">237</span><a name="line.237"></a>
<span class="sourceLineNo">238</span>      @Override<a name="line.238"></a>
<span class="sourceLineNo">239</span>      public Map&lt;ServerName, ServerMetrics&gt; getLiveServerMetrics() {<a name="line.239"></a>
<span class="sourceLineNo">240</span>        Map&lt;ServerName, ServerMetrics&gt; liveServerMetrics = new HashMap&lt;&gt;();<a name="line.240"></a>
<span class="sourceLineNo">241</span>        for (int i = 0; i &lt; noOfLiveServer; i++) {<a name="line.241"></a>
<span class="sourceLineNo">242</span>          ServerName serverName = ServerName.valueOf("rs_" + i, 16010, 12345);<a name="line.242"></a>
<span class="sourceLineNo">243</span>          liveServerMetrics.put(serverName, TestRegionsRecoveryChore.getServerMetrics(i + 3));<a name="line.243"></a>
<span class="sourceLineNo">244</span>        }<a name="line.244"></a>
<span class="sourceLineNo">245</span>        return liveServerMetrics;<a name="line.245"></a>
<span class="sourceLineNo">246</span>      }<a name="line.246"></a>
<span class="sourceLineNo">247</span><a name="line.247"></a>
<span class="sourceLineNo">248</span>      @Nullable<a name="line.248"></a>
<span class="sourceLineNo">249</span>      @Override<a name="line.249"></a>
<span class="sourceLineNo">250</span>      public ServerName getMasterName() {<a name="line.250"></a>
<span class="sourceLineNo">251</span>        return null;<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>      @Override<a name="line.254"></a>
<span class="sourceLineNo">255</span>      public List&lt;ServerName&gt; getBackupMasterNames() {<a name="line.255"></a>
<span class="sourceLineNo">256</span>        return null;<a name="line.256"></a>
<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
<span class="sourceLineNo">258</span><a name="line.258"></a>
<span class="sourceLineNo">259</span>      @Override<a name="line.259"></a>
<span class="sourceLineNo">260</span>      public List&lt;RegionState&gt; getRegionStatesInTransition() {<a name="line.260"></a>
<span class="sourceLineNo">261</span>        return null;<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>      @Nullable<a name="line.264"></a>
<span class="sourceLineNo">265</span>      @Override<a name="line.265"></a>
<span class="sourceLineNo">266</span>      public String getClusterId() {<a name="line.266"></a>
<span class="sourceLineNo">267</span>        return null;<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>      @Override<a name="line.270"></a>
<span class="sourceLineNo">271</span>      public List&lt;String&gt; getMasterCoprocessorNames() {<a name="line.271"></a>
<span class="sourceLineNo">272</span>        return null;<a name="line.272"></a>
<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
<span class="sourceLineNo">274</span><a name="line.274"></a>
<span class="sourceLineNo">275</span>      @Nullable<a name="line.275"></a>
<span class="sourceLineNo">276</span>      @Override<a name="line.276"></a>
<span class="sourceLineNo">277</span>      public Boolean getBalancerOn() {<a name="line.277"></a>
<span class="sourceLineNo">278</span>        return null;<a name="line.278"></a>
<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
<span class="sourceLineNo">280</span><a name="line.280"></a>
<span class="sourceLineNo">281</span>      @Override<a name="line.281"></a>
<span class="sourceLineNo">282</span>      public int getMasterInfoPort() {<a name="line.282"></a>
<span class="sourceLineNo">283</span>        return 0;<a name="line.283"></a>
<span class="sourceLineNo">284</span>      }<a name="line.284"></a>
<span class="sourceLineNo">285</span><a name="line.285"></a>
<span class="sourceLineNo">286</span>      @Override<a name="line.286"></a>
<span class="sourceLineNo">287</span>      public List&lt;ServerName&gt; getServersName() {<a name="line.287"></a>
<span class="sourceLineNo">288</span>        return null;<a name="line.288"></a>
<span class="sourceLineNo">289</span>      }<a name="line.289"></a>
<span class="sourceLineNo">290</span><a name="line.290"></a>
<span class="sourceLineNo">291</span>      @Override<a name="line.291"></a>
<span class="sourceLineNo">292</span>      public Map&lt;TableName, RegionStatesCount&gt; getTableRegionStatesCount() {<a name="line.292"></a>
<span class="sourceLineNo">293</span>        return null;<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>    };<a name="line.296"></a>
<span class="sourceLineNo">297</span>    return clusterMetrics;<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>  private static ServerMetrics getServerMetrics(int noOfRegions) {<a name="line.300"></a>
<span class="sourceLineNo">301</span>    ServerMetrics serverMetrics = new ServerMetrics() {<a name="line.301"></a>
<span class="sourceLineNo">302</span><a name="line.302"></a>
<span class="sourceLineNo">303</span>      @Override<a name="line.303"></a>
<span class="sourceLineNo">304</span>      public ServerName getServerName() {<a name="line.304"></a>
<span class="sourceLineNo">305</span>        return null;<a name="line.305"></a>
<span class="sourceLineNo">306</span>      }<a name="line.306"></a>
<span class="sourceLineNo">307</span><a name="line.307"></a>
<span class="sourceLineNo">308</span>      @Override<a name="line.308"></a>
<span class="sourceLineNo">309</span>      public long getRequestCountPerSecond() {<a name="line.309"></a>
<span class="sourceLineNo">310</span>        return 0;<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>      @Override<a name="line.313"></a>
<span class="sourceLineNo">314</span>      public long getRequestCount() {<a name="line.314"></a>
<span class="sourceLineNo">315</span>        return 0;<a name="line.315"></a>
<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
<span class="sourceLineNo">317</span><a name="line.317"></a>
<span class="sourceLineNo">318</span>      @Override<a name="line.318"></a>
<span class="sourceLineNo">319</span>      public Size getUsedHeapSize() {<a name="line.319"></a>
<span class="sourceLineNo">320</span>        return null;<a name="line.320"></a>
<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
<span class="sourceLineNo">322</span><a name="line.322"></a>
<span class="sourceLineNo">323</span>      @Override<a name="line.323"></a>
<span class="sourceLineNo">324</span>      public Size getMaxHeapSize() {<a name="line.324"></a>
<span class="sourceLineNo">325</span>        return null;<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>      @Override<a name="line.328"></a>
<span class="sourceLineNo">329</span>      public int getInfoServerPort() {<a name="line.329"></a>
<span class="sourceLineNo">330</span>        return 0;<a name="line.330"></a>
<span class="sourceLineNo">331</span>      }<a name="line.331"></a>
<span class="sourceLineNo">332</span><a name="line.332"></a>
<span class="sourceLineNo">333</span>      @Override<a name="line.333"></a>
<span class="sourceLineNo">334</span>      public List&lt;ReplicationLoadSource&gt; getReplicationLoadSourceList() {<a name="line.334"></a>
<span class="sourceLineNo">335</span>        return null;<a name="line.335"></a>
<span class="sourceLineNo">336</span>      }<a name="line.336"></a>
<span class="sourceLineNo">337</span><a name="line.337"></a>
<span class="sourceLineNo">338</span>      @Override<a name="line.338"></a>
<span class="sourceLineNo">339</span>      public Map&lt;String, List&lt;ReplicationLoadSource&gt;&gt; getReplicationLoadSourceMap() {<a name="line.339"></a>
<span class="sourceLineNo">340</span>        return null;<a name="line.340"></a>
<span class="sourceLineNo">341</span>      }<a name="line.341"></a>
<span class="sourceLineNo">342</span><a name="line.342"></a>
<span class="sourceLineNo">343</span>      @Nullable<a name="line.343"></a>
<span class="sourceLineNo">344</span>      @Override<a name="line.344"></a>
<span class="sourceLineNo">345</span>      public ReplicationLoadSink getReplicationLoadSink() {<a name="line.345"></a>
<span class="sourceLineNo">346</span>        return null;<a name="line.346"></a>
<span class="sourceLineNo">347</span>      }<a name="line.347"></a>
<span class="sourceLineNo">348</span><a name="line.348"></a>
<span class="sourceLineNo">349</span>      @Override<a name="line.349"></a>
<span class="sourceLineNo">350</span>      public Map&lt;byte[], RegionMetrics&gt; getRegionMetrics() {<a name="line.350"></a>
<span class="sourceLineNo">351</span>        Map&lt;byte[], RegionMetrics&gt; regionMetricsMap = new HashMap&lt;&gt;();<a name="line.351"></a>
<span class="sourceLineNo">352</span>        for (int i = 0; i &lt; noOfRegions; i++) {<a name="line.352"></a>
<span class="sourceLineNo">353</span>          byte[] regionName = Bytes.toBytes("region" + regionNo + "_" + i);<a name="line.353"></a>
<span class="sourceLineNo">354</span>          regionMetricsMap.put(regionName,<a name="line.354"></a>
<span class="sourceLineNo">355</span>            TestRegionsRecoveryChore.getRegionMetrics(regionName, 100 * i));<a name="line.355"></a>
<span class="sourceLineNo">356</span>          ++regionNo;<a name="line.356"></a>
<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
<span class="sourceLineNo">358</span>        return regionMetricsMap;<a name="line.358"></a>
<span class="sourceLineNo">359</span>      }<a name="line.359"></a>
<span class="sourceLineNo">360</span><a name="line.360"></a>
<span class="sourceLineNo">361</span>      @Override public Map&lt;byte[], UserMetrics&gt; getUserMetrics() {<a name="line.361"></a>
<span class="sourceLineNo">362</span>        return new HashMap&lt;&gt;();<a name="line.362"></a>
<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
<span class="sourceLineNo">364</span><a name="line.364"></a>
<span class="sourceLineNo">365</span>      @Override<a name="line.365"></a>
<span class="sourceLineNo">366</span>      public Set&lt;String&gt; getCoprocessorNames() {<a name="line.366"></a>
<span class="sourceLineNo">367</span>        return null;<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>      @Override<a name="line.370"></a>
<span class="sourceLineNo">371</span>      public long getReportTimestamp() {<a name="line.371"></a>
<span class="sourceLineNo">372</span>        return 0;<a name="line.372"></a>
<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
<span class="sourceLineNo">374</span><a name="line.374"></a>
<span class="sourceLineNo">375</span>      @Override<a name="line.375"></a>
<span class="sourceLineNo">376</span>      public long getLastReportTimestamp() {<a name="line.376"></a>
<span class="sourceLineNo">377</span>        return 0;<a name="line.377"></a>
<span class="sourceLineNo">378</span>      }<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>    return serverMetrics;<a name="line.381"></a>
<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
<span class="sourceLineNo">383</span><a name="line.383"></a>
<span class="sourceLineNo">384</span>  private static RegionMetrics getRegionMetrics(byte[] regionName, int compactedStoreRefCount) {<a name="line.384"></a>
<span class="sourceLineNo">385</span>    RegionMetrics regionMetrics = new RegionMetrics() {<a name="line.385"></a>
<span class="sourceLineNo">386</span><a name="line.386"></a>
<span class="sourceLineNo">387</span>      @Override<a name="line.387"></a>
<span class="sourceLineNo">388</span>      public byte[] getRegionName() {<a name="line.388"></a>
<span class="sourceLineNo">389</span>        return regionName;<a name="line.389"></a>
<span class="sourceLineNo">390</span>      }<a name="line.390"></a>
<span class="sourceLineNo">391</span><a name="line.391"></a>
<span class="sourceLineNo">392</span>      @Override<a name="line.392"></a>
<span class="sourceLineNo">393</span>      public int getStoreCount() {<a name="line.393"></a>
<span class="sourceLineNo">394</span>        return 0;<a name="line.394"></a>
<span class="sourceLineNo">395</span>      }<a name="line.395"></a>
<span class="sourceLineNo">396</span><a name="line.396"></a>
<span class="sourceLineNo">397</span>      @Override<a name="line.397"></a>
<span class="sourceLineNo">398</span>      public int getStoreFileCount() {<a name="line.398"></a>
<span class="sourceLineNo">399</span>        return 0;<a name="line.399"></a>
<span class="sourceLineNo">400</span>      }<a name="line.400"></a>
<span class="sourceLineNo">401</span><a name="line.401"></a>
<span class="sourceLineNo">402</span>      @Override<a name="line.402"></a>
<span class="sourceLineNo">403</span>      public Size getStoreFileSize() {<a name="line.403"></a>
<span class="sourceLineNo">404</span>        return null;<a name="line.404"></a>
<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
<span class="sourceLineNo">406</span><a name="line.406"></a>
<span class="sourceLineNo">407</span>      @Override<a name="line.407"></a>
<span class="sourceLineNo">408</span>      public Size getMemStoreSize() {<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>      @Override<a name="line.412"></a>
<span class="sourceLineNo">413</span>      public long getReadRequestCount() {<a name="line.413"></a>
<span class="sourceLineNo">414</span>        return 0;<a name="line.414"></a>
<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
<span class="sourceLineNo">416</span><a name="line.416"></a>
<span class="sourceLineNo">417</span>      @Override<a name="line.417"></a>
<span class="sourceLineNo">418</span>      public long getWriteRequestCount() {<a name="line.418"></a>
<span class="sourceLineNo">419</span>        return 0;<a name="line.419"></a>
<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
<span class="sourceLineNo">421</span><a name="line.421"></a>
<span class="sourceLineNo">422</span>      @Override<a name="line.422"></a>
<span class="sourceLineNo">423</span>      public long getCpRequestCount() {<a name="line.423"></a>
<span class="sourceLineNo">424</span>        return 0;<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>      @Override<a name="line.427"></a>
<span class="sourceLineNo">428</span>      public long getFilteredReadRequestCount() {<a name="line.428"></a>
<span class="sourceLineNo">429</span>        return 0;<a name="line.429"></a>
<span class="sourceLineNo">430</span>      }<a name="line.430"></a>
<span class="sourceLineNo">431</span><a name="line.431"></a>
<span class="sourceLineNo">432</span>      @Override<a name="line.432"></a>
<span class="sourceLineNo">433</span>      public Size getStoreFileIndexSize() {<a name="line.433"></a>
<span class="sourceLineNo">434</span>        return null;<a name="line.434"></a>
<span class="sourceLineNo">435</span>      }<a name="line.435"></a>
<span class="sourceLineNo">436</span><a name="line.436"></a>
<span class="sourceLineNo">437</span>      @Override<a name="line.437"></a>
<span class="sourceLineNo">438</span>      public Size getStoreFileRootLevelIndexSize() {<a name="line.438"></a>
<span class="sourceLineNo">439</span>        return null;<a name="line.439"></a>
<span class="sourceLineNo">440</span>      }<a name="line.440"></a>
<span class="sourceLineNo">441</span><a name="line.441"></a>
<span class="sourceLineNo">442</span>      @Override<a name="line.442"></a>
<span class="sourceLineNo">443</span>      public Size getStoreFileUncompressedDataIndexSize() {<a name="line.443"></a>
<span class="sourceLineNo">444</span>        return null;<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>      @Override<a name="line.447"></a>
<span class="sourceLineNo">448</span>      public Size getBloomFilterSize() {<a name="line.448"></a>
<span class="sourceLineNo">449</span>        return null;<a name="line.449"></a>
<span class="sourceLineNo">450</span>      }<a name="line.450"></a>
<span class="sourceLineNo">451</span><a name="line.451"></a>
<span class="sourceLineNo">452</span>      @Override<a name="line.452"></a>
<span class="sourceLineNo">453</span>      public long getCompactingCellCount() {<a name="line.453"></a>
<span class="sourceLineNo">454</span>        return 0;<a name="line.454"></a>
<span class="sourceLineNo">455</span>      }<a name="line.455"></a>
<span class="sourceLineNo">456</span><a name="line.456"></a>
<span class="sourceLineNo">457</span>      @Override<a name="line.457"></a>
<span class="sourceLineNo">458</span>      public long getCompactedCellCount() {<a name="line.458"></a>
<span class="sourceLineNo">459</span>        return 0;<a name="line.459"></a>
<span class="sourceLineNo">460</span>      }<a name="line.460"></a>
<span class="sourceLineNo">461</span><a name="line.461"></a>
<span class="sourceLineNo">462</span>      @Override<a name="line.462"></a>
<span class="sourceLineNo">463</span>      public long getCompletedSequenceId() {<a name="line.463"></a>
<span class="sourceLineNo">464</span>        return 0;<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>      @Override<a name="line.467"></a>
<span class="sourceLineNo">468</span>      public Map&lt;byte[], Long&gt; getStoreSequenceId() {<a name="line.468"></a>
<span class="sourceLineNo">469</span>        return null;<a name="line.469"></a>
<span class="sourceLineNo">470</span>      }<a name="line.470"></a>
<span class="sourceLineNo">471</span><a name="line.471"></a>
<span class="sourceLineNo">472</span>      @Override<a name="line.472"></a>
<span class="sourceLineNo">473</span>      public Size getUncompressedStoreFileSize() {<a name="line.473"></a>
<span class="sourceLineNo">474</span>        return null;<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>      @Override<a name="line.477"></a>
<span class="sourceLineNo">478</span>      public float getDataLocality() {<a name="line.478"></a>
<span class="sourceLineNo">479</span>        return 0;<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>      @Override<a name="line.482"></a>
<span class="sourceLineNo">483</span>      public long getLastMajorCompactionTimestamp() {<a name="line.483"></a>
<span class="sourceLineNo">484</span>        return 0;<a name="line.484"></a>
<span class="sourceLineNo">485</span>      }<a name="line.485"></a>
<span class="sourceLineNo">486</span><a name="line.486"></a>
<span class="sourceLineNo">487</span>      @Override<a name="line.487"></a>
<span class="sourceLineNo">488</span>      public int getStoreRefCount() {<a name="line.488"></a>
<span class="sourceLineNo">489</span>        return compactedStoreRefCount;<a name="line.489"></a>
<span class="sourceLineNo">490</span>      }<a name="line.490"></a>
<span class="sourceLineNo">491</span><a name="line.491"></a>
<span class="sourceLineNo">492</span>      @Override<a name="line.492"></a>
<span class="sourceLineNo">493</span>      public int getMaxCompactedStoreFileRefCount() {<a name="line.493"></a>
<span class="sourceLineNo">494</span>        return compactedStoreRefCount;<a name="line.494"></a>
<span class="sourceLineNo">495</span>      }<a name="line.495"></a>
<span class="sourceLineNo">496</span><a name="line.496"></a>
<span class="sourceLineNo">497</span>      @Override<a name="line.497"></a>
<span class="sourceLineNo">498</span>      public float getDataLocalityForSsd() {<a name="line.498"></a>
<span class="sourceLineNo">499</span>        return 0;<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>      @Override<a name="line.502"></a>
<span class="sourceLineNo">503</span>      public long getBlocksLocalWeight() {<a name="line.503"></a>
<span class="sourceLineNo">504</span>        return 0;<a name="line.504"></a>
<span class="sourceLineNo">505</span>      }<a name="line.505"></a>
<span class="sourceLineNo">506</span><a name="line.506"></a>
<span class="sourceLineNo">507</span>      @Override<a name="line.507"></a>
<span class="sourceLineNo">508</span>      public long getBlocksLocalWithSsdWeight() {<a name="line.508"></a>
<span class="sourceLineNo">509</span>        return 0;<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>      @Override<a name="line.512"></a>
<span class="sourceLineNo">513</span>      public long getBlocksTotalWeight() {<a name="line.513"></a>
<span class="sourceLineNo">514</span>        return 0;<a name="line.514"></a>
<span class="sourceLineNo">515</span>      }<a name="line.515"></a>
<span class="sourceLineNo">516</span><a name="line.516"></a>
<span class="sourceLineNo">517</span>      @Override<a name="line.517"></a>
<span class="sourceLineNo">518</span>      public CompactionState getCompactionState() {<a name="line.518"></a>
<span class="sourceLineNo">519</span>        return null;<a name="line.519"></a>
<span class="sourceLineNo">520</span>      }<a name="line.520"></a>
<span class="sourceLineNo">521</span>    };<a name="line.521"></a>
<span class="sourceLineNo">522</span>    return regionMetrics;<a name="line.522"></a>
<span class="sourceLineNo">523</span>  }<a name="line.523"></a>
<span class="sourceLineNo">524</span><a name="line.524"></a>
<span class="sourceLineNo">525</span>  private static RegionInfo getRegionInfo(byte[] regionNameBytes) {<a name="line.525"></a>
<span class="sourceLineNo">526</span>    RegionInfo regionInfo = new RegionInfo() {<a name="line.526"></a>
<span class="sourceLineNo">527</span><a name="line.527"></a>
<span class="sourceLineNo">528</span>      @Override<a name="line.528"></a>
<span class="sourceLineNo">529</span>      public String getShortNameToLog() {<a name="line.529"></a>
<span class="sourceLineNo">530</span>        return null;<a name="line.530"></a>
<span class="sourceLineNo">531</span>      }<a name="line.531"></a>
<span class="sourceLineNo">532</span><a name="line.532"></a>
<span class="sourceLineNo">533</span>      @Override<a name="line.533"></a>
<span class="sourceLineNo">534</span>      public long getRegionId() {<a name="line.534"></a>
<span class="sourceLineNo">535</span>        return 0;<a name="line.535"></a>
<span class="sourceLineNo">536</span>      }<a name="line.536"></a>
<span class="sourceLineNo">537</span><a name="line.537"></a>
<span class="sourceLineNo">538</span>      @Override<a name="line.538"></a>
<span class="sourceLineNo">539</span>      public byte[] getRegionName() {<a name="line.539"></a>
<span class="sourceLineNo">540</span>        return new byte[0];<a name="line.540"></a>
<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
<span class="sourceLineNo">542</span><a name="line.542"></a>
<span class="sourceLineNo">543</span>      @Override<a name="line.543"></a>
<span class="sourceLineNo">544</span>      public String getRegionNameAsString() {<a name="line.544"></a>
<span class="sourceLineNo">545</span>        try {<a name="line.545"></a>
<span class="sourceLineNo">546</span>          return new String(regionNameBytes, UTF_8_CHARSET);<a name="line.546"></a>
<span class="sourceLineNo">547</span>        } catch (UnsupportedEncodingException e) {<a name="line.547"></a>
<span class="sourceLineNo">548</span>          return "";<a name="line.548"></a>
<span class="sourceLineNo">549</span>        }<a name="line.549"></a>
<span class="sourceLineNo">550</span>      }<a name="line.550"></a>
<span class="sourceLineNo">551</span><a name="line.551"></a>
<span class="sourceLineNo">552</span>      @Override<a name="line.552"></a>
<span class="sourceLineNo">553</span>      public String getEncodedName() {<a name="line.553"></a>
<span class="sourceLineNo">554</span>        return null;<a name="line.554"></a>
<span class="sourceLineNo">555</span>      }<a name="line.555"></a>
<span class="sourceLineNo">556</span><a name="line.556"></a>
<span class="sourceLineNo">557</span>      @Override<a name="line.557"></a>
<span class="sourceLineNo">558</span>      public byte[] getEncodedNameAsBytes() {<a name="line.558"></a>
<span class="sourceLineNo">559</span>        return new byte[0];<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>      @Override<a name="line.562"></a>
<span class="sourceLineNo">563</span>      public byte[] getStartKey() {<a name="line.563"></a>
<span class="sourceLineNo">564</span>        return new byte[0];<a name="line.564"></a>
<span class="sourceLineNo">565</span>      }<a name="line.565"></a>
<span class="sourceLineNo">566</span><a name="line.566"></a>
<span class="sourceLineNo">567</span>      @Override<a name="line.567"></a>
<span class="sourceLineNo">568</span>      public byte[] getEndKey() {<a name="line.568"></a>
<span class="sourceLineNo">569</span>        return new byte[0];<a name="line.569"></a>
<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
<span class="sourceLineNo">571</span><a name="line.571"></a>
<span class="sourceLineNo">572</span>      @Override<a name="line.572"></a>
<span class="sourceLineNo">573</span>      public TableName getTable() {<a name="line.573"></a>
<span class="sourceLineNo">574</span>        String regionName;<a name="line.574"></a>
<span class="sourceLineNo">575</span>        try {<a name="line.575"></a>
<span class="sourceLineNo">576</span>          regionName = new String(regionNameBytes, UTF_8_CHARSET);<a name="line.576"></a>
<span class="sourceLineNo">577</span>        } catch (UnsupportedEncodingException e) {<a name="line.577"></a>
<span class="sourceLineNo">578</span>          regionName = "";<a name="line.578"></a>
<span class="sourceLineNo">579</span>        }<a name="line.579"></a>
<span class="sourceLineNo">580</span>        int regionNo = Integer.parseInt(regionName.split("_")[1]);<a name="line.580"></a>
<span class="sourceLineNo">581</span>        TableName tableName = TableName.valueOf("table_" + regionNo % 3);<a name="line.581"></a>
<span class="sourceLineNo">582</span>        return tableName;<a name="line.582"></a>
<span class="sourceLineNo">583</span>      }<a name="line.583"></a>
<span class="sourceLineNo">584</span><a name="line.584"></a>
<span class="sourceLineNo">585</span>      @Override<a name="line.585"></a>
<span class="sourceLineNo">586</span>      public int getReplicaId() {<a name="line.586"></a>
<span class="sourceLineNo">587</span>        return 0;<a name="line.587"></a>
<span class="sourceLineNo">588</span>      }<a name="line.588"></a>
<span class="sourceLineNo">589</span><a name="line.589"></a>
<span class="sourceLineNo">590</span>      @Override<a name="line.590"></a>
<span class="sourceLineNo">591</span>      public boolean isSplit() {<a name="line.591"></a>
<span class="sourceLineNo">592</span>        return false;<a name="line.592"></a>
<span class="sourceLineNo">593</span>      }<a name="line.593"></a>
<span class="sourceLineNo">594</span><a name="line.594"></a>
<span class="sourceLineNo">595</span>      @Override<a name="line.595"></a>
<span class="sourceLineNo">596</span>      public boolean isOffline() {<a name="line.596"></a>
<span class="sourceLineNo">597</span>        return false;<a name="line.597"></a>
<span class="sourceLineNo">598</span>      }<a name="line.598"></a>
<span class="sourceLineNo">599</span><a name="line.599"></a>
<span class="sourceLineNo">600</span>      @Override<a name="line.600"></a>
<span class="sourceLineNo">601</span>      public boolean isSplitParent() {<a name="line.601"></a>
<span class="sourceLineNo">602</span>        return false;<a name="line.602"></a>
<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
<span class="sourceLineNo">604</span><a name="line.604"></a>
<span class="sourceLineNo">605</span>      @Override<a name="line.605"></a>
<span class="sourceLineNo">606</span>      public boolean isMetaRegion() {<a name="line.606"></a>
<span class="sourceLineNo">607</span>        return false;<a name="line.607"></a>
<span class="sourceLineNo">608</span>      }<a name="line.608"></a>
<span class="sourceLineNo">609</span><a name="line.609"></a>
<span class="sourceLineNo">610</span>      @Override<a name="line.610"></a>
<span class="sourceLineNo">611</span>      public boolean containsRange(byte[] rangeStartKey, byte[] rangeEndKey) {<a name="line.611"></a>
<span class="sourceLineNo">612</span>        return false;<a name="line.612"></a>
<span class="sourceLineNo">613</span>      }<a name="line.613"></a>
<span class="sourceLineNo">614</span><a name="line.614"></a>
<span class="sourceLineNo">615</span>      @Override<a name="line.615"></a>
<span class="sourceLineNo">616</span>      public boolean containsRow(byte[] row) {<a name="line.616"></a>
<span class="sourceLineNo">617</span>        return false;<a name="line.617"></a>
<span class="sourceLineNo">618</span>      }<a name="line.618"></a>
<span class="sourceLineNo">619</span><a name="line.619"></a>
<span class="sourceLineNo">620</span>    };<a name="line.620"></a>
<span class="sourceLineNo">621</span>    return regionInfo;<a name="line.621"></a>
<span class="sourceLineNo">622</span>  }<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>   * Simple helper class that just keeps track of whether or not its stopped.<a name="line.625"></a>
<span class="sourceLineNo">626</span>   */<a name="line.626"></a>
<span class="sourceLineNo">627</span>  private static class StoppableImplementation implements Stoppable {<a name="line.627"></a>
<span class="sourceLineNo">628</span><a name="line.628"></a>
<span class="sourceLineNo">629</span>    private volatile boolean stop = false;<a name="line.629"></a>
<span class="sourceLineNo">630</span><a name="line.630"></a>
<span class="sourceLineNo">631</span>    @Override<a name="line.631"></a>
<span class="sourceLineNo">632</span>    public void stop(String why) {<a name="line.632"></a>
<span class="sourceLineNo">633</span>      this.stop = true;<a name="line.633"></a>
<span class="sourceLineNo">634</span>    }<a name="line.634"></a>
<span class="sourceLineNo">635</span><a name="line.635"></a>
<span class="sourceLineNo">636</span>    @Override<a name="line.636"></a>
<span class="sourceLineNo">637</span>    public boolean isStopped() {<a name="line.637"></a>
<span class="sourceLineNo">638</span>      return this.stop;<a name="line.638"></a>
<span class="sourceLineNo">639</span>    }<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>}<a name="line.643"></a>




























































</pre>
</div>
</body>
</html>
