<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>Source code</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="source: package: org.apache.hadoop.hbase, class: SingleProcessHBaseCluster, class: MiniHBaseClusterRegionServer">
<meta name="generator" content="javadoc/SourceToHTMLConverter">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body class="source-page">
<main role="main">
<div class="source-container">
<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
<span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one</span>
<span class="source-line-no">003</span><span id="line-3"> * or more contributor license agreements.  See the NOTICE file</span>
<span class="source-line-no">004</span><span id="line-4"> * distributed with this work for additional information</span>
<span class="source-line-no">005</span><span id="line-5"> * regarding copyright ownership.  The ASF licenses this file</span>
<span class="source-line-no">006</span><span id="line-6"> * to you under the Apache License, Version 2.0 (the</span>
<span class="source-line-no">007</span><span id="line-7"> * "License"); you may not use this file except in compliance</span>
<span class="source-line-no">008</span><span id="line-8"> * with the License.  You may obtain a copy of the License at</span>
<span class="source-line-no">009</span><span id="line-9"> *</span>
<span class="source-line-no">010</span><span id="line-10"> *     http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="source-line-no">011</span><span id="line-11"> *</span>
<span class="source-line-no">012</span><span id="line-12"> * Unless required by applicable law or agreed to in writing, software</span>
<span class="source-line-no">013</span><span id="line-13"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
<span class="source-line-no">014</span><span id="line-14"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="source-line-no">015</span><span id="line-15"> * See the License for the specific language governing permissions and</span>
<span class="source-line-no">016</span><span id="line-16"> * limitations under the License.</span>
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
<span class="source-line-no">020</span><span id="line-20">import java.io.IOException;</span>
<span class="source-line-no">021</span><span id="line-21">import java.security.PrivilegedAction;</span>
<span class="source-line-no">022</span><span id="line-22">import java.util.ArrayList;</span>
<span class="source-line-no">023</span><span id="line-23">import java.util.HashSet;</span>
<span class="source-line-no">024</span><span id="line-24">import java.util.List;</span>
<span class="source-line-no">025</span><span id="line-25">import java.util.Set;</span>
<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.conf.Configuration;</span>
<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.fs.FileSystem;</span>
<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.client.RegionInfoBuilder;</span>
<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.client.RegionReplicaUtil;</span>
<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.master.HMaster;</span>
<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.regionserver.HRegion.FlushResult;</span>
<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.regionserver.HRegionServer;</span>
<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.regionserver.Region;</span>
<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.security.User;</span>
<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.test.MetricsAssertHelper;</span>
<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.util.JVMClusterUtil;</span>
<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.util.JVMClusterUtil.MasterThread;</span>
<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;</span>
<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.util.Threads;</span>
<span class="source-line-no">042</span><span id="line-42">import org.apache.yetus.audience.InterfaceAudience;</span>
<span class="source-line-no">043</span><span id="line-43">import org.apache.yetus.audience.InterfaceStability;</span>
<span class="source-line-no">044</span><span id="line-44">import org.slf4j.Logger;</span>
<span class="source-line-no">045</span><span id="line-45">import org.slf4j.LoggerFactory;</span>
<span class="source-line-no">046</span><span id="line-46"></span>
<span class="source-line-no">047</span><span id="line-47">import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse;</span>
<span class="source-line-no">048</span><span id="line-48"></span>
<span class="source-line-no">049</span><span id="line-49">/**</span>
<span class="source-line-no">050</span><span id="line-50"> * This class creates a single process HBase cluster. each server. The master uses the 'default'</span>
<span class="source-line-no">051</span><span id="line-51"> * FileSystem. The RegionServers, if we are running on DistributedFilesystem, create a FileSystem</span>
<span class="source-line-no">052</span><span id="line-52"> * instance each and will close down their instance on the way out.</span>
<span class="source-line-no">053</span><span id="line-53"> */</span>
<span class="source-line-no">054</span><span id="line-54">@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.PHOENIX)</span>
<span class="source-line-no">055</span><span id="line-55">@InterfaceStability.Evolving</span>
<span class="source-line-no">056</span><span id="line-56">public class SingleProcessHBaseCluster extends HBaseClusterInterface {</span>
<span class="source-line-no">057</span><span id="line-57">  private static final Logger LOG =</span>
<span class="source-line-no">058</span><span id="line-58">    LoggerFactory.getLogger(SingleProcessHBaseCluster.class.getName());</span>
<span class="source-line-no">059</span><span id="line-59">  public LocalHBaseCluster hbaseCluster;</span>
<span class="source-line-no">060</span><span id="line-60">  private static int index;</span>
<span class="source-line-no">061</span><span id="line-61"></span>
<span class="source-line-no">062</span><span id="line-62">  /**</span>
<span class="source-line-no">063</span><span id="line-63">   * Start a MiniHBaseCluster.</span>
<span class="source-line-no">064</span><span id="line-64">   * @param conf             Configuration to be used for cluster</span>
<span class="source-line-no">065</span><span id="line-65">   * @param numRegionServers initial number of region servers to start.</span>
<span class="source-line-no">066</span><span id="line-66">   */</span>
<span class="source-line-no">067</span><span id="line-67">  public SingleProcessHBaseCluster(Configuration conf, int numRegionServers)</span>
<span class="source-line-no">068</span><span id="line-68">    throws IOException, InterruptedException {</span>
<span class="source-line-no">069</span><span id="line-69">    this(conf, 1, numRegionServers);</span>
<span class="source-line-no">070</span><span id="line-70">  }</span>
<span class="source-line-no">071</span><span id="line-71"></span>
<span class="source-line-no">072</span><span id="line-72">  /**</span>
<span class="source-line-no">073</span><span id="line-73">   * Start a MiniHBaseCluster.</span>
<span class="source-line-no">074</span><span id="line-74">   * @param conf             Configuration to be used for cluster</span>
<span class="source-line-no">075</span><span id="line-75">   * @param numMasters       initial number of masters to start.</span>
<span class="source-line-no">076</span><span id="line-76">   * @param numRegionServers initial number of region servers to start.</span>
<span class="source-line-no">077</span><span id="line-77">   */</span>
<span class="source-line-no">078</span><span id="line-78">  public SingleProcessHBaseCluster(Configuration conf, int numMasters, int numRegionServers)</span>
<span class="source-line-no">079</span><span id="line-79">    throws IOException, InterruptedException {</span>
<span class="source-line-no">080</span><span id="line-80">    this(conf, numMasters, numRegionServers, null, null);</span>
<span class="source-line-no">081</span><span id="line-81">  }</span>
<span class="source-line-no">082</span><span id="line-82"></span>
<span class="source-line-no">083</span><span id="line-83">  /**</span>
<span class="source-line-no">084</span><span id="line-84">   * Start a MiniHBaseCluster.</span>
<span class="source-line-no">085</span><span id="line-85">   * @param conf             Configuration to be used for cluster</span>
<span class="source-line-no">086</span><span id="line-86">   * @param numMasters       initial number of masters to start.</span>
<span class="source-line-no">087</span><span id="line-87">   * @param numRegionServers initial number of region servers to start.</span>
<span class="source-line-no">088</span><span id="line-88">   */</span>
<span class="source-line-no">089</span><span id="line-89">  public SingleProcessHBaseCluster(Configuration conf, int numMasters, int numRegionServers,</span>
<span class="source-line-no">090</span><span id="line-90">    Class&lt;? extends HMaster&gt; masterClass,</span>
<span class="source-line-no">091</span><span id="line-91">    Class&lt;? extends SingleProcessHBaseCluster.MiniHBaseClusterRegionServer&gt; regionserverClass)</span>
<span class="source-line-no">092</span><span id="line-92">    throws IOException, InterruptedException {</span>
<span class="source-line-no">093</span><span id="line-93">    this(conf, numMasters, 0, numRegionServers, null, masterClass, regionserverClass);</span>
<span class="source-line-no">094</span><span id="line-94">  }</span>
<span class="source-line-no">095</span><span id="line-95"></span>
<span class="source-line-no">096</span><span id="line-96">  /**</span>
<span class="source-line-no">097</span><span id="line-97">   * @param rsPorts Ports that RegionServer should use; pass ports if you want to test cluster</span>
<span class="source-line-no">098</span><span id="line-98">   *                restart where for sure the regionservers come up on same address+port (but just</span>
<span class="source-line-no">099</span><span id="line-99">   *                with different startcode); by default mini hbase clusters choose new arbitrary</span>
<span class="source-line-no">100</span><span id="line-100">   *                ports on each cluster start.</span>
<span class="source-line-no">101</span><span id="line-101">   */</span>
<span class="source-line-no">102</span><span id="line-102">  public SingleProcessHBaseCluster(Configuration conf, int numMasters, int numAlwaysStandByMasters,</span>
<span class="source-line-no">103</span><span id="line-103">    int numRegionServers, List&lt;Integer&gt; rsPorts, Class&lt;? extends HMaster&gt; masterClass,</span>
<span class="source-line-no">104</span><span id="line-104">    Class&lt;? extends SingleProcessHBaseCluster.MiniHBaseClusterRegionServer&gt; regionserverClass)</span>
<span class="source-line-no">105</span><span id="line-105">    throws IOException, InterruptedException {</span>
<span class="source-line-no">106</span><span id="line-106">    super(conf);</span>
<span class="source-line-no">107</span><span id="line-107"></span>
<span class="source-line-no">108</span><span id="line-108">    // Hadoop 2</span>
<span class="source-line-no">109</span><span id="line-109">    CompatibilityFactory.getInstance(MetricsAssertHelper.class).init();</span>
<span class="source-line-no">110</span><span id="line-110"></span>
<span class="source-line-no">111</span><span id="line-111">    init(numMasters, numAlwaysStandByMasters, numRegionServers, rsPorts, masterClass,</span>
<span class="source-line-no">112</span><span id="line-112">      regionserverClass);</span>
<span class="source-line-no">113</span><span id="line-113">    this.initialClusterStatus = getClusterMetrics();</span>
<span class="source-line-no">114</span><span id="line-114">  }</span>
<span class="source-line-no">115</span><span id="line-115"></span>
<span class="source-line-no">116</span><span id="line-116">  public Configuration getConfiguration() {</span>
<span class="source-line-no">117</span><span id="line-117">    return this.conf;</span>
<span class="source-line-no">118</span><span id="line-118">  }</span>
<span class="source-line-no">119</span><span id="line-119"></span>
<span class="source-line-no">120</span><span id="line-120">  /**</span>
<span class="source-line-no">121</span><span id="line-121">   * Subclass so can get at protected methods (none at moment). Also, creates a FileSystem instance</span>
<span class="source-line-no">122</span><span id="line-122">   * per instantiation. Adds a shutdown own FileSystem on the way out. Shuts down own Filesystem</span>
<span class="source-line-no">123</span><span id="line-123">   * only, not All filesystems as the FileSystem system exit hook does.</span>
<span class="source-line-no">124</span><span id="line-124">   */</span>
<span class="source-line-no">125</span><span id="line-125">  public static class MiniHBaseClusterRegionServer extends HRegionServer {</span>
<span class="source-line-no">126</span><span id="line-126">    private Thread shutdownThread = null;</span>
<span class="source-line-no">127</span><span id="line-127">    private User user = null;</span>
<span class="source-line-no">128</span><span id="line-128">    /**</span>
<span class="source-line-no">129</span><span id="line-129">     * List of RegionServers killed so far. ServerName also comprises startCode of a server, so any</span>
<span class="source-line-no">130</span><span id="line-130">     * restarted instances of the same server will have different ServerName and will not coincide</span>
<span class="source-line-no">131</span><span id="line-131">     * with past dead ones. So there's no need to cleanup this list.</span>
<span class="source-line-no">132</span><span id="line-132">     */</span>
<span class="source-line-no">133</span><span id="line-133">    static Set&lt;ServerName&gt; killedServers = new HashSet&lt;&gt;();</span>
<span class="source-line-no">134</span><span id="line-134"></span>
<span class="source-line-no">135</span><span id="line-135">    public MiniHBaseClusterRegionServer(Configuration conf)</span>
<span class="source-line-no">136</span><span id="line-136">      throws IOException, InterruptedException {</span>
<span class="source-line-no">137</span><span id="line-137">      super(conf);</span>
<span class="source-line-no">138</span><span id="line-138">      this.user = User.getCurrent();</span>
<span class="source-line-no">139</span><span id="line-139">    }</span>
<span class="source-line-no">140</span><span id="line-140"></span>
<span class="source-line-no">141</span><span id="line-141">    @Override</span>
<span class="source-line-no">142</span><span id="line-142">    protected void handleReportForDutyResponse(final RegionServerStartupResponse c)</span>
<span class="source-line-no">143</span><span id="line-143">      throws IOException {</span>
<span class="source-line-no">144</span><span id="line-144">      super.handleReportForDutyResponse(c);</span>
<span class="source-line-no">145</span><span id="line-145">      // Run this thread to shutdown our filesystem on way out.</span>
<span class="source-line-no">146</span><span id="line-146">      this.shutdownThread = new SingleFileSystemShutdownThread(getFileSystem());</span>
<span class="source-line-no">147</span><span id="line-147">    }</span>
<span class="source-line-no">148</span><span id="line-148"></span>
<span class="source-line-no">149</span><span id="line-149">    @Override</span>
<span class="source-line-no">150</span><span id="line-150">    public void run() {</span>
<span class="source-line-no">151</span><span id="line-151">      try {</span>
<span class="source-line-no">152</span><span id="line-152">        this.user.runAs(new PrivilegedAction&lt;Object&gt;() {</span>
<span class="source-line-no">153</span><span id="line-153">          @Override</span>
<span class="source-line-no">154</span><span id="line-154">          public Object run() {</span>
<span class="source-line-no">155</span><span id="line-155">            runRegionServer();</span>
<span class="source-line-no">156</span><span id="line-156">            return null;</span>
<span class="source-line-no">157</span><span id="line-157">          }</span>
<span class="source-line-no">158</span><span id="line-158">        });</span>
<span class="source-line-no">159</span><span id="line-159">      } catch (Throwable t) {</span>
<span class="source-line-no">160</span><span id="line-160">        LOG.error("Exception in run", t);</span>
<span class="source-line-no">161</span><span id="line-161">      } finally {</span>
<span class="source-line-no">162</span><span id="line-162">        // Run this on the way out.</span>
<span class="source-line-no">163</span><span id="line-163">        if (this.shutdownThread != null) {</span>
<span class="source-line-no">164</span><span id="line-164">          this.shutdownThread.start();</span>
<span class="source-line-no">165</span><span id="line-165">          Threads.shutdown(this.shutdownThread, 30000);</span>
<span class="source-line-no">166</span><span id="line-166">        }</span>
<span class="source-line-no">167</span><span id="line-167">      }</span>
<span class="source-line-no">168</span><span id="line-168">    }</span>
<span class="source-line-no">169</span><span id="line-169"></span>
<span class="source-line-no">170</span><span id="line-170">    private void runRegionServer() {</span>
<span class="source-line-no">171</span><span id="line-171">      super.run();</span>
<span class="source-line-no">172</span><span id="line-172">    }</span>
<span class="source-line-no">173</span><span id="line-173"></span>
<span class="source-line-no">174</span><span id="line-174">    @Override</span>
<span class="source-line-no">175</span><span id="line-175">    protected void kill() {</span>
<span class="source-line-no">176</span><span id="line-176">      killedServers.add(getServerName());</span>
<span class="source-line-no">177</span><span id="line-177">      super.kill();</span>
<span class="source-line-no">178</span><span id="line-178">    }</span>
<span class="source-line-no">179</span><span id="line-179"></span>
<span class="source-line-no">180</span><span id="line-180">    @Override</span>
<span class="source-line-no">181</span><span id="line-181">    public void abort(final String reason, final Throwable cause) {</span>
<span class="source-line-no">182</span><span id="line-182">      this.user.runAs(new PrivilegedAction&lt;Object&gt;() {</span>
<span class="source-line-no">183</span><span id="line-183">        @Override</span>
<span class="source-line-no">184</span><span id="line-184">        public Object run() {</span>
<span class="source-line-no">185</span><span id="line-185">          abortRegionServer(reason, cause);</span>
<span class="source-line-no">186</span><span id="line-186">          return null;</span>
<span class="source-line-no">187</span><span id="line-187">        }</span>
<span class="source-line-no">188</span><span id="line-188">      });</span>
<span class="source-line-no">189</span><span id="line-189">    }</span>
<span class="source-line-no">190</span><span id="line-190"></span>
<span class="source-line-no">191</span><span id="line-191">    private void abortRegionServer(String reason, Throwable cause) {</span>
<span class="source-line-no">192</span><span id="line-192">      super.abort(reason, cause);</span>
<span class="source-line-no">193</span><span id="line-193">    }</span>
<span class="source-line-no">194</span><span id="line-194">  }</span>
<span class="source-line-no">195</span><span id="line-195"></span>
<span class="source-line-no">196</span><span id="line-196">  /**</span>
<span class="source-line-no">197</span><span id="line-197">   * Alternate shutdown hook. Just shuts down the passed fs, not all as default filesystem hook</span>
<span class="source-line-no">198</span><span id="line-198">   * does.</span>
<span class="source-line-no">199</span><span id="line-199">   */</span>
<span class="source-line-no">200</span><span id="line-200">  static class SingleFileSystemShutdownThread extends Thread {</span>
<span class="source-line-no">201</span><span id="line-201">    private final FileSystem fs;</span>
<span class="source-line-no">202</span><span id="line-202"></span>
<span class="source-line-no">203</span><span id="line-203">    SingleFileSystemShutdownThread(final FileSystem fs) {</span>
<span class="source-line-no">204</span><span id="line-204">      super("Shutdown of " + fs);</span>
<span class="source-line-no">205</span><span id="line-205">      this.fs = fs;</span>
<span class="source-line-no">206</span><span id="line-206">    }</span>
<span class="source-line-no">207</span><span id="line-207"></span>
<span class="source-line-no">208</span><span id="line-208">    @Override</span>
<span class="source-line-no">209</span><span id="line-209">    public void run() {</span>
<span class="source-line-no">210</span><span id="line-210">      try {</span>
<span class="source-line-no">211</span><span id="line-211">        LOG.info("Hook closing fs=" + this.fs);</span>
<span class="source-line-no">212</span><span id="line-212">        this.fs.close();</span>
<span class="source-line-no">213</span><span id="line-213">      } catch (IOException e) {</span>
<span class="source-line-no">214</span><span id="line-214">        LOG.warn("Running hook", e);</span>
<span class="source-line-no">215</span><span id="line-215">      }</span>
<span class="source-line-no">216</span><span id="line-216">    }</span>
<span class="source-line-no">217</span><span id="line-217">  }</span>
<span class="source-line-no">218</span><span id="line-218"></span>
<span class="source-line-no">219</span><span id="line-219">  private void init(final int nMasterNodes, final int numAlwaysStandByMasters,</span>
<span class="source-line-no">220</span><span id="line-220">    final int nRegionNodes, List&lt;Integer&gt; rsPorts, Class&lt;? extends HMaster&gt; masterClass,</span>
<span class="source-line-no">221</span><span id="line-221">    Class&lt;? extends SingleProcessHBaseCluster.MiniHBaseClusterRegionServer&gt; regionserverClass)</span>
<span class="source-line-no">222</span><span id="line-222">    throws IOException, InterruptedException {</span>
<span class="source-line-no">223</span><span id="line-223">    try {</span>
<span class="source-line-no">224</span><span id="line-224">      if (masterClass == null) {</span>
<span class="source-line-no">225</span><span id="line-225">        masterClass = HMaster.class;</span>
<span class="source-line-no">226</span><span id="line-226">      }</span>
<span class="source-line-no">227</span><span id="line-227">      if (regionserverClass == null) {</span>
<span class="source-line-no">228</span><span id="line-228">        regionserverClass = SingleProcessHBaseCluster.MiniHBaseClusterRegionServer.class;</span>
<span class="source-line-no">229</span><span id="line-229">      }</span>
<span class="source-line-no">230</span><span id="line-230"></span>
<span class="source-line-no">231</span><span id="line-231">      // start up a LocalHBaseCluster</span>
<span class="source-line-no">232</span><span id="line-232">      hbaseCluster = new LocalHBaseCluster(conf, nMasterNodes, numAlwaysStandByMasters, 0,</span>
<span class="source-line-no">233</span><span id="line-233">        masterClass, regionserverClass);</span>
<span class="source-line-no">234</span><span id="line-234"></span>
<span class="source-line-no">235</span><span id="line-235">      // manually add the regionservers as other users</span>
<span class="source-line-no">236</span><span id="line-236">      for (int i = 0; i &lt; nRegionNodes; i++) {</span>
<span class="source-line-no">237</span><span id="line-237">        Configuration rsConf = HBaseConfiguration.create(conf);</span>
<span class="source-line-no">238</span><span id="line-238">        if (rsPorts != null) {</span>
<span class="source-line-no">239</span><span id="line-239">          rsConf.setInt(HConstants.REGIONSERVER_PORT, rsPorts.get(i));</span>
<span class="source-line-no">240</span><span id="line-240">        }</span>
<span class="source-line-no">241</span><span id="line-241">        User user = HBaseTestingUtil.getDifferentUser(rsConf, ".hfs." + index++);</span>
<span class="source-line-no">242</span><span id="line-242">        hbaseCluster.addRegionServer(rsConf, i, user);</span>
<span class="source-line-no">243</span><span id="line-243">      }</span>
<span class="source-line-no">244</span><span id="line-244"></span>
<span class="source-line-no">245</span><span id="line-245">      hbaseCluster.startup();</span>
<span class="source-line-no">246</span><span id="line-246">    } catch (IOException e) {</span>
<span class="source-line-no">247</span><span id="line-247">      shutdown();</span>
<span class="source-line-no">248</span><span id="line-248">      throw e;</span>
<span class="source-line-no">249</span><span id="line-249">    } catch (Throwable t) {</span>
<span class="source-line-no">250</span><span id="line-250">      LOG.error("Error starting cluster", t);</span>
<span class="source-line-no">251</span><span id="line-251">      shutdown();</span>
<span class="source-line-no">252</span><span id="line-252">      throw new IOException("Shutting down", t);</span>
<span class="source-line-no">253</span><span id="line-253">    }</span>
<span class="source-line-no">254</span><span id="line-254">  }</span>
<span class="source-line-no">255</span><span id="line-255"></span>
<span class="source-line-no">256</span><span id="line-256">  @Override</span>
<span class="source-line-no">257</span><span id="line-257">  public void startRegionServer(String hostname, int port) throws IOException {</span>
<span class="source-line-no">258</span><span id="line-258">    final Configuration newConf = HBaseConfiguration.create(conf);</span>
<span class="source-line-no">259</span><span id="line-259">    newConf.setInt(HConstants.REGIONSERVER_PORT, port);</span>
<span class="source-line-no">260</span><span id="line-260">    startRegionServer(newConf);</span>
<span class="source-line-no">261</span><span id="line-261">  }</span>
<span class="source-line-no">262</span><span id="line-262"></span>
<span class="source-line-no">263</span><span id="line-263">  @Override</span>
<span class="source-line-no">264</span><span id="line-264">  public void killRegionServer(ServerName serverName) throws IOException {</span>
<span class="source-line-no">265</span><span id="line-265">    HRegionServer server = getRegionServer(getRegionServerIndex(serverName));</span>
<span class="source-line-no">266</span><span id="line-266">    if (server instanceof MiniHBaseClusterRegionServer) {</span>
<span class="source-line-no">267</span><span id="line-267">      LOG.info("Killing " + server.toString());</span>
<span class="source-line-no">268</span><span id="line-268">      ((MiniHBaseClusterRegionServer) server).kill();</span>
<span class="source-line-no">269</span><span id="line-269">    } else {</span>
<span class="source-line-no">270</span><span id="line-270">      abortRegionServer(getRegionServerIndex(serverName));</span>
<span class="source-line-no">271</span><span id="line-271">    }</span>
<span class="source-line-no">272</span><span id="line-272">  }</span>
<span class="source-line-no">273</span><span id="line-273"></span>
<span class="source-line-no">274</span><span id="line-274">  @Override</span>
<span class="source-line-no">275</span><span id="line-275">  public boolean isKilledRS(ServerName serverName) {</span>
<span class="source-line-no">276</span><span id="line-276">    return MiniHBaseClusterRegionServer.killedServers.contains(serverName);</span>
<span class="source-line-no">277</span><span id="line-277">  }</span>
<span class="source-line-no">278</span><span id="line-278"></span>
<span class="source-line-no">279</span><span id="line-279">  @Override</span>
<span class="source-line-no">280</span><span id="line-280">  public void stopRegionServer(ServerName serverName) throws IOException {</span>
<span class="source-line-no">281</span><span id="line-281">    stopRegionServer(getRegionServerIndex(serverName));</span>
<span class="source-line-no">282</span><span id="line-282">  }</span>
<span class="source-line-no">283</span><span id="line-283"></span>
<span class="source-line-no">284</span><span id="line-284">  @Override</span>
<span class="source-line-no">285</span><span id="line-285">  public void suspendRegionServer(ServerName serverName) throws IOException {</span>
<span class="source-line-no">286</span><span id="line-286">    suspendRegionServer(getRegionServerIndex(serverName));</span>
<span class="source-line-no">287</span><span id="line-287">  }</span>
<span class="source-line-no">288</span><span id="line-288"></span>
<span class="source-line-no">289</span><span id="line-289">  @Override</span>
<span class="source-line-no">290</span><span id="line-290">  public void resumeRegionServer(ServerName serverName) throws IOException {</span>
<span class="source-line-no">291</span><span id="line-291">    resumeRegionServer(getRegionServerIndex(serverName));</span>
<span class="source-line-no">292</span><span id="line-292">  }</span>
<span class="source-line-no">293</span><span id="line-293"></span>
<span class="source-line-no">294</span><span id="line-294">  @Override</span>
<span class="source-line-no">295</span><span id="line-295">  public void waitForRegionServerToStop(ServerName serverName, long timeout) throws IOException {</span>
<span class="source-line-no">296</span><span id="line-296">    // ignore timeout for now</span>
<span class="source-line-no">297</span><span id="line-297">    waitOnRegionServer(getRegionServerIndex(serverName));</span>
<span class="source-line-no">298</span><span id="line-298">  }</span>
<span class="source-line-no">299</span><span id="line-299"></span>
<span class="source-line-no">300</span><span id="line-300">  @Override</span>
<span class="source-line-no">301</span><span id="line-301">  public void startZkNode(String hostname, int port) throws IOException {</span>
<span class="source-line-no">302</span><span id="line-302">    LOG.warn("Starting zookeeper nodes on mini cluster is not supported");</span>
<span class="source-line-no">303</span><span id="line-303">  }</span>
<span class="source-line-no">304</span><span id="line-304"></span>
<span class="source-line-no">305</span><span id="line-305">  @Override</span>
<span class="source-line-no">306</span><span id="line-306">  public void killZkNode(ServerName serverName) throws IOException {</span>
<span class="source-line-no">307</span><span id="line-307">    LOG.warn("Aborting zookeeper nodes on mini cluster is not supported");</span>
<span class="source-line-no">308</span><span id="line-308">  }</span>
<span class="source-line-no">309</span><span id="line-309"></span>
<span class="source-line-no">310</span><span id="line-310">  @Override</span>
<span class="source-line-no">311</span><span id="line-311">  public void stopZkNode(ServerName serverName) throws IOException {</span>
<span class="source-line-no">312</span><span id="line-312">    LOG.warn("Stopping zookeeper nodes on mini cluster is not supported");</span>
<span class="source-line-no">313</span><span id="line-313">  }</span>
<span class="source-line-no">314</span><span id="line-314"></span>
<span class="source-line-no">315</span><span id="line-315">  @Override</span>
<span class="source-line-no">316</span><span id="line-316">  public void waitForZkNodeToStart(ServerName serverName, long timeout) throws IOException {</span>
<span class="source-line-no">317</span><span id="line-317">    LOG.warn("Waiting for zookeeper nodes to start on mini cluster is not supported");</span>
<span class="source-line-no">318</span><span id="line-318">  }</span>
<span class="source-line-no">319</span><span id="line-319"></span>
<span class="source-line-no">320</span><span id="line-320">  @Override</span>
<span class="source-line-no">321</span><span id="line-321">  public void waitForZkNodeToStop(ServerName serverName, long timeout) throws IOException {</span>
<span class="source-line-no">322</span><span id="line-322">    LOG.warn("Waiting for zookeeper nodes to stop on mini cluster is not supported");</span>
<span class="source-line-no">323</span><span id="line-323">  }</span>
<span class="source-line-no">324</span><span id="line-324"></span>
<span class="source-line-no">325</span><span id="line-325">  @Override</span>
<span class="source-line-no">326</span><span id="line-326">  public void startDataNode(ServerName serverName) throws IOException {</span>
<span class="source-line-no">327</span><span id="line-327">    LOG.warn("Starting datanodes on mini cluster is not supported");</span>
<span class="source-line-no">328</span><span id="line-328">  }</span>
<span class="source-line-no">329</span><span id="line-329"></span>
<span class="source-line-no">330</span><span id="line-330">  @Override</span>
<span class="source-line-no">331</span><span id="line-331">  public void killDataNode(ServerName serverName) throws IOException {</span>
<span class="source-line-no">332</span><span id="line-332">    LOG.warn("Aborting datanodes on mini cluster is not supported");</span>
<span class="source-line-no">333</span><span id="line-333">  }</span>
<span class="source-line-no">334</span><span id="line-334"></span>
<span class="source-line-no">335</span><span id="line-335">  @Override</span>
<span class="source-line-no">336</span><span id="line-336">  public void stopDataNode(ServerName serverName) throws IOException {</span>
<span class="source-line-no">337</span><span id="line-337">    LOG.warn("Stopping datanodes on mini cluster is not supported");</span>
<span class="source-line-no">338</span><span id="line-338">  }</span>
<span class="source-line-no">339</span><span id="line-339"></span>
<span class="source-line-no">340</span><span id="line-340">  @Override</span>
<span class="source-line-no">341</span><span id="line-341">  public void waitForDataNodeToStart(ServerName serverName, long timeout) throws IOException {</span>
<span class="source-line-no">342</span><span id="line-342">    LOG.warn("Waiting for datanodes to start on mini cluster is not supported");</span>
<span class="source-line-no">343</span><span id="line-343">  }</span>
<span class="source-line-no">344</span><span id="line-344"></span>
<span class="source-line-no">345</span><span id="line-345">  @Override</span>
<span class="source-line-no">346</span><span id="line-346">  public void waitForDataNodeToStop(ServerName serverName, long timeout) throws IOException {</span>
<span class="source-line-no">347</span><span id="line-347">    LOG.warn("Waiting for datanodes to stop on mini cluster is not supported");</span>
<span class="source-line-no">348</span><span id="line-348">  }</span>
<span class="source-line-no">349</span><span id="line-349"></span>
<span class="source-line-no">350</span><span id="line-350">  @Override</span>
<span class="source-line-no">351</span><span id="line-351">  public void startNameNode(ServerName serverName) throws IOException {</span>
<span class="source-line-no">352</span><span id="line-352">    LOG.warn("Starting namenodes on mini cluster is not supported");</span>
<span class="source-line-no">353</span><span id="line-353">  }</span>
<span class="source-line-no">354</span><span id="line-354"></span>
<span class="source-line-no">355</span><span id="line-355">  @Override</span>
<span class="source-line-no">356</span><span id="line-356">  public void killNameNode(ServerName serverName) throws IOException {</span>
<span class="source-line-no">357</span><span id="line-357">    LOG.warn("Aborting namenodes on mini cluster is not supported");</span>
<span class="source-line-no">358</span><span id="line-358">  }</span>
<span class="source-line-no">359</span><span id="line-359"></span>
<span class="source-line-no">360</span><span id="line-360">  @Override</span>
<span class="source-line-no">361</span><span id="line-361">  public void stopNameNode(ServerName serverName) throws IOException {</span>
<span class="source-line-no">362</span><span id="line-362">    LOG.warn("Stopping namenodes on mini cluster is not supported");</span>
<span class="source-line-no">363</span><span id="line-363">  }</span>
<span class="source-line-no">364</span><span id="line-364"></span>
<span class="source-line-no">365</span><span id="line-365">  @Override</span>
<span class="source-line-no">366</span><span id="line-366">  public void waitForNameNodeToStart(ServerName serverName, long timeout) throws IOException {</span>
<span class="source-line-no">367</span><span id="line-367">    LOG.warn("Waiting for namenodes to start on mini cluster is not supported");</span>
<span class="source-line-no">368</span><span id="line-368">  }</span>
<span class="source-line-no">369</span><span id="line-369"></span>
<span class="source-line-no">370</span><span id="line-370">  @Override</span>
<span class="source-line-no">371</span><span id="line-371">  public void waitForNameNodeToStop(ServerName serverName, long timeout) throws IOException {</span>
<span class="source-line-no">372</span><span id="line-372">    LOG.warn("Waiting for namenodes to stop on mini cluster is not supported");</span>
<span class="source-line-no">373</span><span id="line-373">  }</span>
<span class="source-line-no">374</span><span id="line-374"></span>
<span class="source-line-no">375</span><span id="line-375">  @Override</span>
<span class="source-line-no">376</span><span id="line-376">  public void startJournalNode(ServerName serverName) {</span>
<span class="source-line-no">377</span><span id="line-377">    LOG.warn("Starting journalnodes on mini cluster is not supported");</span>
<span class="source-line-no">378</span><span id="line-378">  }</span>
<span class="source-line-no">379</span><span id="line-379"></span>
<span class="source-line-no">380</span><span id="line-380">  @Override</span>
<span class="source-line-no">381</span><span id="line-381">  public void killJournalNode(ServerName serverName) {</span>
<span class="source-line-no">382</span><span id="line-382">    LOG.warn("Aborting journalnodes on mini cluster is not supported");</span>
<span class="source-line-no">383</span><span id="line-383">  }</span>
<span class="source-line-no">384</span><span id="line-384"></span>
<span class="source-line-no">385</span><span id="line-385">  @Override</span>
<span class="source-line-no">386</span><span id="line-386">  public void stopJournalNode(ServerName serverName) {</span>
<span class="source-line-no">387</span><span id="line-387">    LOG.warn("Stopping journalnodes on mini cluster is not supported");</span>
<span class="source-line-no">388</span><span id="line-388">  }</span>
<span class="source-line-no">389</span><span id="line-389"></span>
<span class="source-line-no">390</span><span id="line-390">  @Override</span>
<span class="source-line-no">391</span><span id="line-391">  public void waitForJournalNodeToStart(ServerName serverName, long timeout) {</span>
<span class="source-line-no">392</span><span id="line-392">    LOG.warn("Waiting for journalnodes to start on mini cluster is not supported");</span>
<span class="source-line-no">393</span><span id="line-393">  }</span>
<span class="source-line-no">394</span><span id="line-394"></span>
<span class="source-line-no">395</span><span id="line-395">  @Override</span>
<span class="source-line-no">396</span><span id="line-396">  public void waitForJournalNodeToStop(ServerName serverName, long timeout) {</span>
<span class="source-line-no">397</span><span id="line-397">    LOG.warn("Waiting for journalnodes to stop on mini cluster is not supported");</span>
<span class="source-line-no">398</span><span id="line-398">  }</span>
<span class="source-line-no">399</span><span id="line-399"></span>
<span class="source-line-no">400</span><span id="line-400">  @Override</span>
<span class="source-line-no">401</span><span id="line-401">  public void startMaster(String hostname, int port) throws IOException {</span>
<span class="source-line-no">402</span><span id="line-402">    this.startMaster();</span>
<span class="source-line-no">403</span><span id="line-403">  }</span>
<span class="source-line-no">404</span><span id="line-404"></span>
<span class="source-line-no">405</span><span id="line-405">  @Override</span>
<span class="source-line-no">406</span><span id="line-406">  public void killMaster(ServerName serverName) throws IOException {</span>
<span class="source-line-no">407</span><span id="line-407">    abortMaster(getMasterIndex(serverName));</span>
<span class="source-line-no">408</span><span id="line-408">  }</span>
<span class="source-line-no">409</span><span id="line-409"></span>
<span class="source-line-no">410</span><span id="line-410">  @Override</span>
<span class="source-line-no">411</span><span id="line-411">  public void stopMaster(ServerName serverName) throws IOException {</span>
<span class="source-line-no">412</span><span id="line-412">    stopMaster(getMasterIndex(serverName));</span>
<span class="source-line-no">413</span><span id="line-413">  }</span>
<span class="source-line-no">414</span><span id="line-414"></span>
<span class="source-line-no">415</span><span id="line-415">  @Override</span>
<span class="source-line-no">416</span><span id="line-416">  public void waitForMasterToStop(ServerName serverName, long timeout) throws IOException {</span>
<span class="source-line-no">417</span><span id="line-417">    // ignore timeout for now</span>
<span class="source-line-no">418</span><span id="line-418">    waitOnMaster(getMasterIndex(serverName));</span>
<span class="source-line-no">419</span><span id="line-419">  }</span>
<span class="source-line-no">420</span><span id="line-420"></span>
<span class="source-line-no">421</span><span id="line-421">  /**</span>
<span class="source-line-no">422</span><span id="line-422">   * Starts a region server thread running</span>
<span class="source-line-no">423</span><span id="line-423">   * @return New RegionServerThread</span>
<span class="source-line-no">424</span><span id="line-424">   */</span>
<span class="source-line-no">425</span><span id="line-425">  public JVMClusterUtil.RegionServerThread startRegionServer() throws IOException {</span>
<span class="source-line-no">426</span><span id="line-426">    final Configuration newConf = HBaseConfiguration.create(conf);</span>
<span class="source-line-no">427</span><span id="line-427">    return startRegionServer(newConf);</span>
<span class="source-line-no">428</span><span id="line-428">  }</span>
<span class="source-line-no">429</span><span id="line-429"></span>
<span class="source-line-no">430</span><span id="line-430">  private JVMClusterUtil.RegionServerThread startRegionServer(Configuration configuration)</span>
<span class="source-line-no">431</span><span id="line-431">    throws IOException {</span>
<span class="source-line-no">432</span><span id="line-432">    User rsUser = HBaseTestingUtil.getDifferentUser(configuration, ".hfs." + index++);</span>
<span class="source-line-no">433</span><span id="line-433">    JVMClusterUtil.RegionServerThread t = null;</span>
<span class="source-line-no">434</span><span id="line-434">    try {</span>
<span class="source-line-no">435</span><span id="line-435">      t =</span>
<span class="source-line-no">436</span><span id="line-436">        hbaseCluster.addRegionServer(configuration, hbaseCluster.getRegionServers().size(), rsUser);</span>
<span class="source-line-no">437</span><span id="line-437">      t.start();</span>
<span class="source-line-no">438</span><span id="line-438">      t.waitForServerOnline();</span>
<span class="source-line-no">439</span><span id="line-439">    } catch (InterruptedException ie) {</span>
<span class="source-line-no">440</span><span id="line-440">      throw new IOException("Interrupted adding regionserver to cluster", ie);</span>
<span class="source-line-no">441</span><span id="line-441">    }</span>
<span class="source-line-no">442</span><span id="line-442">    return t;</span>
<span class="source-line-no">443</span><span id="line-443">  }</span>
<span class="source-line-no">444</span><span id="line-444"></span>
<span class="source-line-no">445</span><span id="line-445">  /**</span>
<span class="source-line-no">446</span><span id="line-446">   * Starts a region server thread and waits until its processed by master. Throws an exception when</span>
<span class="source-line-no">447</span><span id="line-447">   * it can't start a region server or when the region server is not processed by master within the</span>
<span class="source-line-no">448</span><span id="line-448">   * timeout.</span>
<span class="source-line-no">449</span><span id="line-449">   * @return New RegionServerThread</span>
<span class="source-line-no">450</span><span id="line-450">   */</span>
<span class="source-line-no">451</span><span id="line-451">  public JVMClusterUtil.RegionServerThread startRegionServerAndWait(long timeout)</span>
<span class="source-line-no">452</span><span id="line-452">    throws IOException {</span>
<span class="source-line-no">453</span><span id="line-453"></span>
<span class="source-line-no">454</span><span id="line-454">    JVMClusterUtil.RegionServerThread t = startRegionServer();</span>
<span class="source-line-no">455</span><span id="line-455">    ServerName rsServerName = t.getRegionServer().getServerName();</span>
<span class="source-line-no">456</span><span id="line-456"></span>
<span class="source-line-no">457</span><span id="line-457">    long start = EnvironmentEdgeManager.currentTime();</span>
<span class="source-line-no">458</span><span id="line-458">    ClusterMetrics clusterStatus = getClusterMetrics();</span>
<span class="source-line-no">459</span><span id="line-459">    while ((EnvironmentEdgeManager.currentTime() - start) &lt; timeout) {</span>
<span class="source-line-no">460</span><span id="line-460">      if (clusterStatus != null &amp;&amp; clusterStatus.getLiveServerMetrics().containsKey(rsServerName)) {</span>
<span class="source-line-no">461</span><span id="line-461">        return t;</span>
<span class="source-line-no">462</span><span id="line-462">      }</span>
<span class="source-line-no">463</span><span id="line-463">      Threads.sleep(100);</span>
<span class="source-line-no">464</span><span id="line-464">    }</span>
<span class="source-line-no">465</span><span id="line-465">    if (t.getRegionServer().isOnline()) {</span>
<span class="source-line-no">466</span><span id="line-466">      throw new IOException("RS: " + rsServerName + " online, but not processed by master");</span>
<span class="source-line-no">467</span><span id="line-467">    } else {</span>
<span class="source-line-no">468</span><span id="line-468">      throw new IOException("RS: " + rsServerName + " is offline");</span>
<span class="source-line-no">469</span><span id="line-469">    }</span>
<span class="source-line-no">470</span><span id="line-470">  }</span>
<span class="source-line-no">471</span><span id="line-471"></span>
<span class="source-line-no">472</span><span id="line-472">  /**</span>
<span class="source-line-no">473</span><span id="line-473">   * Cause a region server to exit doing basic clean up only on its way out.</span>
<span class="source-line-no">474</span><span id="line-474">   * @param serverNumber Used as index into a list.</span>
<span class="source-line-no">475</span><span id="line-475">   */</span>
<span class="source-line-no">476</span><span id="line-476">  public String abortRegionServer(int serverNumber) {</span>
<span class="source-line-no">477</span><span id="line-477">    HRegionServer server = getRegionServer(serverNumber);</span>
<span class="source-line-no">478</span><span id="line-478">    LOG.info("Aborting " + server.toString());</span>
<span class="source-line-no">479</span><span id="line-479">    server.abort("Aborting for tests", new Exception("Trace info"));</span>
<span class="source-line-no">480</span><span id="line-480">    return server.toString();</span>
<span class="source-line-no">481</span><span id="line-481">  }</span>
<span class="source-line-no">482</span><span id="line-482"></span>
<span class="source-line-no">483</span><span id="line-483">  /**</span>
<span class="source-line-no">484</span><span id="line-484">   * Shut down the specified region server cleanly</span>
<span class="source-line-no">485</span><span id="line-485">   * @param serverNumber Used as index into a list.</span>
<span class="source-line-no">486</span><span id="line-486">   * @return the region server that was stopped</span>
<span class="source-line-no">487</span><span id="line-487">   */</span>
<span class="source-line-no">488</span><span id="line-488">  public JVMClusterUtil.RegionServerThread stopRegionServer(int serverNumber) {</span>
<span class="source-line-no">489</span><span id="line-489">    return stopRegionServer(serverNumber, true);</span>
<span class="source-line-no">490</span><span id="line-490">  }</span>
<span class="source-line-no">491</span><span id="line-491"></span>
<span class="source-line-no">492</span><span id="line-492">  /**</span>
<span class="source-line-no">493</span><span id="line-493">   * Shut down the specified region server cleanly</span>
<span class="source-line-no">494</span><span id="line-494">   * @param serverNumber Used as index into a list.</span>
<span class="source-line-no">495</span><span id="line-495">   * @param shutdownFS   True is we are to shutdown the filesystem as part of this regionserver's</span>
<span class="source-line-no">496</span><span id="line-496">   *                     shutdown. Usually we do but you do not want to do this if you are running</span>
<span class="source-line-no">497</span><span id="line-497">   *                     multiple regionservers in a test and you shut down one before end of the</span>
<span class="source-line-no">498</span><span id="line-498">   *                     test.</span>
<span class="source-line-no">499</span><span id="line-499">   * @return the region server that was stopped</span>
<span class="source-line-no">500</span><span id="line-500">   */</span>
<span class="source-line-no">501</span><span id="line-501">  public JVMClusterUtil.RegionServerThread stopRegionServer(int serverNumber,</span>
<span class="source-line-no">502</span><span id="line-502">    final boolean shutdownFS) {</span>
<span class="source-line-no">503</span><span id="line-503">    JVMClusterUtil.RegionServerThread server = hbaseCluster.getRegionServers().get(serverNumber);</span>
<span class="source-line-no">504</span><span id="line-504">    LOG.info("Stopping " + server.toString());</span>
<span class="source-line-no">505</span><span id="line-505">    server.getRegionServer().stop("Stopping rs " + serverNumber);</span>
<span class="source-line-no">506</span><span id="line-506">    return server;</span>
<span class="source-line-no">507</span><span id="line-507">  }</span>
<span class="source-line-no">508</span><span id="line-508"></span>
<span class="source-line-no">509</span><span id="line-509">  /**</span>
<span class="source-line-no">510</span><span id="line-510">   * Suspend the specified region server</span>
<span class="source-line-no">511</span><span id="line-511">   * @param serverNumber Used as index into a list.</span>
<span class="source-line-no">512</span><span id="line-512">   */</span>
<span class="source-line-no">513</span><span id="line-513">  public JVMClusterUtil.RegionServerThread suspendRegionServer(int serverNumber) {</span>
<span class="source-line-no">514</span><span id="line-514">    JVMClusterUtil.RegionServerThread server = hbaseCluster.getRegionServers().get(serverNumber);</span>
<span class="source-line-no">515</span><span id="line-515">    LOG.info("Suspending {}", server.toString());</span>
<span class="source-line-no">516</span><span id="line-516">    server.suspend();</span>
<span class="source-line-no">517</span><span id="line-517">    return server;</span>
<span class="source-line-no">518</span><span id="line-518">  }</span>
<span class="source-line-no">519</span><span id="line-519"></span>
<span class="source-line-no">520</span><span id="line-520">  /**</span>
<span class="source-line-no">521</span><span id="line-521">   * Resume the specified region server</span>
<span class="source-line-no">522</span><span id="line-522">   * @param serverNumber Used as index into a list.</span>
<span class="source-line-no">523</span><span id="line-523">   */</span>
<span class="source-line-no">524</span><span id="line-524">  public JVMClusterUtil.RegionServerThread resumeRegionServer(int serverNumber) {</span>
<span class="source-line-no">525</span><span id="line-525">    JVMClusterUtil.RegionServerThread server = hbaseCluster.getRegionServers().get(serverNumber);</span>
<span class="source-line-no">526</span><span id="line-526">    LOG.info("Resuming {}", server.toString());</span>
<span class="source-line-no">527</span><span id="line-527">    server.resume();</span>
<span class="source-line-no">528</span><span id="line-528">    return server;</span>
<span class="source-line-no">529</span><span id="line-529">  }</span>
<span class="source-line-no">530</span><span id="line-530"></span>
<span class="source-line-no">531</span><span id="line-531">  /**</span>
<span class="source-line-no">532</span><span id="line-532">   * Wait for the specified region server to stop. Removes this thread from list of running threads.</span>
<span class="source-line-no">533</span><span id="line-533">   * @return Name of region server that just went down.</span>
<span class="source-line-no">534</span><span id="line-534">   */</span>
<span class="source-line-no">535</span><span id="line-535">  public String waitOnRegionServer(final int serverNumber) {</span>
<span class="source-line-no">536</span><span id="line-536">    return this.hbaseCluster.waitOnRegionServer(serverNumber);</span>
<span class="source-line-no">537</span><span id="line-537">  }</span>
<span class="source-line-no">538</span><span id="line-538"></span>
<span class="source-line-no">539</span><span id="line-539">  /**</span>
<span class="source-line-no">540</span><span id="line-540">   * Starts a master thread running</span>
<span class="source-line-no">541</span><span id="line-541">   * @return New RegionServerThread</span>
<span class="source-line-no">542</span><span id="line-542">   */</span>
<span class="source-line-no">543</span><span id="line-543">  public JVMClusterUtil.MasterThread startMaster() throws IOException {</span>
<span class="source-line-no">544</span><span id="line-544">    Configuration c = HBaseConfiguration.create(conf);</span>
<span class="source-line-no">545</span><span id="line-545">    User user = HBaseTestingUtil.getDifferentUser(c, ".hfs." + index++);</span>
<span class="source-line-no">546</span><span id="line-546"></span>
<span class="source-line-no">547</span><span id="line-547">    JVMClusterUtil.MasterThread t = null;</span>
<span class="source-line-no">548</span><span id="line-548">    try {</span>
<span class="source-line-no">549</span><span id="line-549">      t = hbaseCluster.addMaster(c, hbaseCluster.getMasters().size(), user);</span>
<span class="source-line-no">550</span><span id="line-550">      t.start();</span>
<span class="source-line-no">551</span><span id="line-551">    } catch (InterruptedException ie) {</span>
<span class="source-line-no">552</span><span id="line-552">      throw new IOException("Interrupted adding master to cluster", ie);</span>
<span class="source-line-no">553</span><span id="line-553">    }</span>
<span class="source-line-no">554</span><span id="line-554">    conf.set(HConstants.MASTER_ADDRS_KEY,</span>
<span class="source-line-no">555</span><span id="line-555">      hbaseCluster.getConfiguration().get(HConstants.MASTER_ADDRS_KEY));</span>
<span class="source-line-no">556</span><span id="line-556">    return t;</span>
<span class="source-line-no">557</span><span id="line-557">  }</span>
<span class="source-line-no">558</span><span id="line-558"></span>
<span class="source-line-no">559</span><span id="line-559">  /**</span>
<span class="source-line-no">560</span><span id="line-560">   * Returns the current active master, if available.</span>
<span class="source-line-no">561</span><span id="line-561">   * @return the active HMaster, null if none is active.</span>
<span class="source-line-no">562</span><span id="line-562">   */</span>
<span class="source-line-no">563</span><span id="line-563">  public HMaster getMaster() {</span>
<span class="source-line-no">564</span><span id="line-564">    return this.hbaseCluster.getActiveMaster();</span>
<span class="source-line-no">565</span><span id="line-565">  }</span>
<span class="source-line-no">566</span><span id="line-566"></span>
<span class="source-line-no">567</span><span id="line-567">  /**</span>
<span class="source-line-no">568</span><span id="line-568">   * Returns the current active master thread, if available.</span>
<span class="source-line-no">569</span><span id="line-569">   * @return the active MasterThread, null if none is active.</span>
<span class="source-line-no">570</span><span id="line-570">   */</span>
<span class="source-line-no">571</span><span id="line-571">  public MasterThread getMasterThread() {</span>
<span class="source-line-no">572</span><span id="line-572">    for (MasterThread mt : hbaseCluster.getLiveMasters()) {</span>
<span class="source-line-no">573</span><span id="line-573">      if (mt.getMaster().isActiveMaster()) {</span>
<span class="source-line-no">574</span><span id="line-574">        return mt;</span>
<span class="source-line-no">575</span><span id="line-575">      }</span>
<span class="source-line-no">576</span><span id="line-576">    }</span>
<span class="source-line-no">577</span><span id="line-577">    return null;</span>
<span class="source-line-no">578</span><span id="line-578">  }</span>
<span class="source-line-no">579</span><span id="line-579"></span>
<span class="source-line-no">580</span><span id="line-580">  /**</span>
<span class="source-line-no">581</span><span id="line-581">   * Returns the master at the specified index, if available.</span>
<span class="source-line-no">582</span><span id="line-582">   * @return the active HMaster, null if none is active.</span>
<span class="source-line-no">583</span><span id="line-583">   */</span>
<span class="source-line-no">584</span><span id="line-584">  public HMaster getMaster(final int serverNumber) {</span>
<span class="source-line-no">585</span><span id="line-585">    return this.hbaseCluster.getMaster(serverNumber);</span>
<span class="source-line-no">586</span><span id="line-586">  }</span>
<span class="source-line-no">587</span><span id="line-587"></span>
<span class="source-line-no">588</span><span id="line-588">  /**</span>
<span class="source-line-no">589</span><span id="line-589">   * Cause a master to exit without shutting down entire cluster.</span>
<span class="source-line-no">590</span><span id="line-590">   * @param serverNumber Used as index into a list.</span>
<span class="source-line-no">591</span><span id="line-591">   */</span>
<span class="source-line-no">592</span><span id="line-592">  public String abortMaster(int serverNumber) {</span>
<span class="source-line-no">593</span><span id="line-593">    HMaster server = getMaster(serverNumber);</span>
<span class="source-line-no">594</span><span id="line-594">    LOG.info("Aborting " + server.toString());</span>
<span class="source-line-no">595</span><span id="line-595">    server.abort("Aborting for tests", new Exception("Trace info"));</span>
<span class="source-line-no">596</span><span id="line-596">    return server.toString();</span>
<span class="source-line-no">597</span><span id="line-597">  }</span>
<span class="source-line-no">598</span><span id="line-598"></span>
<span class="source-line-no">599</span><span id="line-599">  /**</span>
<span class="source-line-no">600</span><span id="line-600">   * Shut down the specified master cleanly</span>
<span class="source-line-no">601</span><span id="line-601">   * @param serverNumber Used as index into a list.</span>
<span class="source-line-no">602</span><span id="line-602">   * @return the region server that was stopped</span>
<span class="source-line-no">603</span><span id="line-603">   */</span>
<span class="source-line-no">604</span><span id="line-604">  public JVMClusterUtil.MasterThread stopMaster(int serverNumber) {</span>
<span class="source-line-no">605</span><span id="line-605">    return stopMaster(serverNumber, true);</span>
<span class="source-line-no">606</span><span id="line-606">  }</span>
<span class="source-line-no">607</span><span id="line-607"></span>
<span class="source-line-no">608</span><span id="line-608">  /**</span>
<span class="source-line-no">609</span><span id="line-609">   * Shut down the specified master cleanly</span>
<span class="source-line-no">610</span><span id="line-610">   * @param serverNumber Used as index into a list.</span>
<span class="source-line-no">611</span><span id="line-611">   * @param shutdownFS   True is we are to shutdown the filesystem as part of this master's</span>
<span class="source-line-no">612</span><span id="line-612">   *                     shutdown. Usually we do but you do not want to do this if you are running</span>
<span class="source-line-no">613</span><span id="line-613">   *                     multiple master in a test and you shut down one before end of the test.</span>
<span class="source-line-no">614</span><span id="line-614">   * @return the master that was stopped</span>
<span class="source-line-no">615</span><span id="line-615">   */</span>
<span class="source-line-no">616</span><span id="line-616">  public JVMClusterUtil.MasterThread stopMaster(int serverNumber, final boolean shutdownFS) {</span>
<span class="source-line-no">617</span><span id="line-617">    JVMClusterUtil.MasterThread server = hbaseCluster.getMasters().get(serverNumber);</span>
<span class="source-line-no">618</span><span id="line-618">    LOG.info("Stopping " + server.toString());</span>
<span class="source-line-no">619</span><span id="line-619">    server.getMaster().stop("Stopping master " + serverNumber);</span>
<span class="source-line-no">620</span><span id="line-620">    return server;</span>
<span class="source-line-no">621</span><span id="line-621">  }</span>
<span class="source-line-no">622</span><span id="line-622"></span>
<span class="source-line-no">623</span><span id="line-623">  /**</span>
<span class="source-line-no">624</span><span id="line-624">   * Wait for the specified master to stop. Removes this thread from list of running threads.</span>
<span class="source-line-no">625</span><span id="line-625">   * @return Name of master that just went down.</span>
<span class="source-line-no">626</span><span id="line-626">   */</span>
<span class="source-line-no">627</span><span id="line-627">  public String waitOnMaster(final int serverNumber) {</span>
<span class="source-line-no">628</span><span id="line-628">    return this.hbaseCluster.waitOnMaster(serverNumber);</span>
<span class="source-line-no">629</span><span id="line-629">  }</span>
<span class="source-line-no">630</span><span id="line-630"></span>
<span class="source-line-no">631</span><span id="line-631">  /**</span>
<span class="source-line-no">632</span><span id="line-632">   * Blocks until there is an active master and that master has completed initialization.</span>
<span class="source-line-no">633</span><span id="line-633">   * @return true if an active master becomes available. false if there are no masters left.</span>
<span class="source-line-no">634</span><span id="line-634">   */</span>
<span class="source-line-no">635</span><span id="line-635">  @Override</span>
<span class="source-line-no">636</span><span id="line-636">  public boolean waitForActiveAndReadyMaster(long timeout) throws IOException {</span>
<span class="source-line-no">637</span><span id="line-637">    long start = EnvironmentEdgeManager.currentTime();</span>
<span class="source-line-no">638</span><span id="line-638">    while (EnvironmentEdgeManager.currentTime() - start &lt; timeout) {</span>
<span class="source-line-no">639</span><span id="line-639">      for (JVMClusterUtil.MasterThread mt : getMasterThreads()) {</span>
<span class="source-line-no">640</span><span id="line-640">        if (mt.getMaster().isActiveMaster() &amp;&amp; mt.getMaster().isInitialized()) {</span>
<span class="source-line-no">641</span><span id="line-641">          return true;</span>
<span class="source-line-no">642</span><span id="line-642">        }</span>
<span class="source-line-no">643</span><span id="line-643">      }</span>
<span class="source-line-no">644</span><span id="line-644">      Threads.sleep(100);</span>
<span class="source-line-no">645</span><span id="line-645">    }</span>
<span class="source-line-no">646</span><span id="line-646">    return false;</span>
<span class="source-line-no">647</span><span id="line-647">  }</span>
<span class="source-line-no">648</span><span id="line-648"></span>
<span class="source-line-no">649</span><span id="line-649">  /**</span>
<span class="source-line-no">650</span><span id="line-650">   * Returns list of master threads.</span>
<span class="source-line-no">651</span><span id="line-651">   */</span>
<span class="source-line-no">652</span><span id="line-652">  public List&lt;JVMClusterUtil.MasterThread&gt; getMasterThreads() {</span>
<span class="source-line-no">653</span><span id="line-653">    return this.hbaseCluster.getMasters();</span>
<span class="source-line-no">654</span><span id="line-654">  }</span>
<span class="source-line-no">655</span><span id="line-655"></span>
<span class="source-line-no">656</span><span id="line-656">  /**</span>
<span class="source-line-no">657</span><span id="line-657">   * Returns list of live master threads (skips the aborted and the killed)</span>
<span class="source-line-no">658</span><span id="line-658">   */</span>
<span class="source-line-no">659</span><span id="line-659">  public List&lt;JVMClusterUtil.MasterThread&gt; getLiveMasterThreads() {</span>
<span class="source-line-no">660</span><span id="line-660">    return this.hbaseCluster.getLiveMasters();</span>
<span class="source-line-no">661</span><span id="line-661">  }</span>
<span class="source-line-no">662</span><span id="line-662"></span>
<span class="source-line-no">663</span><span id="line-663">  /**</span>
<span class="source-line-no">664</span><span id="line-664">   * Wait for Mini HBase Cluster to shut down.</span>
<span class="source-line-no">665</span><span id="line-665">   */</span>
<span class="source-line-no">666</span><span id="line-666">  public void join() {</span>
<span class="source-line-no">667</span><span id="line-667">    this.hbaseCluster.join();</span>
<span class="source-line-no">668</span><span id="line-668">  }</span>
<span class="source-line-no">669</span><span id="line-669"></span>
<span class="source-line-no">670</span><span id="line-670">  /**</span>
<span class="source-line-no">671</span><span id="line-671">   * Shut down the mini HBase cluster</span>
<span class="source-line-no">672</span><span id="line-672">   */</span>
<span class="source-line-no">673</span><span id="line-673">  @Override</span>
<span class="source-line-no">674</span><span id="line-674">  public void shutdown() throws IOException {</span>
<span class="source-line-no">675</span><span id="line-675">    if (this.hbaseCluster != null) {</span>
<span class="source-line-no">676</span><span id="line-676">      this.hbaseCluster.shutdown();</span>
<span class="source-line-no">677</span><span id="line-677">    }</span>
<span class="source-line-no">678</span><span id="line-678">  }</span>
<span class="source-line-no">679</span><span id="line-679"></span>
<span class="source-line-no">680</span><span id="line-680">  @Override</span>
<span class="source-line-no">681</span><span id="line-681">  public void close() throws IOException {</span>
<span class="source-line-no">682</span><span id="line-682">  }</span>
<span class="source-line-no">683</span><span id="line-683"></span>
<span class="source-line-no">684</span><span id="line-684">  @Override</span>
<span class="source-line-no">685</span><span id="line-685">  public ClusterMetrics getClusterMetrics() throws IOException {</span>
<span class="source-line-no">686</span><span id="line-686">    HMaster master = getMaster();</span>
<span class="source-line-no">687</span><span id="line-687">    return master == null ? null : master.getClusterMetrics();</span>
<span class="source-line-no">688</span><span id="line-688">  }</span>
<span class="source-line-no">689</span><span id="line-689"></span>
<span class="source-line-no">690</span><span id="line-690">  private void executeFlush(HRegion region) throws IOException {</span>
<span class="source-line-no">691</span><span id="line-691">    if (!RegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {</span>
<span class="source-line-no">692</span><span id="line-692">      return;</span>
<span class="source-line-no">693</span><span id="line-693">    }</span>
<span class="source-line-no">694</span><span id="line-694">    // retry 5 times if we can not flush</span>
<span class="source-line-no">695</span><span id="line-695">    for (int i = 0; i &lt; 5; i++) {</span>
<span class="source-line-no">696</span><span id="line-696">      FlushResult result = region.flush(true);</span>
<span class="source-line-no">697</span><span id="line-697">      if (result.getResult() != FlushResult.Result.CANNOT_FLUSH) {</span>
<span class="source-line-no">698</span><span id="line-698">        return;</span>
<span class="source-line-no">699</span><span id="line-699">      }</span>
<span class="source-line-no">700</span><span id="line-700">      Threads.sleep(1000);</span>
<span class="source-line-no">701</span><span id="line-701">    }</span>
<span class="source-line-no">702</span><span id="line-702">  }</span>
<span class="source-line-no">703</span><span id="line-703"></span>
<span class="source-line-no">704</span><span id="line-704">  /**</span>
<span class="source-line-no">705</span><span id="line-705">   * Call flushCache on all regions on all participating regionservers.</span>
<span class="source-line-no">706</span><span id="line-706">   */</span>
<span class="source-line-no">707</span><span id="line-707">  public void flushcache() throws IOException {</span>
<span class="source-line-no">708</span><span id="line-708">    for (JVMClusterUtil.RegionServerThread t : this.hbaseCluster.getRegionServers()) {</span>
<span class="source-line-no">709</span><span id="line-709">      for (HRegion r : t.getRegionServer().getOnlineRegionsLocalContext()) {</span>
<span class="source-line-no">710</span><span id="line-710">        executeFlush(r);</span>
<span class="source-line-no">711</span><span id="line-711">      }</span>
<span class="source-line-no">712</span><span id="line-712">    }</span>
<span class="source-line-no">713</span><span id="line-713">  }</span>
<span class="source-line-no">714</span><span id="line-714"></span>
<span class="source-line-no">715</span><span id="line-715">  /**</span>
<span class="source-line-no">716</span><span id="line-716">   * Call flushCache on all regions of the specified table.</span>
<span class="source-line-no">717</span><span id="line-717">   */</span>
<span class="source-line-no">718</span><span id="line-718">  public void flushcache(TableName tableName) throws IOException {</span>
<span class="source-line-no">719</span><span id="line-719">    for (JVMClusterUtil.RegionServerThread t : this.hbaseCluster.getRegionServers()) {</span>
<span class="source-line-no">720</span><span id="line-720">      for (HRegion r : t.getRegionServer().getOnlineRegionsLocalContext()) {</span>
<span class="source-line-no">721</span><span id="line-721">        if (r.getTableDescriptor().getTableName().equals(tableName)) {</span>
<span class="source-line-no">722</span><span id="line-722">          executeFlush(r);</span>
<span class="source-line-no">723</span><span id="line-723">        }</span>
<span class="source-line-no">724</span><span id="line-724">      }</span>
<span class="source-line-no">725</span><span id="line-725">    }</span>
<span class="source-line-no">726</span><span id="line-726">  }</span>
<span class="source-line-no">727</span><span id="line-727"></span>
<span class="source-line-no">728</span><span id="line-728">  /**</span>
<span class="source-line-no">729</span><span id="line-729">   * Call flushCache on all regions on all participating regionservers.</span>
<span class="source-line-no">730</span><span id="line-730">   */</span>
<span class="source-line-no">731</span><span id="line-731">  public void compact(boolean major) throws IOException {</span>
<span class="source-line-no">732</span><span id="line-732">    for (JVMClusterUtil.RegionServerThread t : this.hbaseCluster.getRegionServers()) {</span>
<span class="source-line-no">733</span><span id="line-733">      for (HRegion r : t.getRegionServer().getOnlineRegionsLocalContext()) {</span>
<span class="source-line-no">734</span><span id="line-734">        if (RegionReplicaUtil.isDefaultReplica(r.getRegionInfo())) {</span>
<span class="source-line-no">735</span><span id="line-735">          r.compact(major);</span>
<span class="source-line-no">736</span><span id="line-736">        }</span>
<span class="source-line-no">737</span><span id="line-737">      }</span>
<span class="source-line-no">738</span><span id="line-738">    }</span>
<span class="source-line-no">739</span><span id="line-739">  }</span>
<span class="source-line-no">740</span><span id="line-740"></span>
<span class="source-line-no">741</span><span id="line-741">  /**</span>
<span class="source-line-no">742</span><span id="line-742">   * Call flushCache on all regions of the specified table.</span>
<span class="source-line-no">743</span><span id="line-743">   */</span>
<span class="source-line-no">744</span><span id="line-744">  public void compact(TableName tableName, boolean major) throws IOException {</span>
<span class="source-line-no">745</span><span id="line-745">    for (JVMClusterUtil.RegionServerThread t : this.hbaseCluster.getRegionServers()) {</span>
<span class="source-line-no">746</span><span id="line-746">      for (HRegion r : t.getRegionServer().getOnlineRegionsLocalContext()) {</span>
<span class="source-line-no">747</span><span id="line-747">        if (r.getTableDescriptor().getTableName().equals(tableName)) {</span>
<span class="source-line-no">748</span><span id="line-748">          if (RegionReplicaUtil.isDefaultReplica(r.getRegionInfo())) {</span>
<span class="source-line-no">749</span><span id="line-749">            r.compact(major);</span>
<span class="source-line-no">750</span><span id="line-750">          }</span>
<span class="source-line-no">751</span><span id="line-751">        }</span>
<span class="source-line-no">752</span><span id="line-752">      }</span>
<span class="source-line-no">753</span><span id="line-753">    }</span>
<span class="source-line-no">754</span><span id="line-754">  }</span>
<span class="source-line-no">755</span><span id="line-755"></span>
<span class="source-line-no">756</span><span id="line-756">  /**</span>
<span class="source-line-no">757</span><span id="line-757">   * Returns number of live region servers in the cluster currently.</span>
<span class="source-line-no">758</span><span id="line-758">   */</span>
<span class="source-line-no">759</span><span id="line-759">  public int getNumLiveRegionServers() {</span>
<span class="source-line-no">760</span><span id="line-760">    return this.hbaseCluster.getLiveRegionServers().size();</span>
<span class="source-line-no">761</span><span id="line-761">  }</span>
<span class="source-line-no">762</span><span id="line-762"></span>
<span class="source-line-no">763</span><span id="line-763">  /**</span>
<span class="source-line-no">764</span><span id="line-764">   * Returns list of region server threads. Does not return the master even though it is also a</span>
<span class="source-line-no">765</span><span id="line-765">   * region server.</span>
<span class="source-line-no">766</span><span id="line-766">   */</span>
<span class="source-line-no">767</span><span id="line-767">  public List&lt;JVMClusterUtil.RegionServerThread&gt; getRegionServerThreads() {</span>
<span class="source-line-no">768</span><span id="line-768">    return this.hbaseCluster.getRegionServers();</span>
<span class="source-line-no">769</span><span id="line-769">  }</span>
<span class="source-line-no">770</span><span id="line-770"></span>
<span class="source-line-no">771</span><span id="line-771">  /**</span>
<span class="source-line-no">772</span><span id="line-772">   * Returns List of live region server threads (skips the aborted and the killed)</span>
<span class="source-line-no">773</span><span id="line-773">   */</span>
<span class="source-line-no">774</span><span id="line-774">  public List&lt;JVMClusterUtil.RegionServerThread&gt; getLiveRegionServerThreads() {</span>
<span class="source-line-no">775</span><span id="line-775">    return this.hbaseCluster.getLiveRegionServers();</span>
<span class="source-line-no">776</span><span id="line-776">  }</span>
<span class="source-line-no">777</span><span id="line-777"></span>
<span class="source-line-no">778</span><span id="line-778">  /**</span>
<span class="source-line-no">779</span><span id="line-779">   * Grab a numbered region server of your choice.</span>
<span class="source-line-no">780</span><span id="line-780">   * @return region server</span>
<span class="source-line-no">781</span><span id="line-781">   */</span>
<span class="source-line-no">782</span><span id="line-782">  public HRegionServer getRegionServer(int serverNumber) {</span>
<span class="source-line-no">783</span><span id="line-783">    return hbaseCluster.getRegionServer(serverNumber);</span>
<span class="source-line-no">784</span><span id="line-784">  }</span>
<span class="source-line-no">785</span><span id="line-785"></span>
<span class="source-line-no">786</span><span id="line-786">  public HRegionServer getRegionServer(ServerName serverName) {</span>
<span class="source-line-no">787</span><span id="line-787">    return hbaseCluster.getRegionServers().stream().map(t -&gt; t.getRegionServer())</span>
<span class="source-line-no">788</span><span id="line-788">      .filter(r -&gt; r.getServerName().equals(serverName)).findFirst().orElse(null);</span>
<span class="source-line-no">789</span><span id="line-789">  }</span>
<span class="source-line-no">790</span><span id="line-790"></span>
<span class="source-line-no">791</span><span id="line-791">  public List&lt;HRegion&gt; getRegions(byte[] tableName) {</span>
<span class="source-line-no">792</span><span id="line-792">    return getRegions(TableName.valueOf(tableName));</span>
<span class="source-line-no">793</span><span id="line-793">  }</span>
<span class="source-line-no">794</span><span id="line-794"></span>
<span class="source-line-no">795</span><span id="line-795">  public List&lt;HRegion&gt; getRegions(TableName tableName) {</span>
<span class="source-line-no">796</span><span id="line-796">    List&lt;HRegion&gt; ret = new ArrayList&lt;&gt;();</span>
<span class="source-line-no">797</span><span id="line-797">    for (JVMClusterUtil.RegionServerThread rst : getRegionServerThreads()) {</span>
<span class="source-line-no">798</span><span id="line-798">      HRegionServer hrs = rst.getRegionServer();</span>
<span class="source-line-no">799</span><span id="line-799">      for (Region region : hrs.getOnlineRegionsLocalContext()) {</span>
<span class="source-line-no">800</span><span id="line-800">        if (region.getTableDescriptor().getTableName().equals(tableName)) {</span>
<span class="source-line-no">801</span><span id="line-801">          ret.add((HRegion) region);</span>
<span class="source-line-no">802</span><span id="line-802">        }</span>
<span class="source-line-no">803</span><span id="line-803">      }</span>
<span class="source-line-no">804</span><span id="line-804">    }</span>
<span class="source-line-no">805</span><span id="line-805">    return ret;</span>
<span class="source-line-no">806</span><span id="line-806">  }</span>
<span class="source-line-no">807</span><span id="line-807"></span>
<span class="source-line-no">808</span><span id="line-808">  /**</span>
<span class="source-line-no">809</span><span id="line-809">   * Returns index into List of {@link SingleProcessHBaseCluster#getRegionServerThreads()} of HRS</span>
<span class="source-line-no">810</span><span id="line-810">   * carrying regionName. Returns -1 if none found.</span>
<span class="source-line-no">811</span><span id="line-811">   */</span>
<span class="source-line-no">812</span><span id="line-812">  public int getServerWithMeta() {</span>
<span class="source-line-no">813</span><span id="line-813">    return getServerWith(RegionInfoBuilder.FIRST_META_REGIONINFO.getRegionName());</span>
<span class="source-line-no">814</span><span id="line-814">  }</span>
<span class="source-line-no">815</span><span id="line-815"></span>
<span class="source-line-no">816</span><span id="line-816">  /**</span>
<span class="source-line-no">817</span><span id="line-817">   * Get the location of the specified region</span>
<span class="source-line-no">818</span><span id="line-818">   * @param regionName Name of the region in bytes</span>
<span class="source-line-no">819</span><span id="line-819">   * @return Index into List of {@link SingleProcessHBaseCluster#getRegionServerThreads()} of HRS</span>
<span class="source-line-no">820</span><span id="line-820">   *         carrying hbase:meta. Returns -1 if none found.</span>
<span class="source-line-no">821</span><span id="line-821">   */</span>
<span class="source-line-no">822</span><span id="line-822">  public int getServerWith(byte[] regionName) {</span>
<span class="source-line-no">823</span><span id="line-823">    int index = 0;</span>
<span class="source-line-no">824</span><span id="line-824">    for (JVMClusterUtil.RegionServerThread rst : getRegionServerThreads()) {</span>
<span class="source-line-no">825</span><span id="line-825">      HRegionServer hrs = rst.getRegionServer();</span>
<span class="source-line-no">826</span><span id="line-826">      if (!hrs.isStopped()) {</span>
<span class="source-line-no">827</span><span id="line-827">        Region region = hrs.getOnlineRegion(regionName);</span>
<span class="source-line-no">828</span><span id="line-828">        if (region != null) {</span>
<span class="source-line-no">829</span><span id="line-829">          return index;</span>
<span class="source-line-no">830</span><span id="line-830">        }</span>
<span class="source-line-no">831</span><span id="line-831">      }</span>
<span class="source-line-no">832</span><span id="line-832">      index++;</span>
<span class="source-line-no">833</span><span id="line-833">    }</span>
<span class="source-line-no">834</span><span id="line-834">    return -1;</span>
<span class="source-line-no">835</span><span id="line-835">  }</span>
<span class="source-line-no">836</span><span id="line-836"></span>
<span class="source-line-no">837</span><span id="line-837">  @Override</span>
<span class="source-line-no">838</span><span id="line-838">  public ServerName getServerHoldingRegion(final TableName tn, byte[] regionName)</span>
<span class="source-line-no">839</span><span id="line-839">    throws IOException {</span>
<span class="source-line-no">840</span><span id="line-840">    int index = getServerWith(regionName);</span>
<span class="source-line-no">841</span><span id="line-841">    if (index &lt; 0) {</span>
<span class="source-line-no">842</span><span id="line-842">      return null;</span>
<span class="source-line-no">843</span><span id="line-843">    }</span>
<span class="source-line-no">844</span><span id="line-844">    return getRegionServer(index).getServerName();</span>
<span class="source-line-no">845</span><span id="line-845">  }</span>
<span class="source-line-no">846</span><span id="line-846"></span>
<span class="source-line-no">847</span><span id="line-847">  /**</span>
<span class="source-line-no">848</span><span id="line-848">   * Counts the total numbers of regions being served by the currently online region servers by</span>
<span class="source-line-no">849</span><span id="line-849">   * asking each how many regions they have. Does not look at hbase:meta at all. Count includes</span>
<span class="source-line-no">850</span><span id="line-850">   * catalog tables.</span>
<span class="source-line-no">851</span><span id="line-851">   * @return number of regions being served by all region servers</span>
<span class="source-line-no">852</span><span id="line-852">   */</span>
<span class="source-line-no">853</span><span id="line-853">  public long countServedRegions() {</span>
<span class="source-line-no">854</span><span id="line-854">    long count = 0;</span>
<span class="source-line-no">855</span><span id="line-855">    for (JVMClusterUtil.RegionServerThread rst : getLiveRegionServerThreads()) {</span>
<span class="source-line-no">856</span><span id="line-856">      count += rst.getRegionServer().getNumberOfOnlineRegions();</span>
<span class="source-line-no">857</span><span id="line-857">    }</span>
<span class="source-line-no">858</span><span id="line-858">    return count;</span>
<span class="source-line-no">859</span><span id="line-859">  }</span>
<span class="source-line-no">860</span><span id="line-860"></span>
<span class="source-line-no">861</span><span id="line-861">  /**</span>
<span class="source-line-no">862</span><span id="line-862">   * Do a simulated kill all masters and regionservers. Useful when it is impossible to bring the</span>
<span class="source-line-no">863</span><span id="line-863">   * mini-cluster back for clean shutdown.</span>
<span class="source-line-no">864</span><span id="line-864">   */</span>
<span class="source-line-no">865</span><span id="line-865">  public void killAll() {</span>
<span class="source-line-no">866</span><span id="line-866">    // Do backups first.</span>
<span class="source-line-no">867</span><span id="line-867">    MasterThread activeMaster = null;</span>
<span class="source-line-no">868</span><span id="line-868">    for (MasterThread masterThread : getMasterThreads()) {</span>
<span class="source-line-no">869</span><span id="line-869">      if (!masterThread.getMaster().isActiveMaster()) {</span>
<span class="source-line-no">870</span><span id="line-870">        masterThread.getMaster().abort("killAll");</span>
<span class="source-line-no">871</span><span id="line-871">      } else {</span>
<span class="source-line-no">872</span><span id="line-872">        activeMaster = masterThread;</span>
<span class="source-line-no">873</span><span id="line-873">      }</span>
<span class="source-line-no">874</span><span id="line-874">    }</span>
<span class="source-line-no">875</span><span id="line-875">    // Do active after.</span>
<span class="source-line-no">876</span><span id="line-876">    if (activeMaster != null) {</span>
<span class="source-line-no">877</span><span id="line-877">      activeMaster.getMaster().abort("killAll");</span>
<span class="source-line-no">878</span><span id="line-878">    }</span>
<span class="source-line-no">879</span><span id="line-879">    for (RegionServerThread rst : getRegionServerThreads()) {</span>
<span class="source-line-no">880</span><span id="line-880">      rst.getRegionServer().abort("killAll");</span>
<span class="source-line-no">881</span><span id="line-881">    }</span>
<span class="source-line-no">882</span><span id="line-882">  }</span>
<span class="source-line-no">883</span><span id="line-883"></span>
<span class="source-line-no">884</span><span id="line-884">  @Override</span>
<span class="source-line-no">885</span><span id="line-885">  public void waitUntilShutDown() {</span>
<span class="source-line-no">886</span><span id="line-886">    this.hbaseCluster.join();</span>
<span class="source-line-no">887</span><span id="line-887">  }</span>
<span class="source-line-no">888</span><span id="line-888"></span>
<span class="source-line-no">889</span><span id="line-889">  public List&lt;HRegion&gt; findRegionsForTable(TableName tableName) {</span>
<span class="source-line-no">890</span><span id="line-890">    ArrayList&lt;HRegion&gt; ret = new ArrayList&lt;&gt;();</span>
<span class="source-line-no">891</span><span id="line-891">    for (JVMClusterUtil.RegionServerThread rst : getRegionServerThreads()) {</span>
<span class="source-line-no">892</span><span id="line-892">      HRegionServer hrs = rst.getRegionServer();</span>
<span class="source-line-no">893</span><span id="line-893">      for (Region region : hrs.getRegions(tableName)) {</span>
<span class="source-line-no">894</span><span id="line-894">        if (region.getTableDescriptor().getTableName().equals(tableName)) {</span>
<span class="source-line-no">895</span><span id="line-895">          ret.add((HRegion) region);</span>
<span class="source-line-no">896</span><span id="line-896">        }</span>
<span class="source-line-no">897</span><span id="line-897">      }</span>
<span class="source-line-no">898</span><span id="line-898">    }</span>
<span class="source-line-no">899</span><span id="line-899">    return ret;</span>
<span class="source-line-no">900</span><span id="line-900">  }</span>
<span class="source-line-no">901</span><span id="line-901"></span>
<span class="source-line-no">902</span><span id="line-902">  protected int getRegionServerIndex(ServerName serverName) {</span>
<span class="source-line-no">903</span><span id="line-903">    // we have a small number of region servers, this should be fine for now.</span>
<span class="source-line-no">904</span><span id="line-904">    List&lt;RegionServerThread&gt; servers = getRegionServerThreads();</span>
<span class="source-line-no">905</span><span id="line-905">    for (int i = 0; i &lt; servers.size(); i++) {</span>
<span class="source-line-no">906</span><span id="line-906">      if (servers.get(i).getRegionServer().getServerName().equals(serverName)) {</span>
<span class="source-line-no">907</span><span id="line-907">        return i;</span>
<span class="source-line-no">908</span><span id="line-908">      }</span>
<span class="source-line-no">909</span><span id="line-909">    }</span>
<span class="source-line-no">910</span><span id="line-910">    return -1;</span>
<span class="source-line-no">911</span><span id="line-911">  }</span>
<span class="source-line-no">912</span><span id="line-912"></span>
<span class="source-line-no">913</span><span id="line-913">  protected int getMasterIndex(ServerName serverName) {</span>
<span class="source-line-no">914</span><span id="line-914">    List&lt;MasterThread&gt; masters = getMasterThreads();</span>
<span class="source-line-no">915</span><span id="line-915">    for (int i = 0; i &lt; masters.size(); i++) {</span>
<span class="source-line-no">916</span><span id="line-916">      if (masters.get(i).getMaster().getServerName().equals(serverName)) {</span>
<span class="source-line-no">917</span><span id="line-917">        return i;</span>
<span class="source-line-no">918</span><span id="line-918">      }</span>
<span class="source-line-no">919</span><span id="line-919">    }</span>
<span class="source-line-no">920</span><span id="line-920">    return -1;</span>
<span class="source-line-no">921</span><span id="line-921">  }</span>
<span class="source-line-no">922</span><span id="line-922">}</span>




























































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