<!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: HBaseTestingUtility, class: SeenRowTracker">
<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.File;</span>
<span class="source-line-no">021</span><span id="line-21">import java.io.IOException;</span>
<span class="source-line-no">022</span><span id="line-22">import java.io.OutputStream;</span>
<span class="source-line-no">023</span><span id="line-23">import java.io.UncheckedIOException;</span>
<span class="source-line-no">024</span><span id="line-24">import java.lang.reflect.Field;</span>
<span class="source-line-no">025</span><span id="line-25">import java.lang.reflect.Modifier;</span>
<span class="source-line-no">026</span><span id="line-26">import java.net.BindException;</span>
<span class="source-line-no">027</span><span id="line-27">import java.net.DatagramSocket;</span>
<span class="source-line-no">028</span><span id="line-28">import java.net.InetAddress;</span>
<span class="source-line-no">029</span><span id="line-29">import java.net.ServerSocket;</span>
<span class="source-line-no">030</span><span id="line-30">import java.net.Socket;</span>
<span class="source-line-no">031</span><span id="line-31">import java.net.UnknownHostException;</span>
<span class="source-line-no">032</span><span id="line-32">import java.nio.charset.StandardCharsets;</span>
<span class="source-line-no">033</span><span id="line-33">import java.security.MessageDigest;</span>
<span class="source-line-no">034</span><span id="line-34">import java.util.ArrayList;</span>
<span class="source-line-no">035</span><span id="line-35">import java.util.Arrays;</span>
<span class="source-line-no">036</span><span id="line-36">import java.util.Collection;</span>
<span class="source-line-no">037</span><span id="line-37">import java.util.Collections;</span>
<span class="source-line-no">038</span><span id="line-38">import java.util.HashSet;</span>
<span class="source-line-no">039</span><span id="line-39">import java.util.Iterator;</span>
<span class="source-line-no">040</span><span id="line-40">import java.util.List;</span>
<span class="source-line-no">041</span><span id="line-41">import java.util.Map;</span>
<span class="source-line-no">042</span><span id="line-42">import java.util.NavigableSet;</span>
<span class="source-line-no">043</span><span id="line-43">import java.util.Properties;</span>
<span class="source-line-no">044</span><span id="line-44">import java.util.Random;</span>
<span class="source-line-no">045</span><span id="line-45">import java.util.Set;</span>
<span class="source-line-no">046</span><span id="line-46">import java.util.TreeSet;</span>
<span class="source-line-no">047</span><span id="line-47">import java.util.concurrent.ThreadLocalRandom;</span>
<span class="source-line-no">048</span><span id="line-48">import java.util.concurrent.TimeUnit;</span>
<span class="source-line-no">049</span><span id="line-49">import java.util.concurrent.atomic.AtomicReference;</span>
<span class="source-line-no">050</span><span id="line-50">import java.util.function.BooleanSupplier;</span>
<span class="source-line-no">051</span><span id="line-51">import org.apache.commons.io.FileUtils;</span>
<span class="source-line-no">052</span><span id="line-52">import org.apache.commons.lang3.RandomStringUtils;</span>
<span class="source-line-no">053</span><span id="line-53">import org.apache.hadoop.conf.Configuration;</span>
<span class="source-line-no">054</span><span id="line-54">import org.apache.hadoop.fs.FileSystem;</span>
<span class="source-line-no">055</span><span id="line-55">import org.apache.hadoop.fs.Path;</span>
<span class="source-line-no">056</span><span id="line-56">import org.apache.hadoop.hbase.Waiter.ExplainingPredicate;</span>
<span class="source-line-no">057</span><span id="line-57">import org.apache.hadoop.hbase.Waiter.Predicate;</span>
<span class="source-line-no">058</span><span id="line-58">import org.apache.hadoop.hbase.client.Admin;</span>
<span class="source-line-no">059</span><span id="line-59">import org.apache.hadoop.hbase.client.AsyncClusterConnection;</span>
<span class="source-line-no">060</span><span id="line-60">import org.apache.hadoop.hbase.client.BufferedMutator;</span>
<span class="source-line-no">061</span><span id="line-61">import org.apache.hadoop.hbase.client.ClusterConnectionFactory;</span>
<span class="source-line-no">062</span><span id="line-62">import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;</span>
<span class="source-line-no">063</span><span id="line-63">import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;</span>
<span class="source-line-no">064</span><span id="line-64">import org.apache.hadoop.hbase.client.Connection;</span>
<span class="source-line-no">065</span><span id="line-65">import org.apache.hadoop.hbase.client.ConnectionFactory;</span>
<span class="source-line-no">066</span><span id="line-66">import org.apache.hadoop.hbase.client.Consistency;</span>
<span class="source-line-no">067</span><span id="line-67">import org.apache.hadoop.hbase.client.Delete;</span>
<span class="source-line-no">068</span><span id="line-68">import org.apache.hadoop.hbase.client.Durability;</span>
<span class="source-line-no">069</span><span id="line-69">import org.apache.hadoop.hbase.client.Get;</span>
<span class="source-line-no">070</span><span id="line-70">import org.apache.hadoop.hbase.client.Hbck;</span>
<span class="source-line-no">071</span><span id="line-71">import org.apache.hadoop.hbase.client.MasterRegistry;</span>
<span class="source-line-no">072</span><span id="line-72">import org.apache.hadoop.hbase.client.Put;</span>
<span class="source-line-no">073</span><span id="line-73">import org.apache.hadoop.hbase.client.RegionInfo;</span>
<span class="source-line-no">074</span><span id="line-74">import org.apache.hadoop.hbase.client.RegionInfoBuilder;</span>
<span class="source-line-no">075</span><span id="line-75">import org.apache.hadoop.hbase.client.RegionLocator;</span>
<span class="source-line-no">076</span><span id="line-76">import org.apache.hadoop.hbase.client.Result;</span>
<span class="source-line-no">077</span><span id="line-77">import org.apache.hadoop.hbase.client.ResultScanner;</span>
<span class="source-line-no">078</span><span id="line-78">import org.apache.hadoop.hbase.client.Scan;</span>
<span class="source-line-no">079</span><span id="line-79">import org.apache.hadoop.hbase.client.Scan.ReadType;</span>
<span class="source-line-no">080</span><span id="line-80">import org.apache.hadoop.hbase.client.Table;</span>
<span class="source-line-no">081</span><span id="line-81">import org.apache.hadoop.hbase.client.TableDescriptor;</span>
<span class="source-line-no">082</span><span id="line-82">import org.apache.hadoop.hbase.client.TableDescriptorBuilder;</span>
<span class="source-line-no">083</span><span id="line-83">import org.apache.hadoop.hbase.client.TableState;</span>
<span class="source-line-no">084</span><span id="line-84">import org.apache.hadoop.hbase.fs.HFileSystem;</span>
<span class="source-line-no">085</span><span id="line-85">import org.apache.hadoop.hbase.io.compress.Compression;</span>
<span class="source-line-no">086</span><span id="line-86">import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;</span>
<span class="source-line-no">087</span><span id="line-87">import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;</span>
<span class="source-line-no">088</span><span id="line-88">import org.apache.hadoop.hbase.io.hfile.BlockCache;</span>
<span class="source-line-no">089</span><span id="line-89">import org.apache.hadoop.hbase.io.hfile.ChecksumUtil;</span>
<span class="source-line-no">090</span><span id="line-90">import org.apache.hadoop.hbase.io.hfile.HFile;</span>
<span class="source-line-no">091</span><span id="line-91">import org.apache.hadoop.hbase.ipc.RpcServerInterface;</span>
<span class="source-line-no">092</span><span id="line-92">import org.apache.hadoop.hbase.logging.Log4jUtils;</span>
<span class="source-line-no">093</span><span id="line-93">import org.apache.hadoop.hbase.mapreduce.MapreduceTestingShim;</span>
<span class="source-line-no">094</span><span id="line-94">import org.apache.hadoop.hbase.master.HMaster;</span>
<span class="source-line-no">095</span><span id="line-95">import org.apache.hadoop.hbase.master.RegionState;</span>
<span class="source-line-no">096</span><span id="line-96">import org.apache.hadoop.hbase.master.ServerManager;</span>
<span class="source-line-no">097</span><span id="line-97">import org.apache.hadoop.hbase.master.assignment.AssignmentManager;</span>
<span class="source-line-no">098</span><span id="line-98">import org.apache.hadoop.hbase.master.assignment.AssignmentTestingUtil;</span>
<span class="source-line-no">099</span><span id="line-99">import org.apache.hadoop.hbase.master.assignment.RegionStateStore;</span>
<span class="source-line-no">100</span><span id="line-100">import org.apache.hadoop.hbase.master.assignment.RegionStates;</span>
<span class="source-line-no">101</span><span id="line-101">import org.apache.hadoop.hbase.mob.MobFileCache;</span>
<span class="source-line-no">102</span><span id="line-102">import org.apache.hadoop.hbase.regionserver.BloomType;</span>
<span class="source-line-no">103</span><span id="line-103">import org.apache.hadoop.hbase.regionserver.ChunkCreator;</span>
<span class="source-line-no">104</span><span id="line-104">import org.apache.hadoop.hbase.regionserver.HRegion;</span>
<span class="source-line-no">105</span><span id="line-105">import org.apache.hadoop.hbase.regionserver.HRegionServer;</span>
<span class="source-line-no">106</span><span id="line-106">import org.apache.hadoop.hbase.regionserver.HStore;</span>
<span class="source-line-no">107</span><span id="line-107">import org.apache.hadoop.hbase.regionserver.InternalScanner;</span>
<span class="source-line-no">108</span><span id="line-108">import org.apache.hadoop.hbase.regionserver.MemStoreLAB;</span>
<span class="source-line-no">109</span><span id="line-109">import org.apache.hadoop.hbase.regionserver.Region;</span>
<span class="source-line-no">110</span><span id="line-110">import org.apache.hadoop.hbase.regionserver.RegionScanner;</span>
<span class="source-line-no">111</span><span id="line-111">import org.apache.hadoop.hbase.regionserver.RegionServerServices;</span>
<span class="source-line-no">112</span><span id="line-112">import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;</span>
<span class="source-line-no">113</span><span id="line-113">import org.apache.hadoop.hbase.security.HBaseKerberosUtils;</span>
<span class="source-line-no">114</span><span id="line-114">import org.apache.hadoop.hbase.security.User;</span>
<span class="source-line-no">115</span><span id="line-115">import org.apache.hadoop.hbase.security.UserProvider;</span>
<span class="source-line-no">116</span><span id="line-116">import org.apache.hadoop.hbase.security.visibility.VisibilityLabelsCache;</span>
<span class="source-line-no">117</span><span id="line-117">import org.apache.hadoop.hbase.util.Bytes;</span>
<span class="source-line-no">118</span><span id="line-118">import org.apache.hadoop.hbase.util.CommonFSUtils;</span>
<span class="source-line-no">119</span><span id="line-119">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
<span class="source-line-no">120</span><span id="line-120">import org.apache.hadoop.hbase.util.FSUtils;</span>
<span class="source-line-no">121</span><span id="line-121">import org.apache.hadoop.hbase.util.JVMClusterUtil;</span>
<span class="source-line-no">122</span><span id="line-122">import org.apache.hadoop.hbase.util.JVMClusterUtil.MasterThread;</span>
<span class="source-line-no">123</span><span id="line-123">import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;</span>
<span class="source-line-no">124</span><span id="line-124">import org.apache.hadoop.hbase.util.Pair;</span>
<span class="source-line-no">125</span><span id="line-125">import org.apache.hadoop.hbase.util.ReflectionUtils;</span>
<span class="source-line-no">126</span><span id="line-126">import org.apache.hadoop.hbase.util.RegionSplitter;</span>
<span class="source-line-no">127</span><span id="line-127">import org.apache.hadoop.hbase.util.RegionSplitter.SplitAlgorithm;</span>
<span class="source-line-no">128</span><span id="line-128">import org.apache.hadoop.hbase.util.RetryCounter;</span>
<span class="source-line-no">129</span><span id="line-129">import org.apache.hadoop.hbase.util.Threads;</span>
<span class="source-line-no">130</span><span id="line-130">import org.apache.hadoop.hbase.wal.WAL;</span>
<span class="source-line-no">131</span><span id="line-131">import org.apache.hadoop.hbase.wal.WALFactory;</span>
<span class="source-line-no">132</span><span id="line-132">import org.apache.hadoop.hbase.zookeeper.EmptyWatcher;</span>
<span class="source-line-no">133</span><span id="line-133">import org.apache.hadoop.hbase.zookeeper.ZKConfig;</span>
<span class="source-line-no">134</span><span id="line-134">import org.apache.hadoop.hbase.zookeeper.ZKWatcher;</span>
<span class="source-line-no">135</span><span id="line-135">import org.apache.hadoop.hdfs.DFSClient;</span>
<span class="source-line-no">136</span><span id="line-136">import org.apache.hadoop.hdfs.DistributedFileSystem;</span>
<span class="source-line-no">137</span><span id="line-137">import org.apache.hadoop.hdfs.MiniDFSCluster;</span>
<span class="source-line-no">138</span><span id="line-138">import org.apache.hadoop.hdfs.server.datanode.DataNode;</span>
<span class="source-line-no">139</span><span id="line-139">import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsDatasetSpi;</span>
<span class="source-line-no">140</span><span id="line-140">import org.apache.hadoop.hdfs.server.namenode.EditLogFileOutputStream;</span>
<span class="source-line-no">141</span><span id="line-141">import org.apache.hadoop.mapred.JobConf;</span>
<span class="source-line-no">142</span><span id="line-142">import org.apache.hadoop.mapred.MiniMRCluster;</span>
<span class="source-line-no">143</span><span id="line-143">import org.apache.hadoop.mapred.TaskLog;</span>
<span class="source-line-no">144</span><span id="line-144">import org.apache.hadoop.minikdc.MiniKdc;</span>
<span class="source-line-no">145</span><span id="line-145">import org.apache.yetus.audience.InterfaceAudience;</span>
<span class="source-line-no">146</span><span id="line-146">import org.apache.zookeeper.WatchedEvent;</span>
<span class="source-line-no">147</span><span id="line-147">import org.apache.zookeeper.ZooKeeper;</span>
<span class="source-line-no">148</span><span id="line-148">import org.apache.zookeeper.ZooKeeper.States;</span>
<span class="source-line-no">149</span><span id="line-149"></span>
<span class="source-line-no">150</span><span id="line-150">import org.apache.hbase.thirdparty.com.google.common.io.Closeables;</span>
<span class="source-line-no">151</span><span id="line-151"></span>
<span class="source-line-no">152</span><span id="line-152">import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;</span>
<span class="source-line-no">153</span><span id="line-153"></span>
<span class="source-line-no">154</span><span id="line-154">/**</span>
<span class="source-line-no">155</span><span id="line-155"> * Facility for testing HBase. Replacement for old HBaseTestCase and HBaseClusterTestCase</span>
<span class="source-line-no">156</span><span id="line-156"> * functionality. Create an instance and keep it around testing HBase. This class is meant to be</span>
<span class="source-line-no">157</span><span id="line-157"> * your one-stop shop for anything you might need testing. Manages one cluster at a time only.</span>
<span class="source-line-no">158</span><span id="line-158"> * Managed cluster can be an in-process {@link MiniHBaseCluster}, or a deployed cluster of type</span>
<span class="source-line-no">159</span><span id="line-159"> * {@code DistributedHBaseCluster}. Not all methods work with the real cluster. Depends on log4j</span>
<span class="source-line-no">160</span><span id="line-160"> * being on classpath and hbase-site.xml for logging and test-run configuration. It does not set</span>
<span class="source-line-no">161</span><span id="line-161"> * logging levels. In the configuration properties, default values for master-info-port and</span>
<span class="source-line-no">162</span><span id="line-162"> * region-server-port are overridden such that a random port will be assigned (thus avoiding port</span>
<span class="source-line-no">163</span><span id="line-163"> * contention if another local HBase instance is already running).</span>
<span class="source-line-no">164</span><span id="line-164"> * &lt;p&gt;</span>
<span class="source-line-no">165</span><span id="line-165"> * To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"</span>
<span class="source-line-no">166</span><span id="line-166"> * setting it to true.</span>
<span class="source-line-no">167</span><span id="line-167"> * @deprecated since 3.0.0, will be removed in 4.0.0. Use</span>
<span class="source-line-no">168</span><span id="line-168"> *             {@link org.apache.hadoop.hbase.testing.TestingHBaseCluster} instead.</span>
<span class="source-line-no">169</span><span id="line-169"> */</span>
<span class="source-line-no">170</span><span id="line-170">@InterfaceAudience.Public</span>
<span class="source-line-no">171</span><span id="line-171">@Deprecated</span>
<span class="source-line-no">172</span><span id="line-172">public class HBaseTestingUtility extends HBaseZKTestingUtility {</span>
<span class="source-line-no">173</span><span id="line-173"></span>
<span class="source-line-no">174</span><span id="line-174">  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";</span>
<span class="source-line-no">175</span><span id="line-175">  /**</span>
<span class="source-line-no">176</span><span id="line-176">   * The default number of regions per regionserver when creating a pre-split table.</span>
<span class="source-line-no">177</span><span id="line-177">   */</span>
<span class="source-line-no">178</span><span id="line-178">  public static final int DEFAULT_REGIONS_PER_SERVER = 3;</span>
<span class="source-line-no">179</span><span id="line-179"></span>
<span class="source-line-no">180</span><span id="line-180">  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";</span>
<span class="source-line-no">181</span><span id="line-181">  public static final boolean PRESPLIT_TEST_TABLE = true;</span>
<span class="source-line-no">182</span><span id="line-182"></span>
<span class="source-line-no">183</span><span id="line-183">  private MiniDFSCluster dfsCluster = null;</span>
<span class="source-line-no">184</span><span id="line-184">  private FsDatasetAsyncDiskServiceFixer dfsClusterFixer = null;</span>
<span class="source-line-no">185</span><span id="line-185"></span>
<span class="source-line-no">186</span><span id="line-186">  private volatile HBaseCluster hbaseCluster = null;</span>
<span class="source-line-no">187</span><span id="line-187">  private MiniMRCluster mrCluster = null;</span>
<span class="source-line-no">188</span><span id="line-188"></span>
<span class="source-line-no">189</span><span id="line-189">  /** If there is a mini cluster running for this testing utility instance. */</span>
<span class="source-line-no">190</span><span id="line-190">  private volatile boolean miniClusterRunning;</span>
<span class="source-line-no">191</span><span id="line-191"></span>
<span class="source-line-no">192</span><span id="line-192">  private String hadoopLogDir;</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">   * Directory on test filesystem where we put the data for this instance of HBaseTestingUtility</span>
<span class="source-line-no">196</span><span id="line-196">   */</span>
<span class="source-line-no">197</span><span id="line-197">  private Path dataTestDirOnTestFS = null;</span>
<span class="source-line-no">198</span><span id="line-198"></span>
<span class="source-line-no">199</span><span id="line-199">  private final AtomicReference&lt;AsyncClusterConnection&gt; asyncConnection = new AtomicReference&lt;&gt;();</span>
<span class="source-line-no">200</span><span id="line-200"></span>
<span class="source-line-no">201</span><span id="line-201">  /** Filesystem URI used for map-reduce mini-cluster setup */</span>
<span class="source-line-no">202</span><span id="line-202">  private static String FS_URI;</span>
<span class="source-line-no">203</span><span id="line-203"></span>
<span class="source-line-no">204</span><span id="line-204">  /** This is for unit tests parameterized with a single boolean. */</span>
<span class="source-line-no">205</span><span id="line-205">  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();</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">   * Checks to see if a specific port is available.</span>
<span class="source-line-no">209</span><span id="line-209">   * @param port the port number to check for availability</span>
<span class="source-line-no">210</span><span id="line-210">   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not</span>
<span class="source-line-no">211</span><span id="line-211">   */</span>
<span class="source-line-no">212</span><span id="line-212">  public static boolean available(int port) {</span>
<span class="source-line-no">213</span><span id="line-213">    ServerSocket ss = null;</span>
<span class="source-line-no">214</span><span id="line-214">    DatagramSocket ds = null;</span>
<span class="source-line-no">215</span><span id="line-215">    try {</span>
<span class="source-line-no">216</span><span id="line-216">      ss = new ServerSocket(port);</span>
<span class="source-line-no">217</span><span id="line-217">      ss.setReuseAddress(true);</span>
<span class="source-line-no">218</span><span id="line-218">      ds = new DatagramSocket(port);</span>
<span class="source-line-no">219</span><span id="line-219">      ds.setReuseAddress(true);</span>
<span class="source-line-no">220</span><span id="line-220">      return true;</span>
<span class="source-line-no">221</span><span id="line-221">    } catch (IOException e) {</span>
<span class="source-line-no">222</span><span id="line-222">      // Do nothing</span>
<span class="source-line-no">223</span><span id="line-223">    } finally {</span>
<span class="source-line-no">224</span><span id="line-224">      if (ds != null) {</span>
<span class="source-line-no">225</span><span id="line-225">        ds.close();</span>
<span class="source-line-no">226</span><span id="line-226">      }</span>
<span class="source-line-no">227</span><span id="line-227"></span>
<span class="source-line-no">228</span><span id="line-228">      if (ss != null) {</span>
<span class="source-line-no">229</span><span id="line-229">        try {</span>
<span class="source-line-no">230</span><span id="line-230">          ss.close();</span>
<span class="source-line-no">231</span><span id="line-231">        } catch (IOException e) {</span>
<span class="source-line-no">232</span><span id="line-232">          /* should not be thrown */</span>
<span class="source-line-no">233</span><span id="line-233">        }</span>
<span class="source-line-no">234</span><span id="line-234">      }</span>
<span class="source-line-no">235</span><span id="line-235">    }</span>
<span class="source-line-no">236</span><span id="line-236"></span>
<span class="source-line-no">237</span><span id="line-237">    return false;</span>
<span class="source-line-no">238</span><span id="line-238">  }</span>
<span class="source-line-no">239</span><span id="line-239"></span>
<span class="source-line-no">240</span><span id="line-240">  /**</span>
<span class="source-line-no">241</span><span id="line-241">   * Create all combinations of Bloom filters and compression algorithms for testing.</span>
<span class="source-line-no">242</span><span id="line-242">   */</span>
<span class="source-line-no">243</span><span id="line-243">  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {</span>
<span class="source-line-no">244</span><span id="line-244">    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();</span>
<span class="source-line-no">245</span><span id="line-245">    for (Compression.Algorithm comprAlgo : HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {</span>
<span class="source-line-no">246</span><span id="line-246">      for (BloomType bloomType : BloomType.values()) {</span>
<span class="source-line-no">247</span><span id="line-247">        configurations.add(new Object[] { comprAlgo, bloomType });</span>
<span class="source-line-no">248</span><span id="line-248">      }</span>
<span class="source-line-no">249</span><span id="line-249">    }</span>
<span class="source-line-no">250</span><span id="line-250">    return Collections.unmodifiableList(configurations);</span>
<span class="source-line-no">251</span><span id="line-251">  }</span>
<span class="source-line-no">252</span><span id="line-252"></span>
<span class="source-line-no">253</span><span id="line-253">  /**</span>
<span class="source-line-no">254</span><span id="line-254">   * Create combination of memstoreTS and tags</span>
<span class="source-line-no">255</span><span id="line-255">   */</span>
<span class="source-line-no">256</span><span id="line-256">  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {</span>
<span class="source-line-no">257</span><span id="line-257">    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();</span>
<span class="source-line-no">258</span><span id="line-258">    configurations.add(new Object[] { false, false });</span>
<span class="source-line-no">259</span><span id="line-259">    configurations.add(new Object[] { false, true });</span>
<span class="source-line-no">260</span><span id="line-260">    configurations.add(new Object[] { true, false });</span>
<span class="source-line-no">261</span><span id="line-261">    configurations.add(new Object[] { true, true });</span>
<span class="source-line-no">262</span><span id="line-262">    return Collections.unmodifiableList(configurations);</span>
<span class="source-line-no">263</span><span id="line-263">  }</span>
<span class="source-line-no">264</span><span id="line-264"></span>
<span class="source-line-no">265</span><span id="line-265">  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {</span>
<span class="source-line-no">266</span><span id="line-266">    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();</span>
<span class="source-line-no">267</span><span id="line-267">    configurations.add(new Object[] { false, false, true });</span>
<span class="source-line-no">268</span><span id="line-268">    configurations.add(new Object[] { false, false, false });</span>
<span class="source-line-no">269</span><span id="line-269">    configurations.add(new Object[] { false, true, true });</span>
<span class="source-line-no">270</span><span id="line-270">    configurations.add(new Object[] { false, true, false });</span>
<span class="source-line-no">271</span><span id="line-271">    configurations.add(new Object[] { true, false, true });</span>
<span class="source-line-no">272</span><span id="line-272">    configurations.add(new Object[] { true, false, false });</span>
<span class="source-line-no">273</span><span id="line-273">    configurations.add(new Object[] { true, true, true });</span>
<span class="source-line-no">274</span><span id="line-274">    configurations.add(new Object[] { true, true, false });</span>
<span class="source-line-no">275</span><span id="line-275">    return Collections.unmodifiableList(configurations);</span>
<span class="source-line-no">276</span><span id="line-276">  }</span>
<span class="source-line-no">277</span><span id="line-277"></span>
<span class="source-line-no">278</span><span id="line-278">  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =</span>
<span class="source-line-no">279</span><span id="line-279">    bloomAndCompressionCombinations();</span>
<span class="source-line-no">280</span><span id="line-280"></span>
<span class="source-line-no">281</span><span id="line-281">  /**</span>
<span class="source-line-no">282</span><span id="line-282">   * &lt;p&gt;</span>
<span class="source-line-no">283</span><span id="line-283">   * Create an HBaseTestingUtility using a default configuration.</span>
<span class="source-line-no">284</span><span id="line-284">   * &lt;p&gt;</span>
<span class="source-line-no">285</span><span id="line-285">   * Initially, all tmp files are written to a local test data directory. Once</span>
<span class="source-line-no">286</span><span id="line-286">   * {@link #startMiniDFSCluster} is called, either directly or via {@link #startMiniCluster()}, tmp</span>
<span class="source-line-no">287</span><span id="line-287">   * data will be written to the DFS directory instead.</span>
<span class="source-line-no">288</span><span id="line-288">   */</span>
<span class="source-line-no">289</span><span id="line-289">  public HBaseTestingUtility() {</span>
<span class="source-line-no">290</span><span id="line-290">    this(HBaseConfiguration.create());</span>
<span class="source-line-no">291</span><span id="line-291">  }</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">   * &lt;p&gt;</span>
<span class="source-line-no">295</span><span id="line-295">   * Create an HBaseTestingUtility using a given configuration.</span>
<span class="source-line-no">296</span><span id="line-296">   * &lt;p&gt;</span>
<span class="source-line-no">297</span><span id="line-297">   * Initially, all tmp files are written to a local test data directory. Once</span>
<span class="source-line-no">298</span><span id="line-298">   * {@link #startMiniDFSCluster} is called, either directly or via {@link #startMiniCluster()}, tmp</span>
<span class="source-line-no">299</span><span id="line-299">   * data will be written to the DFS directory instead.</span>
<span class="source-line-no">300</span><span id="line-300">   * @param conf The configuration to use for further operations</span>
<span class="source-line-no">301</span><span id="line-301">   */</span>
<span class="source-line-no">302</span><span id="line-302">  public HBaseTestingUtility(Configuration conf) {</span>
<span class="source-line-no">303</span><span id="line-303">    super(conf);</span>
<span class="source-line-no">304</span><span id="line-304"></span>
<span class="source-line-no">305</span><span id="line-305">    // a hbase checksum verification failure will cause unit tests to fail</span>
<span class="source-line-no">306</span><span id="line-306">    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);</span>
<span class="source-line-no">307</span><span id="line-307"></span>
<span class="source-line-no">308</span><span id="line-308">    // Save this for when setting default file:// breaks things</span>
<span class="source-line-no">309</span><span id="line-309">    if (this.conf.get("fs.defaultFS") != null) {</span>
<span class="source-line-no">310</span><span id="line-310">      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));</span>
<span class="source-line-no">311</span><span id="line-311">    }</span>
<span class="source-line-no">312</span><span id="line-312">    if (this.conf.get(HConstants.HBASE_DIR) != null) {</span>
<span class="source-line-no">313</span><span id="line-313">      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));</span>
<span class="source-line-no">314</span><span id="line-314">    }</span>
<span class="source-line-no">315</span><span id="line-315">    // Every cluster is a local cluster until we start DFS</span>
<span class="source-line-no">316</span><span id="line-316">    // Note that conf could be null, but this.conf will not be</span>
<span class="source-line-no">317</span><span id="line-317">    String dataTestDir = getDataTestDir().toString();</span>
<span class="source-line-no">318</span><span id="line-318">    this.conf.set("fs.defaultFS", "file:///");</span>
<span class="source-line-no">319</span><span id="line-319">    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);</span>
<span class="source-line-no">320</span><span id="line-320">    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);</span>
<span class="source-line-no">321</span><span id="line-321">    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, false);</span>
<span class="source-line-no">322</span><span id="line-322">    // If the value for random ports isn't set set it to true, thus making</span>
<span class="source-line-no">323</span><span id="line-323">    // tests opt-out for random port assignment</span>
<span class="source-line-no">324</span><span id="line-324">    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,</span>
<span class="source-line-no">325</span><span id="line-325">      this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));</span>
<span class="source-line-no">326</span><span id="line-326">  }</span>
<span class="source-line-no">327</span><span id="line-327"></span>
<span class="source-line-no">328</span><span id="line-328">  /**</span>
<span class="source-line-no">329</span><span id="line-329">   * Close both the region {@code r} and it's underlying WAL. For use in tests.</span>
<span class="source-line-no">330</span><span id="line-330">   */</span>
<span class="source-line-no">331</span><span id="line-331">  public static void closeRegionAndWAL(final Region r) throws IOException {</span>
<span class="source-line-no">332</span><span id="line-332">    closeRegionAndWAL((HRegion) r);</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">  /**</span>
<span class="source-line-no">336</span><span id="line-336">   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.</span>
<span class="source-line-no">337</span><span id="line-337">   */</span>
<span class="source-line-no">338</span><span id="line-338">  public static void closeRegionAndWAL(final HRegion r) throws IOException {</span>
<span class="source-line-no">339</span><span id="line-339">    if (r == null) return;</span>
<span class="source-line-no">340</span><span id="line-340">    r.close();</span>
<span class="source-line-no">341</span><span id="line-341">    if (r.getWAL() == null) return;</span>
<span class="source-line-no">342</span><span id="line-342">    r.getWAL().close();</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">  /**</span>
<span class="source-line-no">346</span><span id="line-346">   * Returns this classes's instance of {@link Configuration}. Be careful how you use the returned</span>
<span class="source-line-no">347</span><span id="line-347">   * Configuration since {@link Connection} instances can be shared. The Map of Connections is keyed</span>
<span class="source-line-no">348</span><span id="line-348">   * by the Configuration. If say, a Connection was being used against a cluster that had been</span>
<span class="source-line-no">349</span><span id="line-349">   * shutdown, see {@link #shutdownMiniCluster()}, then the Connection will no longer be wholesome.</span>
<span class="source-line-no">350</span><span id="line-350">   * Rather than use the return direct, its usually best to make a copy and use that. Do</span>
<span class="source-line-no">351</span><span id="line-351">   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;</span>
<span class="source-line-no">352</span><span id="line-352">   * @return Instance of Configuration.</span>
<span class="source-line-no">353</span><span id="line-353">   */</span>
<span class="source-line-no">354</span><span id="line-354">  @Override</span>
<span class="source-line-no">355</span><span id="line-355">  public Configuration getConfiguration() {</span>
<span class="source-line-no">356</span><span id="line-356">    return super.getConfiguration();</span>
<span class="source-line-no">357</span><span id="line-357">  }</span>
<span class="source-line-no">358</span><span id="line-358"></span>
<span class="source-line-no">359</span><span id="line-359">  public void setHBaseCluster(HBaseCluster hbaseCluster) {</span>
<span class="source-line-no">360</span><span id="line-360">    this.hbaseCluster = hbaseCluster;</span>
<span class="source-line-no">361</span><span id="line-361">  }</span>
<span class="source-line-no">362</span><span id="line-362"></span>
<span class="source-line-no">363</span><span id="line-363">  /**</span>
<span class="source-line-no">364</span><span id="line-364">   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}. Give it a random name so can</span>
<span class="source-line-no">365</span><span id="line-365">   * have many concurrent tests running if we need to. Moding a System property is not the way to do</span>
<span class="source-line-no">366</span><span id="line-366">   * concurrent instances -- another instance could grab the temporary value unintentionally -- but</span>
<span class="source-line-no">367</span><span id="line-367">   * not anything can do about it at moment; single instance only is how the minidfscluster works.</span>
<span class="source-line-no">368</span><span id="line-368">   * We also create the underlying directory names for hadoop.log.dir, mapreduce.cluster.local.dir</span>
<span class="source-line-no">369</span><span id="line-369">   * and hadoop.tmp.dir, and set the values in the conf, and as a system property for hadoop.tmp.dir</span>
<span class="source-line-no">370</span><span id="line-370">   * (We do not create them!).</span>
<span class="source-line-no">371</span><span id="line-371">   * @return The calculated data test build directory, if newly-created.</span>
<span class="source-line-no">372</span><span id="line-372">   */</span>
<span class="source-line-no">373</span><span id="line-373">  @Override</span>
<span class="source-line-no">374</span><span id="line-374">  protected Path setupDataTestDir() {</span>
<span class="source-line-no">375</span><span id="line-375">    Path testPath = super.setupDataTestDir();</span>
<span class="source-line-no">376</span><span id="line-376">    if (null == testPath) {</span>
<span class="source-line-no">377</span><span id="line-377">      return null;</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">    createSubDirAndSystemProperty("hadoop.log.dir", testPath, "hadoop-log-dir");</span>
<span class="source-line-no">381</span><span id="line-381"></span>
<span class="source-line-no">382</span><span id="line-382">    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but</span>
<span class="source-line-no">383</span><span id="line-383">    // we want our own value to ensure uniqueness on the same machine</span>
<span class="source-line-no">384</span><span id="line-384">    createSubDirAndSystemProperty("hadoop.tmp.dir", testPath, "hadoop-tmp-dir");</span>
<span class="source-line-no">385</span><span id="line-385"></span>
<span class="source-line-no">386</span><span id="line-386">    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster</span>
<span class="source-line-no">387</span><span id="line-387">    createSubDir("mapreduce.cluster.local.dir", testPath, "mapred-local-dir");</span>
<span class="source-line-no">388</span><span id="line-388">    return testPath;</span>
<span class="source-line-no">389</span><span id="line-389">  }</span>
<span class="source-line-no">390</span><span id="line-390"></span>
<span class="source-line-no">391</span><span id="line-391">  private void createSubDirAndSystemProperty(String propertyName, Path parent, String subDirName) {</span>
<span class="source-line-no">392</span><span id="line-392"></span>
<span class="source-line-no">393</span><span id="line-393">    String sysValue = System.getProperty(propertyName);</span>
<span class="source-line-no">394</span><span id="line-394"></span>
<span class="source-line-no">395</span><span id="line-395">    if (sysValue != null) {</span>
<span class="source-line-no">396</span><span id="line-396">      // There is already a value set. So we do nothing but hope</span>
<span class="source-line-no">397</span><span id="line-397">      // that there will be no conflicts</span>
<span class="source-line-no">398</span><span id="line-398">      LOG.info("System.getProperty(\"" + propertyName + "\") already set to: " + sysValue</span>
<span class="source-line-no">399</span><span id="line-399">        + " so I do NOT create it in " + parent);</span>
<span class="source-line-no">400</span><span id="line-400">      String confValue = conf.get(propertyName);</span>
<span class="source-line-no">401</span><span id="line-401">      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)) {</span>
<span class="source-line-no">402</span><span id="line-402">        LOG.warn(propertyName + " property value differs in configuration and system: "</span>
<span class="source-line-no">403</span><span id="line-403">          + "Configuration=" + confValue + " while System=" + sysValue</span>
<span class="source-line-no">404</span><span id="line-404">          + " Erasing configuration value by system value.");</span>
<span class="source-line-no">405</span><span id="line-405">      }</span>
<span class="source-line-no">406</span><span id="line-406">      conf.set(propertyName, sysValue);</span>
<span class="source-line-no">407</span><span id="line-407">    } else {</span>
<span class="source-line-no">408</span><span id="line-408">      // Ok, it's not set, so we create it as a subdirectory</span>
<span class="source-line-no">409</span><span id="line-409">      createSubDir(propertyName, parent, subDirName);</span>
<span class="source-line-no">410</span><span id="line-410">      System.setProperty(propertyName, conf.get(propertyName));</span>
<span class="source-line-no">411</span><span id="line-411">    }</span>
<span class="source-line-no">412</span><span id="line-412">  }</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">   * @return Where to write test data on the test filesystem; Returns working directory for the test</span>
<span class="source-line-no">416</span><span id="line-416">   *         filesystem by default</span>
<span class="source-line-no">417</span><span id="line-417">   * @see #setupDataTestDirOnTestFS()</span>
<span class="source-line-no">418</span><span id="line-418">   * @see #getTestFileSystem()</span>
<span class="source-line-no">419</span><span id="line-419">   */</span>
<span class="source-line-no">420</span><span id="line-420">  private Path getBaseTestDirOnTestFS() throws IOException {</span>
<span class="source-line-no">421</span><span id="line-421">    FileSystem fs = getTestFileSystem();</span>
<span class="source-line-no">422</span><span id="line-422">    return new Path(fs.getWorkingDirectory(), "test-data");</span>
<span class="source-line-no">423</span><span id="line-423">  }</span>
<span class="source-line-no">424</span><span id="line-424"></span>
<span class="source-line-no">425</span><span id="line-425">  /**</span>
<span class="source-line-no">426</span><span id="line-426">   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()} to write</span>
<span class="source-line-no">427</span><span id="line-427">   * temporary test data. Call this method after setting up the mini dfs cluster if the test relies</span>
<span class="source-line-no">428</span><span id="line-428">   * on it.</span>
<span class="source-line-no">429</span><span id="line-429">   * @return a unique path in the test filesystem</span>
<span class="source-line-no">430</span><span id="line-430">   */</span>
<span class="source-line-no">431</span><span id="line-431">  public Path getDataTestDirOnTestFS() throws IOException {</span>
<span class="source-line-no">432</span><span id="line-432">    if (dataTestDirOnTestFS == null) {</span>
<span class="source-line-no">433</span><span id="line-433">      setupDataTestDirOnTestFS();</span>
<span class="source-line-no">434</span><span id="line-434">    }</span>
<span class="source-line-no">435</span><span id="line-435"></span>
<span class="source-line-no">436</span><span id="line-436">    return dataTestDirOnTestFS;</span>
<span class="source-line-no">437</span><span id="line-437">  }</span>
<span class="source-line-no">438</span><span id="line-438"></span>
<span class="source-line-no">439</span><span id="line-439">  /**</span>
<span class="source-line-no">440</span><span id="line-440">   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()} to write</span>
<span class="source-line-no">441</span><span id="line-441">   * temporary test data. Call this method after setting up the mini dfs cluster if the test relies</span>
<span class="source-line-no">442</span><span id="line-442">   * on it.</span>
<span class="source-line-no">443</span><span id="line-443">   * @return a unique path in the test filesystem</span>
<span class="source-line-no">444</span><span id="line-444">   * @param subdirName name of the subdir to create under the base test dir</span>
<span class="source-line-no">445</span><span id="line-445">   */</span>
<span class="source-line-no">446</span><span id="line-446">  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {</span>
<span class="source-line-no">447</span><span id="line-447">    return new Path(getDataTestDirOnTestFS(), subdirName);</span>
<span class="source-line-no">448</span><span id="line-448">  }</span>
<span class="source-line-no">449</span><span id="line-449"></span>
<span class="source-line-no">450</span><span id="line-450">  /**</span>
<span class="source-line-no">451</span><span id="line-451">   * Sets up a path in test filesystem to be used by tests. Creates a new directory if not already</span>
<span class="source-line-no">452</span><span id="line-452">   * setup.</span>
<span class="source-line-no">453</span><span id="line-453">   */</span>
<span class="source-line-no">454</span><span id="line-454">  private void setupDataTestDirOnTestFS() throws IOException {</span>
<span class="source-line-no">455</span><span id="line-455">    if (dataTestDirOnTestFS != null) {</span>
<span class="source-line-no">456</span><span id="line-456">      LOG.warn("Data test on test fs dir already setup in " + dataTestDirOnTestFS.toString());</span>
<span class="source-line-no">457</span><span id="line-457">      return;</span>
<span class="source-line-no">458</span><span id="line-458">    }</span>
<span class="source-line-no">459</span><span id="line-459">    dataTestDirOnTestFS = getNewDataTestDirOnTestFS();</span>
<span class="source-line-no">460</span><span id="line-460">  }</span>
<span class="source-line-no">461</span><span id="line-461"></span>
<span class="source-line-no">462</span><span id="line-462">  /**</span>
<span class="source-line-no">463</span><span id="line-463">   * Sets up a new path in test filesystem to be used by tests.</span>
<span class="source-line-no">464</span><span id="line-464">   */</span>
<span class="source-line-no">465</span><span id="line-465">  private Path getNewDataTestDirOnTestFS() throws IOException {</span>
<span class="source-line-no">466</span><span id="line-466">    // The file system can be either local, mini dfs, or if the configuration</span>
<span class="source-line-no">467</span><span id="line-467">    // is supplied externally, it can be an external cluster FS. If it is a local</span>
<span class="source-line-no">468</span><span id="line-468">    // file system, the tests should use getBaseTestDir, otherwise, we can use</span>
<span class="source-line-no">469</span><span id="line-469">    // the working directory, and create a unique sub dir there</span>
<span class="source-line-no">470</span><span id="line-470">    FileSystem fs = getTestFileSystem();</span>
<span class="source-line-no">471</span><span id="line-471">    Path newDataTestDir;</span>
<span class="source-line-no">472</span><span id="line-472">    String randomStr = getRandomUUID().toString();</span>
<span class="source-line-no">473</span><span id="line-473">    if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {</span>
<span class="source-line-no">474</span><span id="line-474">      newDataTestDir = new Path(getDataTestDir(), randomStr);</span>
<span class="source-line-no">475</span><span id="line-475">      File dataTestDir = new File(newDataTestDir.toString());</span>
<span class="source-line-no">476</span><span id="line-476">      if (deleteOnExit()) dataTestDir.deleteOnExit();</span>
<span class="source-line-no">477</span><span id="line-477">    } else {</span>
<span class="source-line-no">478</span><span id="line-478">      Path base = getBaseTestDirOnTestFS();</span>
<span class="source-line-no">479</span><span id="line-479">      newDataTestDir = new Path(base, randomStr);</span>
<span class="source-line-no">480</span><span id="line-480">      if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);</span>
<span class="source-line-no">481</span><span id="line-481">    }</span>
<span class="source-line-no">482</span><span id="line-482">    return newDataTestDir;</span>
<span class="source-line-no">483</span><span id="line-483">  }</span>
<span class="source-line-no">484</span><span id="line-484"></span>
<span class="source-line-no">485</span><span id="line-485">  /**</span>
<span class="source-line-no">486</span><span id="line-486">   * Cleans the test data directory on the test filesystem.</span>
<span class="source-line-no">487</span><span id="line-487">   * @return True if we removed the test dirs</span>
<span class="source-line-no">488</span><span id="line-488">   */</span>
<span class="source-line-no">489</span><span id="line-489">  public boolean cleanupDataTestDirOnTestFS() throws IOException {</span>
<span class="source-line-no">490</span><span id="line-490">    boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);</span>
<span class="source-line-no">491</span><span id="line-491">    if (ret) dataTestDirOnTestFS = null;</span>
<span class="source-line-no">492</span><span id="line-492">    return ret;</span>
<span class="source-line-no">493</span><span id="line-493">  }</span>
<span class="source-line-no">494</span><span id="line-494"></span>
<span class="source-line-no">495</span><span id="line-495">  /**</span>
<span class="source-line-no">496</span><span id="line-496">   * Cleans a subdirectory under the test data directory on the test filesystem.</span>
<span class="source-line-no">497</span><span id="line-497">   * @return True if we removed child</span>
<span class="source-line-no">498</span><span id="line-498">   */</span>
<span class="source-line-no">499</span><span id="line-499">  public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {</span>
<span class="source-line-no">500</span><span id="line-500">    Path cpath = getDataTestDirOnTestFS(subdirName);</span>
<span class="source-line-no">501</span><span id="line-501">    return getTestFileSystem().delete(cpath, true);</span>
<span class="source-line-no">502</span><span id="line-502">  }</span>
<span class="source-line-no">503</span><span id="line-503"></span>
<span class="source-line-no">504</span><span id="line-504">  // Workaround to avoid IllegalThreadStateException</span>
<span class="source-line-no">505</span><span id="line-505">  // See HBASE-27148 for more details</span>
<span class="source-line-no">506</span><span id="line-506">  private static final class FsDatasetAsyncDiskServiceFixer extends Thread {</span>
<span class="source-line-no">507</span><span id="line-507"></span>
<span class="source-line-no">508</span><span id="line-508">    private volatile boolean stopped = false;</span>
<span class="source-line-no">509</span><span id="line-509"></span>
<span class="source-line-no">510</span><span id="line-510">    private final MiniDFSCluster cluster;</span>
<span class="source-line-no">511</span><span id="line-511"></span>
<span class="source-line-no">512</span><span id="line-512">    FsDatasetAsyncDiskServiceFixer(MiniDFSCluster cluster) {</span>
<span class="source-line-no">513</span><span id="line-513">      super("FsDatasetAsyncDiskServiceFixer");</span>
<span class="source-line-no">514</span><span id="line-514">      setDaemon(true);</span>
<span class="source-line-no">515</span><span id="line-515">      this.cluster = cluster;</span>
<span class="source-line-no">516</span><span id="line-516">    }</span>
<span class="source-line-no">517</span><span id="line-517"></span>
<span class="source-line-no">518</span><span id="line-518">    @Override</span>
<span class="source-line-no">519</span><span id="line-519">    public void run() {</span>
<span class="source-line-no">520</span><span id="line-520">      while (!stopped) {</span>
<span class="source-line-no">521</span><span id="line-521">        try {</span>
<span class="source-line-no">522</span><span id="line-522">          Thread.sleep(30000);</span>
<span class="source-line-no">523</span><span id="line-523">        } catch (InterruptedException e) {</span>
<span class="source-line-no">524</span><span id="line-524">          Thread.currentThread().interrupt();</span>
<span class="source-line-no">525</span><span id="line-525">          continue;</span>
<span class="source-line-no">526</span><span id="line-526">        }</span>
<span class="source-line-no">527</span><span id="line-527">        // we could add new datanodes during tests, so here we will check every 30 seconds, as the</span>
<span class="source-line-no">528</span><span id="line-528">        // timeout of the thread pool executor is 60 seconds by default.</span>
<span class="source-line-no">529</span><span id="line-529">        try {</span>
<span class="source-line-no">530</span><span id="line-530">          for (DataNode dn : cluster.getDataNodes()) {</span>
<span class="source-line-no">531</span><span id="line-531">            FsDatasetSpi&lt;?&gt; dataset = dn.getFSDataset();</span>
<span class="source-line-no">532</span><span id="line-532">            Field service = dataset.getClass().getDeclaredField("asyncDiskService");</span>
<span class="source-line-no">533</span><span id="line-533">            service.setAccessible(true);</span>
<span class="source-line-no">534</span><span id="line-534">            Object asyncDiskService = service.get(dataset);</span>
<span class="source-line-no">535</span><span id="line-535">            Field group = asyncDiskService.getClass().getDeclaredField("threadGroup");</span>
<span class="source-line-no">536</span><span id="line-536">            group.setAccessible(true);</span>
<span class="source-line-no">537</span><span id="line-537">            ThreadGroup threadGroup = (ThreadGroup) group.get(asyncDiskService);</span>
<span class="source-line-no">538</span><span id="line-538">            if (threadGroup.isDaemon()) {</span>
<span class="source-line-no">539</span><span id="line-539">              threadGroup.setDaemon(false);</span>
<span class="source-line-no">540</span><span id="line-540">            }</span>
<span class="source-line-no">541</span><span id="line-541">          }</span>
<span class="source-line-no">542</span><span id="line-542">        } catch (NoSuchFieldException e) {</span>
<span class="source-line-no">543</span><span id="line-543">          LOG.debug("NoSuchFieldException: " + e.getMessage()</span>
<span class="source-line-no">544</span><span id="line-544">            + "; It might because your Hadoop version &gt; 3.2.3 or 3.3.4, "</span>
<span class="source-line-no">545</span><span id="line-545">            + "See HBASE-27595 for details.");</span>
<span class="source-line-no">546</span><span id="line-546">        } catch (Exception e) {</span>
<span class="source-line-no">547</span><span id="line-547">          LOG.warn("failed to reset thread pool timeout for FsDatasetAsyncDiskService", e);</span>
<span class="source-line-no">548</span><span id="line-548">        }</span>
<span class="source-line-no">549</span><span id="line-549">      }</span>
<span class="source-line-no">550</span><span id="line-550">    }</span>
<span class="source-line-no">551</span><span id="line-551"></span>
<span class="source-line-no">552</span><span id="line-552">    void shutdown() {</span>
<span class="source-line-no">553</span><span id="line-553">      stopped = true;</span>
<span class="source-line-no">554</span><span id="line-554">      interrupt();</span>
<span class="source-line-no">555</span><span id="line-555">    }</span>
<span class="source-line-no">556</span><span id="line-556">  }</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">   * Start a minidfscluster.</span>
<span class="source-line-no">560</span><span id="line-560">   * @param servers How many DNs to start.</span>
<span class="source-line-no">561</span><span id="line-561">   * @see #shutdownMiniDFSCluster()</span>
<span class="source-line-no">562</span><span id="line-562">   * @return The mini dfs cluster created.</span>
<span class="source-line-no">563</span><span id="line-563">   */</span>
<span class="source-line-no">564</span><span id="line-564">  public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {</span>
<span class="source-line-no">565</span><span id="line-565">    return startMiniDFSCluster(servers, null);</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">  /**</span>
<span class="source-line-no">569</span><span id="line-569">   * Start a minidfscluster. This is useful if you want to run datanode on distinct hosts for things</span>
<span class="source-line-no">570</span><span id="line-570">   * like HDFS block location verification. If you start MiniDFSCluster without host names, all</span>
<span class="source-line-no">571</span><span id="line-571">   * instances of the datanodes will have the same host name.</span>
<span class="source-line-no">572</span><span id="line-572">   * @param hosts hostnames DNs to run on.</span>
<span class="source-line-no">573</span><span id="line-573">   * @see #shutdownMiniDFSCluster()</span>
<span class="source-line-no">574</span><span id="line-574">   * @return The mini dfs cluster created.</span>
<span class="source-line-no">575</span><span id="line-575">   */</span>
<span class="source-line-no">576</span><span id="line-576">  public MiniDFSCluster startMiniDFSCluster(final String hosts[]) throws Exception {</span>
<span class="source-line-no">577</span><span id="line-577">    if (hosts != null &amp;&amp; hosts.length != 0) {</span>
<span class="source-line-no">578</span><span id="line-578">      return startMiniDFSCluster(hosts.length, hosts);</span>
<span class="source-line-no">579</span><span id="line-579">    } else {</span>
<span class="source-line-no">580</span><span id="line-580">      return startMiniDFSCluster(1, null);</span>
<span class="source-line-no">581</span><span id="line-581">    }</span>
<span class="source-line-no">582</span><span id="line-582">  }</span>
<span class="source-line-no">583</span><span id="line-583"></span>
<span class="source-line-no">584</span><span id="line-584">  /**</span>
<span class="source-line-no">585</span><span id="line-585">   * Start a minidfscluster. Can only create one.</span>
<span class="source-line-no">586</span><span id="line-586">   * @param servers How many DNs to start.</span>
<span class="source-line-no">587</span><span id="line-587">   * @param hosts   hostnames DNs to run on.</span>
<span class="source-line-no">588</span><span id="line-588">   * @see #shutdownMiniDFSCluster()</span>
<span class="source-line-no">589</span><span id="line-589">   * @return The mini dfs cluster created.</span>
<span class="source-line-no">590</span><span id="line-590">   */</span>
<span class="source-line-no">591</span><span id="line-591">  public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[]) throws Exception {</span>
<span class="source-line-no">592</span><span id="line-592">    return startMiniDFSCluster(servers, null, hosts);</span>
<span class="source-line-no">593</span><span id="line-593">  }</span>
<span class="source-line-no">594</span><span id="line-594"></span>
<span class="source-line-no">595</span><span id="line-595">  private void setFs() throws IOException {</span>
<span class="source-line-no">596</span><span id="line-596">    if (this.dfsCluster == null) {</span>
<span class="source-line-no">597</span><span id="line-597">      LOG.info("Skipping setting fs because dfsCluster is null");</span>
<span class="source-line-no">598</span><span id="line-598">      return;</span>
<span class="source-line-no">599</span><span id="line-599">    }</span>
<span class="source-line-no">600</span><span id="line-600">    FileSystem fs = this.dfsCluster.getFileSystem();</span>
<span class="source-line-no">601</span><span id="line-601">    CommonFSUtils.setFsDefault(this.conf, new Path(fs.getUri()));</span>
<span class="source-line-no">602</span><span id="line-602"></span>
<span class="source-line-no">603</span><span id="line-603">    // re-enable this check with dfs</span>
<span class="source-line-no">604</span><span id="line-604">    conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);</span>
<span class="source-line-no">605</span><span id="line-605">  }</span>
<span class="source-line-no">606</span><span id="line-606"></span>
<span class="source-line-no">607</span><span id="line-607">  public MiniDFSCluster startMiniDFSCluster(int servers, final String racks[], String hosts[])</span>
<span class="source-line-no">608</span><span id="line-608">    throws Exception {</span>
<span class="source-line-no">609</span><span id="line-609">    createDirsAndSetProperties();</span>
<span class="source-line-no">610</span><span id="line-610">    EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);</span>
<span class="source-line-no">611</span><span id="line-611"></span>
<span class="source-line-no">612</span><span id="line-612">    this.dfsCluster =</span>
<span class="source-line-no">613</span><span id="line-613">      new MiniDFSCluster(0, this.conf, servers, true, true, true, null, racks, hosts, null);</span>
<span class="source-line-no">614</span><span id="line-614">    this.dfsClusterFixer = new FsDatasetAsyncDiskServiceFixer(dfsCluster);</span>
<span class="source-line-no">615</span><span id="line-615">    this.dfsClusterFixer.start();</span>
<span class="source-line-no">616</span><span id="line-616">    // Set this just-started cluster as our filesystem.</span>
<span class="source-line-no">617</span><span id="line-617">    setFs();</span>
<span class="source-line-no">618</span><span id="line-618"></span>
<span class="source-line-no">619</span><span id="line-619">    // Wait for the cluster to be totally up</span>
<span class="source-line-no">620</span><span id="line-620">    this.dfsCluster.waitClusterUp();</span>
<span class="source-line-no">621</span><span id="line-621"></span>
<span class="source-line-no">622</span><span id="line-622">    // reset the test directory for test file system</span>
<span class="source-line-no">623</span><span id="line-623">    dataTestDirOnTestFS = null;</span>
<span class="source-line-no">624</span><span id="line-624">    String dataTestDir = getDataTestDir().toString();</span>
<span class="source-line-no">625</span><span id="line-625">    conf.set(HConstants.HBASE_DIR, dataTestDir);</span>
<span class="source-line-no">626</span><span id="line-626">    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);</span>
<span class="source-line-no">627</span><span id="line-627"></span>
<span class="source-line-no">628</span><span id="line-628">    return this.dfsCluster;</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">  public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {</span>
<span class="source-line-no">632</span><span id="line-632">    createDirsAndSetProperties();</span>
<span class="source-line-no">633</span><span id="line-633">    dfsCluster =</span>
<span class="source-line-no">634</span><span id="line-634">      new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null, null, null, null);</span>
<span class="source-line-no">635</span><span id="line-635">    this.dfsClusterFixer = new FsDatasetAsyncDiskServiceFixer(dfsCluster);</span>
<span class="source-line-no">636</span><span id="line-636">    this.dfsClusterFixer.start();</span>
<span class="source-line-no">637</span><span id="line-637">    return dfsCluster;</span>
<span class="source-line-no">638</span><span id="line-638">  }</span>
<span class="source-line-no">639</span><span id="line-639"></span>
<span class="source-line-no">640</span><span id="line-640">  /**</span>
<span class="source-line-no">641</span><span id="line-641">   * This is used before starting HDFS and map-reduce mini-clusters Run something like the below to</span>
<span class="source-line-no">642</span><span id="line-642">   * check for the likes of '/tmp' references -- i.e. references outside of the test data dir -- in</span>
<span class="source-line-no">643</span><span id="line-643">   * the conf.</span>
<span class="source-line-no">644</span><span id="line-644">   *</span>
<span class="source-line-no">645</span><span id="line-645">   * &lt;pre&gt;</span>
<span class="source-line-no">646</span><span id="line-646">   * Configuration conf = TEST_UTIL.getConfiguration();</span>
<span class="source-line-no">647</span><span id="line-647">   * for (Iterator&amp;lt;Map.Entry&amp;lt;String, String&amp;gt;&amp;gt; i = conf.iterator(); i.hasNext();) {</span>
<span class="source-line-no">648</span><span id="line-648">   *   Map.Entry&amp;lt;String, String&amp;gt; e = i.next();</span>
<span class="source-line-no">649</span><span id="line-649">   *   assertFalse(e.getKey() + " " + e.getValue(), e.getValue().contains("/tmp"));</span>
<span class="source-line-no">650</span><span id="line-650">   * }</span>
<span class="source-line-no">651</span><span id="line-651">   * &lt;/pre&gt;</span>
<span class="source-line-no">652</span><span id="line-652">   */</span>
<span class="source-line-no">653</span><span id="line-653">  private void createDirsAndSetProperties() throws IOException {</span>
<span class="source-line-no">654</span><span id="line-654">    setupClusterTestDir();</span>
<span class="source-line-no">655</span><span id="line-655">    conf.set(MiniDFSCluster.HDFS_MINIDFS_BASEDIR, clusterTestDir.getCanonicalPath());</span>
<span class="source-line-no">656</span><span id="line-656">    createDirAndSetProperty("test.cache.data");</span>
<span class="source-line-no">657</span><span id="line-657">    createDirAndSetProperty("hadoop.tmp.dir");</span>
<span class="source-line-no">658</span><span id="line-658">    hadoopLogDir = createDirAndSetProperty("hadoop.log.dir");</span>
<span class="source-line-no">659</span><span id="line-659">    createDirAndSetProperty("mapreduce.cluster.local.dir");</span>
<span class="source-line-no">660</span><span id="line-660">    createDirAndSetProperty("mapreduce.cluster.temp.dir");</span>
<span class="source-line-no">661</span><span id="line-661">    enableShortCircuit();</span>
<span class="source-line-no">662</span><span id="line-662"></span>
<span class="source-line-no">663</span><span id="line-663">    Path root = getDataTestDirOnTestFS("hadoop");</span>
<span class="source-line-no">664</span><span id="line-664">    conf.set(MapreduceTestingShim.getMROutputDirProp(),</span>
<span class="source-line-no">665</span><span id="line-665">      new Path(root, "mapred-output-dir").toString());</span>
<span class="source-line-no">666</span><span id="line-666">    conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());</span>
<span class="source-line-no">667</span><span id="line-667">    conf.set("mapreduce.jobtracker.staging.root.dir",</span>
<span class="source-line-no">668</span><span id="line-668">      new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());</span>
<span class="source-line-no">669</span><span id="line-669">    conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());</span>
<span class="source-line-no">670</span><span id="line-670">    conf.set("yarn.app.mapreduce.am.staging-dir",</span>
<span class="source-line-no">671</span><span id="line-671">      new Path(root, "mapreduce-am-staging-root-dir").toString());</span>
<span class="source-line-no">672</span><span id="line-672"></span>
<span class="source-line-no">673</span><span id="line-673">    // Frustrate yarn's and hdfs's attempts at writing /tmp.</span>
<span class="source-line-no">674</span><span id="line-674">    // Below is fragile. Make it so we just interpolate any 'tmp' reference.</span>
<span class="source-line-no">675</span><span id="line-675">    createDirAndSetProperty("yarn.node-labels.fs-store.root-dir");</span>
<span class="source-line-no">676</span><span id="line-676">    createDirAndSetProperty("yarn.node-attribute.fs-store.root-dir");</span>
<span class="source-line-no">677</span><span id="line-677">    createDirAndSetProperty("yarn.nodemanager.log-dirs");</span>
<span class="source-line-no">678</span><span id="line-678">    createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");</span>
<span class="source-line-no">679</span><span id="line-679">    createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.active-dir");</span>
<span class="source-line-no">680</span><span id="line-680">    createDirAndSetProperty("yarn.timeline-service.entity-group-fs-store.done-dir");</span>
<span class="source-line-no">681</span><span id="line-681">    createDirAndSetProperty("yarn.nodemanager.remote-app-log-dir");</span>
<span class="source-line-no">682</span><span id="line-682">    createDirAndSetProperty("dfs.journalnode.edits.dir");</span>
<span class="source-line-no">683</span><span id="line-683">    createDirAndSetProperty("dfs.datanode.shared.file.descriptor.paths");</span>
<span class="source-line-no">684</span><span id="line-684">    createDirAndSetProperty("nfs.dump.dir");</span>
<span class="source-line-no">685</span><span id="line-685">    createDirAndSetProperty("java.io.tmpdir");</span>
<span class="source-line-no">686</span><span id="line-686">    createDirAndSetProperty("dfs.journalnode.edits.dir");</span>
<span class="source-line-no">687</span><span id="line-687">    createDirAndSetProperty("dfs.provided.aliasmap.inmemory.leveldb.dir");</span>
<span class="source-line-no">688</span><span id="line-688">    createDirAndSetProperty("fs.s3a.committer.staging.tmp.path");</span>
<span class="source-line-no">689</span><span id="line-689">  }</span>
<span class="source-line-no">690</span><span id="line-690"></span>
<span class="source-line-no">691</span><span id="line-691">  /**</span>
<span class="source-line-no">692</span><span id="line-692">   * Check whether the tests should assume NEW_VERSION_BEHAVIOR when creating new column families.</span>
<span class="source-line-no">693</span><span id="line-693">   * Default to false.</span>
<span class="source-line-no">694</span><span id="line-694">   */</span>
<span class="source-line-no">695</span><span id="line-695">  public boolean isNewVersionBehaviorEnabled() {</span>
<span class="source-line-no">696</span><span id="line-696">    final String propName = "hbase.tests.new.version.behavior";</span>
<span class="source-line-no">697</span><span id="line-697">    String v = System.getProperty(propName);</span>
<span class="source-line-no">698</span><span id="line-698">    if (v != null) {</span>
<span class="source-line-no">699</span><span id="line-699">      return Boolean.parseBoolean(v);</span>
<span class="source-line-no">700</span><span id="line-700">    }</span>
<span class="source-line-no">701</span><span id="line-701">    return false;</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">   * Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property. This</span>
<span class="source-line-no">706</span><span id="line-706">   * allows to specify this parameter on the command line. If not set, default is true.</span>
<span class="source-line-no">707</span><span id="line-707">   */</span>
<span class="source-line-no">708</span><span id="line-708">  public boolean isReadShortCircuitOn() {</span>
<span class="source-line-no">709</span><span id="line-709">    final String propName = "hbase.tests.use.shortcircuit.reads";</span>
<span class="source-line-no">710</span><span id="line-710">    String readOnProp = System.getProperty(propName);</span>
<span class="source-line-no">711</span><span id="line-711">    if (readOnProp != null) {</span>
<span class="source-line-no">712</span><span id="line-712">      return Boolean.parseBoolean(readOnProp);</span>
<span class="source-line-no">713</span><span id="line-713">    } else {</span>
<span class="source-line-no">714</span><span id="line-714">      return conf.getBoolean(propName, false);</span>
<span class="source-line-no">715</span><span id="line-715">    }</span>
<span class="source-line-no">716</span><span id="line-716">  }</span>
<span class="source-line-no">717</span><span id="line-717"></span>
<span class="source-line-no">718</span><span id="line-718">  /**</span>
<span class="source-line-no">719</span><span id="line-719">   * Enable the short circuit read, unless configured differently. Set both HBase and HDFS settings,</span>
<span class="source-line-no">720</span><span id="line-720">   * including skipping the hdfs checksum checks.</span>
<span class="source-line-no">721</span><span id="line-721">   */</span>
<span class="source-line-no">722</span><span id="line-722">  private void enableShortCircuit() {</span>
<span class="source-line-no">723</span><span id="line-723">    if (isReadShortCircuitOn()) {</span>
<span class="source-line-no">724</span><span id="line-724">      String curUser = System.getProperty("user.name");</span>
<span class="source-line-no">725</span><span id="line-725">      LOG.info("read short circuit is ON for user " + curUser);</span>
<span class="source-line-no">726</span><span id="line-726">      // read short circuit, for hdfs</span>
<span class="source-line-no">727</span><span id="line-727">      conf.set("dfs.block.local-path-access.user", curUser);</span>
<span class="source-line-no">728</span><span id="line-728">      // read short circuit, for hbase</span>
<span class="source-line-no">729</span><span id="line-729">      conf.setBoolean("dfs.client.read.shortcircuit", true);</span>
<span class="source-line-no">730</span><span id="line-730">      // Skip checking checksum, for the hdfs client and the datanode</span>
<span class="source-line-no">731</span><span id="line-731">      conf.setBoolean("dfs.client.read.shortcircuit.skip.checksum", true);</span>
<span class="source-line-no">732</span><span id="line-732">    } else {</span>
<span class="source-line-no">733</span><span id="line-733">      LOG.info("read short circuit is OFF");</span>
<span class="source-line-no">734</span><span id="line-734">    }</span>
<span class="source-line-no">735</span><span id="line-735">  }</span>
<span class="source-line-no">736</span><span id="line-736"></span>
<span class="source-line-no">737</span><span id="line-737">  private String createDirAndSetProperty(final String property) {</span>
<span class="source-line-no">738</span><span id="line-738">    return createDirAndSetProperty(property, property);</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">  private String createDirAndSetProperty(final String relPath, String property) {</span>
<span class="source-line-no">742</span><span id="line-742">    String path = getDataTestDir(relPath).toString();</span>
<span class="source-line-no">743</span><span id="line-743">    System.setProperty(property, path);</span>
<span class="source-line-no">744</span><span id="line-744">    conf.set(property, path);</span>
<span class="source-line-no">745</span><span id="line-745">    new File(path).mkdirs();</span>
<span class="source-line-no">746</span><span id="line-746">    LOG.info("Setting " + property + " to " + path + " in system properties and HBase conf");</span>
<span class="source-line-no">747</span><span id="line-747">    return path;</span>
<span class="source-line-no">748</span><span id="line-748">  }</span>
<span class="source-line-no">749</span><span id="line-749"></span>
<span class="source-line-no">750</span><span id="line-750">  /**</span>
<span class="source-line-no">751</span><span id="line-751">   * Shuts down instance created by call to {@link #startMiniDFSCluster(int)} or does nothing.</span>
<span class="source-line-no">752</span><span id="line-752">   */</span>
<span class="source-line-no">753</span><span id="line-753">  public void shutdownMiniDFSCluster() throws IOException {</span>
<span class="source-line-no">754</span><span id="line-754">    if (this.dfsCluster != null) {</span>
<span class="source-line-no">755</span><span id="line-755">      // The below throws an exception per dn, AsynchronousCloseException.</span>
<span class="source-line-no">756</span><span id="line-756">      this.dfsCluster.shutdown();</span>
<span class="source-line-no">757</span><span id="line-757">      dfsCluster = null;</span>
<span class="source-line-no">758</span><span id="line-758">      // It is possible that the dfs cluster is set through setDFSCluster method, where we will not</span>
<span class="source-line-no">759</span><span id="line-759">      // have a fixer</span>
<span class="source-line-no">760</span><span id="line-760">      if (dfsClusterFixer != null) {</span>
<span class="source-line-no">761</span><span id="line-761">        this.dfsClusterFixer.shutdown();</span>
<span class="source-line-no">762</span><span id="line-762">        dfsClusterFixer = null;</span>
<span class="source-line-no">763</span><span id="line-763">      }</span>
<span class="source-line-no">764</span><span id="line-764">      dataTestDirOnTestFS = null;</span>
<span class="source-line-no">765</span><span id="line-765">      CommonFSUtils.setFsDefault(this.conf, new Path("file:///"));</span>
<span class="source-line-no">766</span><span id="line-766">    }</span>
<span class="source-line-no">767</span><span id="line-767">  }</span>
<span class="source-line-no">768</span><span id="line-768"></span>
<span class="source-line-no">769</span><span id="line-769">  /**</span>
<span class="source-line-no">770</span><span id="line-770">   * Start up a minicluster of hbase, dfs, and zookeeper where WAL's walDir is created separately.</span>
<span class="source-line-no">771</span><span id="line-771">   * All other options will use default values, defined in {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">772</span><span id="line-772">   * @param createWALDir Whether to create a new WAL directory.</span>
<span class="source-line-no">773</span><span id="line-773">   * @return The mini HBase cluster created.</span>
<span class="source-line-no">774</span><span id="line-774">   * @see #shutdownMiniCluster()</span>
<span class="source-line-no">775</span><span id="line-775">   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use</span>
<span class="source-line-no">776</span><span id="line-776">   *             {@link #startMiniCluster(StartMiniClusterOption)} instead.</span>
<span class="source-line-no">777</span><span id="line-777">   * @see #startMiniCluster(StartMiniClusterOption)</span>
<span class="source-line-no">778</span><span id="line-778">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;</span>
<span class="source-line-no">779</span><span id="line-779">   */</span>
<span class="source-line-no">780</span><span id="line-780">  @Deprecated</span>
<span class="source-line-no">781</span><span id="line-781">  public MiniHBaseCluster startMiniCluster(boolean createWALDir) throws Exception {</span>
<span class="source-line-no">782</span><span id="line-782">    StartMiniClusterOption option =</span>
<span class="source-line-no">783</span><span id="line-783">      StartMiniClusterOption.builder().createWALDir(createWALDir).build();</span>
<span class="source-line-no">784</span><span id="line-784">    return startMiniCluster(option);</span>
<span class="source-line-no">785</span><span id="line-785">  }</span>
<span class="source-line-no">786</span><span id="line-786"></span>
<span class="source-line-no">787</span><span id="line-787">  /**</span>
<span class="source-line-no">788</span><span id="line-788">   * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,</span>
<span class="source-line-no">789</span><span id="line-789">   * defined in {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">790</span><span id="line-790">   * @param numSlaves     Slave node number, for both HBase region server and HDFS data node.</span>
<span class="source-line-no">791</span><span id="line-791">   * @param createRootDir Whether to create a new root or data directory path.</span>
<span class="source-line-no">792</span><span id="line-792">   * @return The mini HBase cluster created.</span>
<span class="source-line-no">793</span><span id="line-793">   * @see #shutdownMiniCluster()</span>
<span class="source-line-no">794</span><span id="line-794">   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use</span>
<span class="source-line-no">795</span><span id="line-795">   *             {@link #startMiniCluster(StartMiniClusterOption)} instead.</span>
<span class="source-line-no">796</span><span id="line-796">   * @see #startMiniCluster(StartMiniClusterOption)</span>
<span class="source-line-no">797</span><span id="line-797">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;</span>
<span class="source-line-no">798</span><span id="line-798">   */</span>
<span class="source-line-no">799</span><span id="line-799">  @Deprecated</span>
<span class="source-line-no">800</span><span id="line-800">  public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir) throws Exception {</span>
<span class="source-line-no">801</span><span id="line-801">    StartMiniClusterOption option = StartMiniClusterOption.builder().numRegionServers(numSlaves)</span>
<span class="source-line-no">802</span><span id="line-802">      .numDataNodes(numSlaves).createRootDir(createRootDir).build();</span>
<span class="source-line-no">803</span><span id="line-803">    return startMiniCluster(option);</span>
<span class="source-line-no">804</span><span id="line-804">  }</span>
<span class="source-line-no">805</span><span id="line-805"></span>
<span class="source-line-no">806</span><span id="line-806">  /**</span>
<span class="source-line-no">807</span><span id="line-807">   * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,</span>
<span class="source-line-no">808</span><span id="line-808">   * defined in {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">809</span><span id="line-809">   * @param numSlaves     Slave node number, for both HBase region server and HDFS data node.</span>
<span class="source-line-no">810</span><span id="line-810">   * @param createRootDir Whether to create a new root or data directory path.</span>
<span class="source-line-no">811</span><span id="line-811">   * @param createWALDir  Whether to create a new WAL directory.</span>
<span class="source-line-no">812</span><span id="line-812">   * @return The mini HBase cluster created.</span>
<span class="source-line-no">813</span><span id="line-813">   * @see #shutdownMiniCluster()</span>
<span class="source-line-no">814</span><span id="line-814">   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use</span>
<span class="source-line-no">815</span><span id="line-815">   *             {@link #startMiniCluster(StartMiniClusterOption)} instead.</span>
<span class="source-line-no">816</span><span id="line-816">   * @see #startMiniCluster(StartMiniClusterOption)</span>
<span class="source-line-no">817</span><span id="line-817">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;</span>
<span class="source-line-no">818</span><span id="line-818">   */</span>
<span class="source-line-no">819</span><span id="line-819">  @Deprecated</span>
<span class="source-line-no">820</span><span id="line-820">  public MiniHBaseCluster startMiniCluster(int numSlaves, boolean createRootDir,</span>
<span class="source-line-no">821</span><span id="line-821">    boolean createWALDir) throws Exception {</span>
<span class="source-line-no">822</span><span id="line-822">    StartMiniClusterOption option = StartMiniClusterOption.builder().numRegionServers(numSlaves)</span>
<span class="source-line-no">823</span><span id="line-823">      .numDataNodes(numSlaves).createRootDir(createRootDir).createWALDir(createWALDir).build();</span>
<span class="source-line-no">824</span><span id="line-824">    return startMiniCluster(option);</span>
<span class="source-line-no">825</span><span id="line-825">  }</span>
<span class="source-line-no">826</span><span id="line-826"></span>
<span class="source-line-no">827</span><span id="line-827">  /**</span>
<span class="source-line-no">828</span><span id="line-828">   * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,</span>
<span class="source-line-no">829</span><span id="line-829">   * defined in {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">830</span><span id="line-830">   * @param numMasters    Master node number.</span>
<span class="source-line-no">831</span><span id="line-831">   * @param numSlaves     Slave node number, for both HBase region server and HDFS data node.</span>
<span class="source-line-no">832</span><span id="line-832">   * @param createRootDir Whether to create a new root or data directory path.</span>
<span class="source-line-no">833</span><span id="line-833">   * @return The mini HBase cluster created.</span>
<span class="source-line-no">834</span><span id="line-834">   * @see #shutdownMiniCluster()</span>
<span class="source-line-no">835</span><span id="line-835">   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use</span>
<span class="source-line-no">836</span><span id="line-836">   *             {@link #startMiniCluster(StartMiniClusterOption)} instead.</span>
<span class="source-line-no">837</span><span id="line-837">   * @see #startMiniCluster(StartMiniClusterOption)</span>
<span class="source-line-no">838</span><span id="line-838">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;</span>
<span class="source-line-no">839</span><span id="line-839">   */</span>
<span class="source-line-no">840</span><span id="line-840">  @Deprecated</span>
<span class="source-line-no">841</span><span id="line-841">  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, boolean createRootDir)</span>
<span class="source-line-no">842</span><span id="line-842">    throws Exception {</span>
<span class="source-line-no">843</span><span id="line-843">    StartMiniClusterOption option = StartMiniClusterOption.builder().numMasters(numMasters)</span>
<span class="source-line-no">844</span><span id="line-844">      .numRegionServers(numSlaves).createRootDir(createRootDir).numDataNodes(numSlaves).build();</span>
<span class="source-line-no">845</span><span id="line-845">    return startMiniCluster(option);</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">  /**</span>
<span class="source-line-no">849</span><span id="line-849">   * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,</span>
<span class="source-line-no">850</span><span id="line-850">   * defined in {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">851</span><span id="line-851">   * @param numMasters Master node number.</span>
<span class="source-line-no">852</span><span id="line-852">   * @param numSlaves  Slave node number, for both HBase region server and HDFS data node.</span>
<span class="source-line-no">853</span><span id="line-853">   * @return The mini HBase cluster created.</span>
<span class="source-line-no">854</span><span id="line-854">   * @see #shutdownMiniCluster()</span>
<span class="source-line-no">855</span><span id="line-855">   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use</span>
<span class="source-line-no">856</span><span id="line-856">   *             {@link #startMiniCluster(StartMiniClusterOption)} instead.</span>
<span class="source-line-no">857</span><span id="line-857">   * @see #startMiniCluster(StartMiniClusterOption)</span>
<span class="source-line-no">858</span><span id="line-858">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;</span>
<span class="source-line-no">859</span><span id="line-859">   */</span>
<span class="source-line-no">860</span><span id="line-860">  @Deprecated</span>
<span class="source-line-no">861</span><span id="line-861">  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves) throws Exception {</span>
<span class="source-line-no">862</span><span id="line-862">    StartMiniClusterOption option = StartMiniClusterOption.builder().numMasters(numMasters)</span>
<span class="source-line-no">863</span><span id="line-863">      .numRegionServers(numSlaves).numDataNodes(numSlaves).build();</span>
<span class="source-line-no">864</span><span id="line-864">    return startMiniCluster(option);</span>
<span class="source-line-no">865</span><span id="line-865">  }</span>
<span class="source-line-no">866</span><span id="line-866"></span>
<span class="source-line-no">867</span><span id="line-867">  /**</span>
<span class="source-line-no">868</span><span id="line-868">   * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,</span>
<span class="source-line-no">869</span><span id="line-869">   * defined in {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">870</span><span id="line-870">   * @param numMasters    Master node number.</span>
<span class="source-line-no">871</span><span id="line-871">   * @param numSlaves     Slave node number, for both HBase region server and HDFS data node.</span>
<span class="source-line-no">872</span><span id="line-872">   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite</span>
<span class="source-line-no">873</span><span id="line-873">   *                      HDFS data node number.</span>
<span class="source-line-no">874</span><span id="line-874">   * @param createRootDir Whether to create a new root or data directory path.</span>
<span class="source-line-no">875</span><span id="line-875">   * @return The mini HBase cluster created.</span>
<span class="source-line-no">876</span><span id="line-876">   * @see #shutdownMiniCluster()</span>
<span class="source-line-no">877</span><span id="line-877">   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use</span>
<span class="source-line-no">878</span><span id="line-878">   *             {@link #startMiniCluster(StartMiniClusterOption)} instead.</span>
<span class="source-line-no">879</span><span id="line-879">   * @see #startMiniCluster(StartMiniClusterOption)</span>
<span class="source-line-no">880</span><span id="line-880">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;</span>
<span class="source-line-no">881</span><span id="line-881">   */</span>
<span class="source-line-no">882</span><span id="line-882">  @Deprecated</span>
<span class="source-line-no">883</span><span id="line-883">  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,</span>
<span class="source-line-no">884</span><span id="line-884">    boolean createRootDir) throws Exception {</span>
<span class="source-line-no">885</span><span id="line-885">    StartMiniClusterOption option =</span>
<span class="source-line-no">886</span><span id="line-886">      StartMiniClusterOption.builder().numMasters(numMasters).numRegionServers(numSlaves)</span>
<span class="source-line-no">887</span><span id="line-887">        .createRootDir(createRootDir).numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();</span>
<span class="source-line-no">888</span><span id="line-888">    return startMiniCluster(option);</span>
<span class="source-line-no">889</span><span id="line-889">  }</span>
<span class="source-line-no">890</span><span id="line-890"></span>
<span class="source-line-no">891</span><span id="line-891">  /**</span>
<span class="source-line-no">892</span><span id="line-892">   * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,</span>
<span class="source-line-no">893</span><span id="line-893">   * defined in {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">894</span><span id="line-894">   * @param numMasters    Master node number.</span>
<span class="source-line-no">895</span><span id="line-895">   * @param numSlaves     Slave node number, for both HBase region server and HDFS data node.</span>
<span class="source-line-no">896</span><span id="line-896">   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite</span>
<span class="source-line-no">897</span><span id="line-897">   *                      HDFS data node number.</span>
<span class="source-line-no">898</span><span id="line-898">   * @return The mini HBase cluster created.</span>
<span class="source-line-no">899</span><span id="line-899">   * @see #shutdownMiniCluster()</span>
<span class="source-line-no">900</span><span id="line-900">   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use</span>
<span class="source-line-no">901</span><span id="line-901">   *             {@link #startMiniCluster(StartMiniClusterOption)} instead.</span>
<span class="source-line-no">902</span><span id="line-902">   * @see #startMiniCluster(StartMiniClusterOption)</span>
<span class="source-line-no">903</span><span id="line-903">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;</span>
<span class="source-line-no">904</span><span id="line-904">   */</span>
<span class="source-line-no">905</span><span id="line-905">  @Deprecated</span>
<span class="source-line-no">906</span><span id="line-906">  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts)</span>
<span class="source-line-no">907</span><span id="line-907">    throws Exception {</span>
<span class="source-line-no">908</span><span id="line-908">    StartMiniClusterOption option = StartMiniClusterOption.builder().numMasters(numMasters)</span>
<span class="source-line-no">909</span><span id="line-909">      .numRegionServers(numSlaves).numDataNodes(numSlaves).dataNodeHosts(dataNodeHosts).build();</span>
<span class="source-line-no">910</span><span id="line-910">    return startMiniCluster(option);</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">  /**</span>
<span class="source-line-no">914</span><span id="line-914">   * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,</span>
<span class="source-line-no">915</span><span id="line-915">   * defined in {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">916</span><span id="line-916">   * @param numMasters       Master node number.</span>
<span class="source-line-no">917</span><span id="line-917">   * @param numRegionServers Number of region servers.</span>
<span class="source-line-no">918</span><span id="line-918">   * @param numDataNodes     Number of datanodes.</span>
<span class="source-line-no">919</span><span id="line-919">   * @return The mini HBase cluster created.</span>
<span class="source-line-no">920</span><span id="line-920">   * @see #shutdownMiniCluster()</span>
<span class="source-line-no">921</span><span id="line-921">   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use</span>
<span class="source-line-no">922</span><span id="line-922">   *             {@link #startMiniCluster(StartMiniClusterOption)} instead.</span>
<span class="source-line-no">923</span><span id="line-923">   * @see #startMiniCluster(StartMiniClusterOption)</span>
<span class="source-line-no">924</span><span id="line-924">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;</span>
<span class="source-line-no">925</span><span id="line-925">   */</span>
<span class="source-line-no">926</span><span id="line-926">  @Deprecated</span>
<span class="source-line-no">927</span><span id="line-927">  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes)</span>
<span class="source-line-no">928</span><span id="line-928">    throws Exception {</span>
<span class="source-line-no">929</span><span id="line-929">    StartMiniClusterOption option = StartMiniClusterOption.builder().numMasters(numMasters)</span>
<span class="source-line-no">930</span><span id="line-930">      .numRegionServers(numRegionServers).numDataNodes(numDataNodes).build();</span>
<span class="source-line-no">931</span><span id="line-931">    return startMiniCluster(option);</span>
<span class="source-line-no">932</span><span id="line-932">  }</span>
<span class="source-line-no">933</span><span id="line-933"></span>
<span class="source-line-no">934</span><span id="line-934">  /**</span>
<span class="source-line-no">935</span><span id="line-935">   * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,</span>
<span class="source-line-no">936</span><span id="line-936">   * defined in {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">937</span><span id="line-937">   * @param numMasters    Master node number.</span>
<span class="source-line-no">938</span><span id="line-938">   * @param numSlaves     Slave node number, for both HBase region server and HDFS data node.</span>
<span class="source-line-no">939</span><span id="line-939">   * @param dataNodeHosts The hostnames of DataNodes to run on. If not null, its size will overwrite</span>
<span class="source-line-no">940</span><span id="line-940">   *                      HDFS data node number.</span>
<span class="source-line-no">941</span><span id="line-941">   * @param masterClass   The class to use as HMaster, or null for default.</span>
<span class="source-line-no">942</span><span id="line-942">   * @param rsClass       The class to use as HRegionServer, or null for default.</span>
<span class="source-line-no">943</span><span id="line-943">   * @return The mini HBase cluster created.</span>
<span class="source-line-no">944</span><span id="line-944">   * @see #shutdownMiniCluster()</span>
<span class="source-line-no">945</span><span id="line-945">   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use</span>
<span class="source-line-no">946</span><span id="line-946">   *             {@link #startMiniCluster(StartMiniClusterOption)} instead.</span>
<span class="source-line-no">947</span><span id="line-947">   * @see #startMiniCluster(StartMiniClusterOption)</span>
<span class="source-line-no">948</span><span id="line-948">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;</span>
<span class="source-line-no">949</span><span id="line-949">   */</span>
<span class="source-line-no">950</span><span id="line-950">  @Deprecated</span>
<span class="source-line-no">951</span><span id="line-951">  public MiniHBaseCluster startMiniCluster(int numMasters, int numSlaves, String[] dataNodeHosts,</span>
<span class="source-line-no">952</span><span id="line-952">    Class&lt;? extends HMaster&gt; masterClass,</span>
<span class="source-line-no">953</span><span id="line-953">    Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass) throws Exception {</span>
<span class="source-line-no">954</span><span id="line-954">    StartMiniClusterOption option = StartMiniClusterOption.builder().numMasters(numMasters)</span>
<span class="source-line-no">955</span><span id="line-955">      .masterClass(masterClass).numRegionServers(numSlaves).rsClass(rsClass).numDataNodes(numSlaves)</span>
<span class="source-line-no">956</span><span id="line-956">      .dataNodeHosts(dataNodeHosts).build();</span>
<span class="source-line-no">957</span><span id="line-957">    return startMiniCluster(option);</span>
<span class="source-line-no">958</span><span id="line-958">  }</span>
<span class="source-line-no">959</span><span id="line-959"></span>
<span class="source-line-no">960</span><span id="line-960">  /**</span>
<span class="source-line-no">961</span><span id="line-961">   * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,</span>
<span class="source-line-no">962</span><span id="line-962">   * defined in {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">963</span><span id="line-963">   * @param numMasters       Master node number.</span>
<span class="source-line-no">964</span><span id="line-964">   * @param numRegionServers Number of region servers.</span>
<span class="source-line-no">965</span><span id="line-965">   * @param numDataNodes     Number of datanodes.</span>
<span class="source-line-no">966</span><span id="line-966">   * @param dataNodeHosts    The hostnames of DataNodes to run on. If not null, its size will</span>
<span class="source-line-no">967</span><span id="line-967">   *                         overwrite HDFS data node number.</span>
<span class="source-line-no">968</span><span id="line-968">   * @param masterClass      The class to use as HMaster, or null for default.</span>
<span class="source-line-no">969</span><span id="line-969">   * @param rsClass          The class to use as HRegionServer, or null for default.</span>
<span class="source-line-no">970</span><span id="line-970">   * @return The mini HBase cluster created.</span>
<span class="source-line-no">971</span><span id="line-971">   * @see #shutdownMiniCluster()</span>
<span class="source-line-no">972</span><span id="line-972">   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use</span>
<span class="source-line-no">973</span><span id="line-973">   *             {@link #startMiniCluster(StartMiniClusterOption)} instead.</span>
<span class="source-line-no">974</span><span id="line-974">   * @see #startMiniCluster(StartMiniClusterOption)</span>
<span class="source-line-no">975</span><span id="line-975">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;</span>
<span class="source-line-no">976</span><span id="line-976">   */</span>
<span class="source-line-no">977</span><span id="line-977">  @Deprecated</span>
<span class="source-line-no">978</span><span id="line-978">  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,</span>
<span class="source-line-no">979</span><span id="line-979">    String[] dataNodeHosts, Class&lt;? extends HMaster&gt; masterClass,</span>
<span class="source-line-no">980</span><span id="line-980">    Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass) throws Exception {</span>
<span class="source-line-no">981</span><span id="line-981">    StartMiniClusterOption option = StartMiniClusterOption.builder().numMasters(numMasters)</span>
<span class="source-line-no">982</span><span id="line-982">      .masterClass(masterClass).numRegionServers(numRegionServers).rsClass(rsClass)</span>
<span class="source-line-no">983</span><span id="line-983">      .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts).build();</span>
<span class="source-line-no">984</span><span id="line-984">    return startMiniCluster(option);</span>
<span class="source-line-no">985</span><span id="line-985">  }</span>
<span class="source-line-no">986</span><span id="line-986"></span>
<span class="source-line-no">987</span><span id="line-987">  /**</span>
<span class="source-line-no">988</span><span id="line-988">   * Start up a minicluster of hbase, dfs, and zookeeper. All other options will use default values,</span>
<span class="source-line-no">989</span><span id="line-989">   * defined in {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">990</span><span id="line-990">   * @param numMasters       Master node number.</span>
<span class="source-line-no">991</span><span id="line-991">   * @param numRegionServers Number of region servers.</span>
<span class="source-line-no">992</span><span id="line-992">   * @param numDataNodes     Number of datanodes.</span>
<span class="source-line-no">993</span><span id="line-993">   * @param dataNodeHosts    The hostnames of DataNodes to run on. If not null, its size will</span>
<span class="source-line-no">994</span><span id="line-994">   *                         overwrite HDFS data node number.</span>
<span class="source-line-no">995</span><span id="line-995">   * @param masterClass      The class to use as HMaster, or null for default.</span>
<span class="source-line-no">996</span><span id="line-996">   * @param rsClass          The class to use as HRegionServer, or null for default.</span>
<span class="source-line-no">997</span><span id="line-997">   * @param createRootDir    Whether to create a new root or data directory path.</span>
<span class="source-line-no">998</span><span id="line-998">   * @param createWALDir     Whether to create a new WAL directory.</span>
<span class="source-line-no">999</span><span id="line-999">   * @return The mini HBase cluster created.</span>
<span class="source-line-no">1000</span><span id="line-1000">   * @see #shutdownMiniCluster()</span>
<span class="source-line-no">1001</span><span id="line-1001">   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use</span>
<span class="source-line-no">1002</span><span id="line-1002">   *             {@link #startMiniCluster(StartMiniClusterOption)} instead.</span>
<span class="source-line-no">1003</span><span id="line-1003">   * @see #startMiniCluster(StartMiniClusterOption)</span>
<span class="source-line-no">1004</span><span id="line-1004">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;</span>
<span class="source-line-no">1005</span><span id="line-1005">   */</span>
<span class="source-line-no">1006</span><span id="line-1006">  @Deprecated</span>
<span class="source-line-no">1007</span><span id="line-1007">  public MiniHBaseCluster startMiniCluster(int numMasters, int numRegionServers, int numDataNodes,</span>
<span class="source-line-no">1008</span><span id="line-1008">    String[] dataNodeHosts, Class&lt;? extends HMaster&gt; masterClass,</span>
<span class="source-line-no">1009</span><span id="line-1009">    Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass, boolean createRootDir,</span>
<span class="source-line-no">1010</span><span id="line-1010">    boolean createWALDir) throws Exception {</span>
<span class="source-line-no">1011</span><span id="line-1011">    StartMiniClusterOption option = StartMiniClusterOption.builder().numMasters(numMasters)</span>
<span class="source-line-no">1012</span><span id="line-1012">      .masterClass(masterClass).numRegionServers(numRegionServers).rsClass(rsClass)</span>
<span class="source-line-no">1013</span><span id="line-1013">      .numDataNodes(numDataNodes).dataNodeHosts(dataNodeHosts).createRootDir(createRootDir)</span>
<span class="source-line-no">1014</span><span id="line-1014">      .createWALDir(createWALDir).build();</span>
<span class="source-line-no">1015</span><span id="line-1015">    return startMiniCluster(option);</span>
<span class="source-line-no">1016</span><span id="line-1016">  }</span>
<span class="source-line-no">1017</span><span id="line-1017"></span>
<span class="source-line-no">1018</span><span id="line-1018">  /**</span>
<span class="source-line-no">1019</span><span id="line-1019">   * Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number. All</span>
<span class="source-line-no">1020</span><span id="line-1020">   * other options will use default values, defined in {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">1021</span><span id="line-1021">   * @param numSlaves slave node number, for both HBase region server and HDFS data node.</span>
<span class="source-line-no">1022</span><span id="line-1022">   * @see #startMiniCluster(StartMiniClusterOption option)</span>
<span class="source-line-no">1023</span><span id="line-1023">   * @see #shutdownMiniDFSCluster()</span>
<span class="source-line-no">1024</span><span id="line-1024">   */</span>
<span class="source-line-no">1025</span><span id="line-1025">  public MiniHBaseCluster startMiniCluster(int numSlaves) throws Exception {</span>
<span class="source-line-no">1026</span><span id="line-1026">    StartMiniClusterOption option =</span>
<span class="source-line-no">1027</span><span id="line-1027">      StartMiniClusterOption.builder().numRegionServers(numSlaves).numDataNodes(numSlaves).build();</span>
<span class="source-line-no">1028</span><span id="line-1028">    return startMiniCluster(option);</span>
<span class="source-line-no">1029</span><span id="line-1029">  }</span>
<span class="source-line-no">1030</span><span id="line-1030"></span>
<span class="source-line-no">1031</span><span id="line-1031">  /**</span>
<span class="source-line-no">1032</span><span id="line-1032">   * Start up a minicluster of hbase, dfs and zookeeper all using default options. Option default</span>
<span class="source-line-no">1033</span><span id="line-1033">   * value can be found in {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">1034</span><span id="line-1034">   * @see #startMiniCluster(StartMiniClusterOption option)</span>
<span class="source-line-no">1035</span><span id="line-1035">   * @see #shutdownMiniDFSCluster()</span>
<span class="source-line-no">1036</span><span id="line-1036">   */</span>
<span class="source-line-no">1037</span><span id="line-1037">  public MiniHBaseCluster startMiniCluster() throws Exception {</span>
<span class="source-line-no">1038</span><span id="line-1038">    return startMiniCluster(StartMiniClusterOption.builder().build());</span>
<span class="source-line-no">1039</span><span id="line-1039">  }</span>
<span class="source-line-no">1040</span><span id="line-1040"></span>
<span class="source-line-no">1041</span><span id="line-1041">  /**</span>
<span class="source-line-no">1042</span><span id="line-1042">   * Start up a mini cluster of hbase, optionally dfs and zookeeper if needed. It modifies</span>
<span class="source-line-no">1043</span><span id="line-1043">   * Configuration. It homes the cluster data directory under a random subdirectory in a directory</span>
<span class="source-line-no">1044</span><span id="line-1044">   * under System property test.build.data, to be cleaned up on exit.</span>
<span class="source-line-no">1045</span><span id="line-1045">   * @see #shutdownMiniDFSCluster()</span>
<span class="source-line-no">1046</span><span id="line-1046">   */</span>
<span class="source-line-no">1047</span><span id="line-1047">  public MiniHBaseCluster startMiniCluster(StartMiniClusterOption option) throws Exception {</span>
<span class="source-line-no">1048</span><span id="line-1048">    LOG.info("Starting up minicluster with option: {}", option);</span>
<span class="source-line-no">1049</span><span id="line-1049"></span>
<span class="source-line-no">1050</span><span id="line-1050">    // If we already put up a cluster, fail.</span>
<span class="source-line-no">1051</span><span id="line-1051">    if (miniClusterRunning) {</span>
<span class="source-line-no">1052</span><span id="line-1052">      throw new IllegalStateException("A mini-cluster is already running");</span>
<span class="source-line-no">1053</span><span id="line-1053">    }</span>
<span class="source-line-no">1054</span><span id="line-1054">    miniClusterRunning = true;</span>
<span class="source-line-no">1055</span><span id="line-1055"></span>
<span class="source-line-no">1056</span><span id="line-1056">    setupClusterTestDir();</span>
<span class="source-line-no">1057</span><span id="line-1057"></span>
<span class="source-line-no">1058</span><span id="line-1058">    // Bring up mini dfs cluster. This spews a bunch of warnings about missing</span>
<span class="source-line-no">1059</span><span id="line-1059">    // scheme. Complaints are 'Scheme is undefined for build/test/data/dfs/name1'.</span>
<span class="source-line-no">1060</span><span id="line-1060">    if (dfsCluster == null) {</span>
<span class="source-line-no">1061</span><span id="line-1061">      LOG.info("STARTING DFS");</span>
<span class="source-line-no">1062</span><span id="line-1062">      dfsCluster = startMiniDFSCluster(option.getNumDataNodes(), option.getDataNodeHosts());</span>
<span class="source-line-no">1063</span><span id="line-1063">    } else {</span>
<span class="source-line-no">1064</span><span id="line-1064">      LOG.info("NOT STARTING DFS");</span>
<span class="source-line-no">1065</span><span id="line-1065">    }</span>
<span class="source-line-no">1066</span><span id="line-1066"></span>
<span class="source-line-no">1067</span><span id="line-1067">    // Start up a zk cluster.</span>
<span class="source-line-no">1068</span><span id="line-1068">    if (getZkCluster() == null) {</span>
<span class="source-line-no">1069</span><span id="line-1069">      startMiniZKCluster(option.getNumZkServers());</span>
<span class="source-line-no">1070</span><span id="line-1070">    }</span>
<span class="source-line-no">1071</span><span id="line-1071"></span>
<span class="source-line-no">1072</span><span id="line-1072">    // Start the MiniHBaseCluster</span>
<span class="source-line-no">1073</span><span id="line-1073">    return startMiniHBaseCluster(option);</span>
<span class="source-line-no">1074</span><span id="line-1074">  }</span>
<span class="source-line-no">1075</span><span id="line-1075"></span>
<span class="source-line-no">1076</span><span id="line-1076">  /**</span>
<span class="source-line-no">1077</span><span id="line-1077">   * Starts up mini hbase cluster. Usually you won't want this. You'll usually want</span>
<span class="source-line-no">1078</span><span id="line-1078">   * {@link #startMiniCluster()}. This is useful when doing stepped startup of clusters.</span>
<span class="source-line-no">1079</span><span id="line-1079">   * @return Reference to the hbase mini hbase cluster.</span>
<span class="source-line-no">1080</span><span id="line-1080">   * @see #startMiniCluster(StartMiniClusterOption)</span>
<span class="source-line-no">1081</span><span id="line-1081">   * @see #shutdownMiniHBaseCluster()</span>
<span class="source-line-no">1082</span><span id="line-1082">   */</span>
<span class="source-line-no">1083</span><span id="line-1083">  public MiniHBaseCluster startMiniHBaseCluster(StartMiniClusterOption option)</span>
<span class="source-line-no">1084</span><span id="line-1084">    throws IOException, InterruptedException {</span>
<span class="source-line-no">1085</span><span id="line-1085">    // Now do the mini hbase cluster. Set the hbase.rootdir in config.</span>
<span class="source-line-no">1086</span><span id="line-1086">    createRootDir(option.isCreateRootDir());</span>
<span class="source-line-no">1087</span><span id="line-1087">    if (option.isCreateWALDir()) {</span>
<span class="source-line-no">1088</span><span id="line-1088">      createWALRootDir();</span>
<span class="source-line-no">1089</span><span id="line-1089">    }</span>
<span class="source-line-no">1090</span><span id="line-1090">    // Set the hbase.fs.tmp.dir config to make sure that we have some default value. This is</span>
<span class="source-line-no">1091</span><span id="line-1091">    // for tests that do not read hbase-defaults.xml</span>
<span class="source-line-no">1092</span><span id="line-1092">    setHBaseFsTmpDir();</span>
<span class="source-line-no">1093</span><span id="line-1093"></span>
<span class="source-line-no">1094</span><span id="line-1094">    // These settings will make the server waits until this exact number of</span>
<span class="source-line-no">1095</span><span id="line-1095">    // regions servers are connected.</span>
<span class="source-line-no">1096</span><span id="line-1096">    if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1) == -1) {</span>
<span class="source-line-no">1097</span><span id="line-1097">      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, option.getNumRegionServers());</span>
<span class="source-line-no">1098</span><span id="line-1098">    }</span>
<span class="source-line-no">1099</span><span id="line-1099">    if (conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1) == -1) {</span>
<span class="source-line-no">1100</span><span id="line-1100">      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, option.getNumRegionServers());</span>
<span class="source-line-no">1101</span><span id="line-1101">    }</span>
<span class="source-line-no">1102</span><span id="line-1102"></span>
<span class="source-line-no">1103</span><span id="line-1103">    Configuration c = new Configuration(this.conf);</span>
<span class="source-line-no">1104</span><span id="line-1104">    this.hbaseCluster = new MiniHBaseCluster(c, option.getNumMasters(),</span>
<span class="source-line-no">1105</span><span id="line-1105">      option.getNumAlwaysStandByMasters(), option.getNumRegionServers(), option.getRsPorts(),</span>
<span class="source-line-no">1106</span><span id="line-1106">      option.getMasterClass(), option.getRsClass());</span>
<span class="source-line-no">1107</span><span id="line-1107">    // Populate the master address configuration from mini cluster configuration.</span>
<span class="source-line-no">1108</span><span id="line-1108">    conf.set(HConstants.MASTER_ADDRS_KEY, MasterRegistry.getMasterAddr(c));</span>
<span class="source-line-no">1109</span><span id="line-1109">    // Don't leave here till we've done a successful scan of the hbase:meta</span>
<span class="source-line-no">1110</span><span id="line-1110">    try (Table t = getConnection().getTable(TableName.META_TABLE_NAME);</span>
<span class="source-line-no">1111</span><span id="line-1111">      ResultScanner s = t.getScanner(new Scan())) {</span>
<span class="source-line-no">1112</span><span id="line-1112">      for (;;) {</span>
<span class="source-line-no">1113</span><span id="line-1113">        if (s.next() == null) {</span>
<span class="source-line-no">1114</span><span id="line-1114">          break;</span>
<span class="source-line-no">1115</span><span id="line-1115">        }</span>
<span class="source-line-no">1116</span><span id="line-1116">      }</span>
<span class="source-line-no">1117</span><span id="line-1117">    }</span>
<span class="source-line-no">1118</span><span id="line-1118"></span>
<span class="source-line-no">1119</span><span id="line-1119">    getAdmin(); // create immediately the hbaseAdmin</span>
<span class="source-line-no">1120</span><span id="line-1120">    LOG.info("Minicluster is up; activeMaster={}", getHBaseCluster().getMaster());</span>
<span class="source-line-no">1121</span><span id="line-1121"></span>
<span class="source-line-no">1122</span><span id="line-1122">    return (MiniHBaseCluster) hbaseCluster;</span>
<span class="source-line-no">1123</span><span id="line-1123">  }</span>
<span class="source-line-no">1124</span><span id="line-1124"></span>
<span class="source-line-no">1125</span><span id="line-1125">  /**</span>
<span class="source-line-no">1126</span><span id="line-1126">   * Starts up mini hbase cluster using default options. Default options can be found in</span>
<span class="source-line-no">1127</span><span id="line-1127">   * {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">1128</span><span id="line-1128">   * @see #startMiniHBaseCluster(StartMiniClusterOption)</span>
<span class="source-line-no">1129</span><span id="line-1129">   * @see #shutdownMiniHBaseCluster()</span>
<span class="source-line-no">1130</span><span id="line-1130">   */</span>
<span class="source-line-no">1131</span><span id="line-1131">  public MiniHBaseCluster startMiniHBaseCluster() throws IOException, InterruptedException {</span>
<span class="source-line-no">1132</span><span id="line-1132">    return startMiniHBaseCluster(StartMiniClusterOption.builder().build());</span>
<span class="source-line-no">1133</span><span id="line-1133">  }</span>
<span class="source-line-no">1134</span><span id="line-1134"></span>
<span class="source-line-no">1135</span><span id="line-1135">  /**</span>
<span class="source-line-no">1136</span><span id="line-1136">   * Starts up mini hbase cluster. Usually you won't want this. You'll usually want</span>
<span class="source-line-no">1137</span><span id="line-1137">   * {@link #startMiniCluster()}. All other options will use default values, defined in</span>
<span class="source-line-no">1138</span><span id="line-1138">   * {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">1139</span><span id="line-1139">   * @param numMasters       Master node number.</span>
<span class="source-line-no">1140</span><span id="line-1140">   * @param numRegionServers Number of region servers.</span>
<span class="source-line-no">1141</span><span id="line-1141">   * @return The mini HBase cluster created.</span>
<span class="source-line-no">1142</span><span id="line-1142">   * @see #shutdownMiniHBaseCluster()</span>
<span class="source-line-no">1143</span><span id="line-1143">   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use</span>
<span class="source-line-no">1144</span><span id="line-1144">   *             {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.</span>
<span class="source-line-no">1145</span><span id="line-1145">   * @see #startMiniHBaseCluster(StartMiniClusterOption)</span>
<span class="source-line-no">1146</span><span id="line-1146">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;</span>
<span class="source-line-no">1147</span><span id="line-1147">   */</span>
<span class="source-line-no">1148</span><span id="line-1148">  @Deprecated</span>
<span class="source-line-no">1149</span><span id="line-1149">  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers)</span>
<span class="source-line-no">1150</span><span id="line-1150">    throws IOException, InterruptedException {</span>
<span class="source-line-no">1151</span><span id="line-1151">    StartMiniClusterOption option = StartMiniClusterOption.builder().numMasters(numMasters)</span>
<span class="source-line-no">1152</span><span id="line-1152">      .numRegionServers(numRegionServers).build();</span>
<span class="source-line-no">1153</span><span id="line-1153">    return startMiniHBaseCluster(option);</span>
<span class="source-line-no">1154</span><span id="line-1154">  }</span>
<span class="source-line-no">1155</span><span id="line-1155"></span>
<span class="source-line-no">1156</span><span id="line-1156">  /**</span>
<span class="source-line-no">1157</span><span id="line-1157">   * Starts up mini hbase cluster. Usually you won't want this. You'll usually want</span>
<span class="source-line-no">1158</span><span id="line-1158">   * {@link #startMiniCluster()}. All other options will use default values, defined in</span>
<span class="source-line-no">1159</span><span id="line-1159">   * {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">1160</span><span id="line-1160">   * @param numMasters       Master node number.</span>
<span class="source-line-no">1161</span><span id="line-1161">   * @param numRegionServers Number of region servers.</span>
<span class="source-line-no">1162</span><span id="line-1162">   * @param rsPorts          Ports that RegionServer should use.</span>
<span class="source-line-no">1163</span><span id="line-1163">   * @return The mini HBase cluster created.</span>
<span class="source-line-no">1164</span><span id="line-1164">   * @see #shutdownMiniHBaseCluster()</span>
<span class="source-line-no">1165</span><span id="line-1165">   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use</span>
<span class="source-line-no">1166</span><span id="line-1166">   *             {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.</span>
<span class="source-line-no">1167</span><span id="line-1167">   * @see #startMiniHBaseCluster(StartMiniClusterOption)</span>
<span class="source-line-no">1168</span><span id="line-1168">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;</span>
<span class="source-line-no">1169</span><span id="line-1169">   */</span>
<span class="source-line-no">1170</span><span id="line-1170">  @Deprecated</span>
<span class="source-line-no">1171</span><span id="line-1171">  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,</span>
<span class="source-line-no">1172</span><span id="line-1172">    List&lt;Integer&gt; rsPorts) throws IOException, InterruptedException {</span>
<span class="source-line-no">1173</span><span id="line-1173">    StartMiniClusterOption option = StartMiniClusterOption.builder().numMasters(numMasters)</span>
<span class="source-line-no">1174</span><span id="line-1174">      .numRegionServers(numRegionServers).rsPorts(rsPorts).build();</span>
<span class="source-line-no">1175</span><span id="line-1175">    return startMiniHBaseCluster(option);</span>
<span class="source-line-no">1176</span><span id="line-1176">  }</span>
<span class="source-line-no">1177</span><span id="line-1177"></span>
<span class="source-line-no">1178</span><span id="line-1178">  /**</span>
<span class="source-line-no">1179</span><span id="line-1179">   * Starts up mini hbase cluster. Usually you won't want this. You'll usually want</span>
<span class="source-line-no">1180</span><span id="line-1180">   * {@link #startMiniCluster()}. All other options will use default values, defined in</span>
<span class="source-line-no">1181</span><span id="line-1181">   * {@link StartMiniClusterOption.Builder}.</span>
<span class="source-line-no">1182</span><span id="line-1182">   * @param numMasters       Master node number.</span>
<span class="source-line-no">1183</span><span id="line-1183">   * @param numRegionServers Number of region servers.</span>
<span class="source-line-no">1184</span><span id="line-1184">   * @param rsPorts          Ports that RegionServer should use.</span>
<span class="source-line-no">1185</span><span id="line-1185">   * @param masterClass      The class to use as HMaster, or null for default.</span>
<span class="source-line-no">1186</span><span id="line-1186">   * @param rsClass          The class to use as HRegionServer, or null for default.</span>
<span class="source-line-no">1187</span><span id="line-1187">   * @param createRootDir    Whether to create a new root or data directory path.</span>
<span class="source-line-no">1188</span><span id="line-1188">   * @param createWALDir     Whether to create a new WAL directory.</span>
<span class="source-line-no">1189</span><span id="line-1189">   * @return The mini HBase cluster created.</span>
<span class="source-line-no">1190</span><span id="line-1190">   * @see #shutdownMiniHBaseCluster()</span>
<span class="source-line-no">1191</span><span id="line-1191">   * @deprecated since 2.2.0 and will be removed in 4.0.0. Use</span>
<span class="source-line-no">1192</span><span id="line-1192">   *             {@link #startMiniHBaseCluster(StartMiniClusterOption)} instead.</span>
<span class="source-line-no">1193</span><span id="line-1193">   * @see #startMiniHBaseCluster(StartMiniClusterOption)</span>
<span class="source-line-no">1194</span><span id="line-1194">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-21071"&gt;HBASE-21071&lt;/a&gt;</span>
<span class="source-line-no">1195</span><span id="line-1195">   */</span>
<span class="source-line-no">1196</span><span id="line-1196">  @Deprecated</span>
<span class="source-line-no">1197</span><span id="line-1197">  public MiniHBaseCluster startMiniHBaseCluster(int numMasters, int numRegionServers,</span>
<span class="source-line-no">1198</span><span id="line-1198">    List&lt;Integer&gt; rsPorts, Class&lt;? extends HMaster&gt; masterClass,</span>
<span class="source-line-no">1199</span><span id="line-1199">    Class&lt;? extends MiniHBaseCluster.MiniHBaseClusterRegionServer&gt; rsClass, boolean createRootDir,</span>
<span class="source-line-no">1200</span><span id="line-1200">    boolean createWALDir) throws IOException, InterruptedException {</span>
<span class="source-line-no">1201</span><span id="line-1201">    StartMiniClusterOption option = StartMiniClusterOption.builder().numMasters(numMasters)</span>
<span class="source-line-no">1202</span><span id="line-1202">      .masterClass(masterClass).numRegionServers(numRegionServers).rsClass(rsClass).rsPorts(rsPorts)</span>
<span class="source-line-no">1203</span><span id="line-1203">      .createRootDir(createRootDir).createWALDir(createWALDir).build();</span>
<span class="source-line-no">1204</span><span id="line-1204">    return startMiniHBaseCluster(option);</span>
<span class="source-line-no">1205</span><span id="line-1205">  }</span>
<span class="source-line-no">1206</span><span id="line-1206"></span>
<span class="source-line-no">1207</span><span id="line-1207">  /**</span>
<span class="source-line-no">1208</span><span id="line-1208">   * Starts the hbase cluster up again after shutting it down previously in a test. Use this if you</span>
<span class="source-line-no">1209</span><span id="line-1209">   * want to keep dfs/zk up and just stop/start hbase.</span>
<span class="source-line-no">1210</span><span id="line-1210">   * @param servers number of region servers</span>
<span class="source-line-no">1211</span><span id="line-1211">   */</span>
<span class="source-line-no">1212</span><span id="line-1212">  public void restartHBaseCluster(int servers) throws IOException, InterruptedException {</span>
<span class="source-line-no">1213</span><span id="line-1213">    this.restartHBaseCluster(servers, null);</span>
<span class="source-line-no">1214</span><span id="line-1214">  }</span>
<span class="source-line-no">1215</span><span id="line-1215"></span>
<span class="source-line-no">1216</span><span id="line-1216">  public void restartHBaseCluster(int servers, List&lt;Integer&gt; ports)</span>
<span class="source-line-no">1217</span><span id="line-1217">    throws IOException, InterruptedException {</span>
<span class="source-line-no">1218</span><span id="line-1218">    StartMiniClusterOption option =</span>
<span class="source-line-no">1219</span><span id="line-1219">      StartMiniClusterOption.builder().numRegionServers(servers).rsPorts(ports).build();</span>
<span class="source-line-no">1220</span><span id="line-1220">    restartHBaseCluster(option);</span>
<span class="source-line-no">1221</span><span id="line-1221">    invalidateConnection();</span>
<span class="source-line-no">1222</span><span id="line-1222">  }</span>
<span class="source-line-no">1223</span><span id="line-1223"></span>
<span class="source-line-no">1224</span><span id="line-1224">  public void restartHBaseCluster(StartMiniClusterOption option)</span>
<span class="source-line-no">1225</span><span id="line-1225">    throws IOException, InterruptedException {</span>
<span class="source-line-no">1226</span><span id="line-1226">    closeConnection();</span>
<span class="source-line-no">1227</span><span id="line-1227">    this.hbaseCluster = new MiniHBaseCluster(this.conf, option.getNumMasters(),</span>
<span class="source-line-no">1228</span><span id="line-1228">      option.getNumAlwaysStandByMasters(), option.getNumRegionServers(), option.getRsPorts(),</span>
<span class="source-line-no">1229</span><span id="line-1229">      option.getMasterClass(), option.getRsClass());</span>
<span class="source-line-no">1230</span><span id="line-1230">    // Don't leave here till we've done a successful scan of the hbase:meta</span>
<span class="source-line-no">1231</span><span id="line-1231">    Connection conn = ConnectionFactory.createConnection(this.conf);</span>
<span class="source-line-no">1232</span><span id="line-1232">    Table t = conn.getTable(TableName.META_TABLE_NAME);</span>
<span class="source-line-no">1233</span><span id="line-1233">    ResultScanner s = t.getScanner(new Scan());</span>
<span class="source-line-no">1234</span><span id="line-1234">    while (s.next() != null) {</span>
<span class="source-line-no">1235</span><span id="line-1235">      // do nothing</span>
<span class="source-line-no">1236</span><span id="line-1236">    }</span>
<span class="source-line-no">1237</span><span id="line-1237">    LOG.info("HBase has been restarted");</span>
<span class="source-line-no">1238</span><span id="line-1238">    s.close();</span>
<span class="source-line-no">1239</span><span id="line-1239">    t.close();</span>
<span class="source-line-no">1240</span><span id="line-1240">    conn.close();</span>
<span class="source-line-no">1241</span><span id="line-1241">  }</span>
<span class="source-line-no">1242</span><span id="line-1242"></span>
<span class="source-line-no">1243</span><span id="line-1243">  /**</span>
<span class="source-line-no">1244</span><span id="line-1244">   * @return Current mini hbase cluster. Only has something in it after a call to</span>
<span class="source-line-no">1245</span><span id="line-1245">   *         {@link #startMiniCluster()}.</span>
<span class="source-line-no">1246</span><span id="line-1246">   * @see #startMiniCluster()</span>
<span class="source-line-no">1247</span><span id="line-1247">   */</span>
<span class="source-line-no">1248</span><span id="line-1248">  public MiniHBaseCluster getMiniHBaseCluster() {</span>
<span class="source-line-no">1249</span><span id="line-1249">    if (this.hbaseCluster == null || this.hbaseCluster instanceof MiniHBaseCluster) {</span>
<span class="source-line-no">1250</span><span id="line-1250">      return (MiniHBaseCluster) this.hbaseCluster;</span>
<span class="source-line-no">1251</span><span id="line-1251">    }</span>
<span class="source-line-no">1252</span><span id="line-1252">    throw new RuntimeException(</span>
<span class="source-line-no">1253</span><span id="line-1253">      hbaseCluster + " not an instance of " + MiniHBaseCluster.class.getName());</span>
<span class="source-line-no">1254</span><span id="line-1254">  }</span>
<span class="source-line-no">1255</span><span id="line-1255"></span>
<span class="source-line-no">1256</span><span id="line-1256">  /**</span>
<span class="source-line-no">1257</span><span id="line-1257">   * Stops mini hbase, zk, and hdfs clusters.</span>
<span class="source-line-no">1258</span><span id="line-1258">   * @see #startMiniCluster(int)</span>
<span class="source-line-no">1259</span><span id="line-1259">   */</span>
<span class="source-line-no">1260</span><span id="line-1260">  public void shutdownMiniCluster() throws IOException {</span>
<span class="source-line-no">1261</span><span id="line-1261">    LOG.info("Shutting down minicluster");</span>
<span class="source-line-no">1262</span><span id="line-1262">    shutdownMiniHBaseCluster();</span>
<span class="source-line-no">1263</span><span id="line-1263">    shutdownMiniDFSCluster();</span>
<span class="source-line-no">1264</span><span id="line-1264">    shutdownMiniZKCluster();</span>
<span class="source-line-no">1265</span><span id="line-1265"></span>
<span class="source-line-no">1266</span><span id="line-1266">    cleanupTestDir();</span>
<span class="source-line-no">1267</span><span id="line-1267">    miniClusterRunning = false;</span>
<span class="source-line-no">1268</span><span id="line-1268">    LOG.info("Minicluster is down");</span>
<span class="source-line-no">1269</span><span id="line-1269">  }</span>
<span class="source-line-no">1270</span><span id="line-1270"></span>
<span class="source-line-no">1271</span><span id="line-1271">  /**</span>
<span class="source-line-no">1272</span><span id="line-1272">   * Shutdown HBase mini cluster.Does not shutdown zk or dfs if running.</span>
<span class="source-line-no">1273</span><span id="line-1273">   * @throws java.io.IOException in case command is unsuccessful</span>
<span class="source-line-no">1274</span><span id="line-1274">   */</span>
<span class="source-line-no">1275</span><span id="line-1275">  public void shutdownMiniHBaseCluster() throws IOException {</span>
<span class="source-line-no">1276</span><span id="line-1276">    cleanup();</span>
<span class="source-line-no">1277</span><span id="line-1277">    if (this.hbaseCluster != null) {</span>
<span class="source-line-no">1278</span><span id="line-1278">      this.hbaseCluster.shutdown();</span>
<span class="source-line-no">1279</span><span id="line-1279">      // Wait till hbase is down before going on to shutdown zk.</span>
<span class="source-line-no">1280</span><span id="line-1280">      this.hbaseCluster.waitUntilShutDown();</span>
<span class="source-line-no">1281</span><span id="line-1281">      this.hbaseCluster = null;</span>
<span class="source-line-no">1282</span><span id="line-1282">    }</span>
<span class="source-line-no">1283</span><span id="line-1283">    if (zooKeeperWatcher != null) {</span>
<span class="source-line-no">1284</span><span id="line-1284">      zooKeeperWatcher.close();</span>
<span class="source-line-no">1285</span><span id="line-1285">      zooKeeperWatcher = null;</span>
<span class="source-line-no">1286</span><span id="line-1286">    }</span>
<span class="source-line-no">1287</span><span id="line-1287">  }</span>
<span class="source-line-no">1288</span><span id="line-1288"></span>
<span class="source-line-no">1289</span><span id="line-1289">  /**</span>
<span class="source-line-no">1290</span><span id="line-1290">   * Abruptly Shutdown HBase mini cluster. Does not shutdown zk or dfs if running.</span>
<span class="source-line-no">1291</span><span id="line-1291">   * @throws java.io.IOException throws in case command is unsuccessful</span>
<span class="source-line-no">1292</span><span id="line-1292">   */</span>
<span class="source-line-no">1293</span><span id="line-1293">  public void killMiniHBaseCluster() throws IOException {</span>
<span class="source-line-no">1294</span><span id="line-1294">    cleanup();</span>
<span class="source-line-no">1295</span><span id="line-1295">    if (this.hbaseCluster != null) {</span>
<span class="source-line-no">1296</span><span id="line-1296">      getMiniHBaseCluster().killAll();</span>
<span class="source-line-no">1297</span><span id="line-1297">      this.hbaseCluster = null;</span>
<span class="source-line-no">1298</span><span id="line-1298">    }</span>
<span class="source-line-no">1299</span><span id="line-1299">    if (zooKeeperWatcher != null) {</span>
<span class="source-line-no">1300</span><span id="line-1300">      zooKeeperWatcher.close();</span>
<span class="source-line-no">1301</span><span id="line-1301">      zooKeeperWatcher = null;</span>
<span class="source-line-no">1302</span><span id="line-1302">    }</span>
<span class="source-line-no">1303</span><span id="line-1303">  }</span>
<span class="source-line-no">1304</span><span id="line-1304"></span>
<span class="source-line-no">1305</span><span id="line-1305">  // close hbase admin, close current connection and reset MIN MAX configs for RS.</span>
<span class="source-line-no">1306</span><span id="line-1306">  private void cleanup() throws IOException {</span>
<span class="source-line-no">1307</span><span id="line-1307">    closeConnection();</span>
<span class="source-line-no">1308</span><span id="line-1308">    // unset the configuration for MIN and MAX RS to start</span>
<span class="source-line-no">1309</span><span id="line-1309">    conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);</span>
<span class="source-line-no">1310</span><span id="line-1310">    conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MAXTOSTART, -1);</span>
<span class="source-line-no">1311</span><span id="line-1311">  }</span>
<span class="source-line-no">1312</span><span id="line-1312"></span>
<span class="source-line-no">1313</span><span id="line-1313">  /**</span>
<span class="source-line-no">1314</span><span id="line-1314">   * Returns the path to the default root dir the minicluster uses. If &lt;code&gt;create&lt;/code&gt; is true,</span>
<span class="source-line-no">1315</span><span id="line-1315">   * a new root directory path is fetched irrespective of whether it has been fetched before or not.</span>
<span class="source-line-no">1316</span><span id="line-1316">   * If false, previous path is used. Note: this does not cause the root dir to be created.</span>
<span class="source-line-no">1317</span><span id="line-1317">   * @return Fully qualified path for the default hbase root dir</span>
<span class="source-line-no">1318</span><span id="line-1318">   */</span>
<span class="source-line-no">1319</span><span id="line-1319">  public Path getDefaultRootDirPath(boolean create) throws IOException {</span>
<span class="source-line-no">1320</span><span id="line-1320">    if (!create) {</span>
<span class="source-line-no">1321</span><span id="line-1321">      return getDataTestDirOnTestFS();</span>
<span class="source-line-no">1322</span><span id="line-1322">    } else {</span>
<span class="source-line-no">1323</span><span id="line-1323">      return getNewDataTestDirOnTestFS();</span>
<span class="source-line-no">1324</span><span id="line-1324">    }</span>
<span class="source-line-no">1325</span><span id="line-1325">  }</span>
<span class="source-line-no">1326</span><span id="line-1326"></span>
<span class="source-line-no">1327</span><span id="line-1327">  /**</span>
<span class="source-line-no">1328</span><span id="line-1328">   * Same as {{@link HBaseTestingUtility#getDefaultRootDirPath(boolean create)} except that</span>
<span class="source-line-no">1329</span><span id="line-1329">   * &lt;code&gt;create&lt;/code&gt; flag is false. Note: this does not cause the root dir to be created.</span>
<span class="source-line-no">1330</span><span id="line-1330">   * @return Fully qualified path for the default hbase root dir</span>
<span class="source-line-no">1331</span><span id="line-1331">   */</span>
<span class="source-line-no">1332</span><span id="line-1332">  public Path getDefaultRootDirPath() throws IOException {</span>
<span class="source-line-no">1333</span><span id="line-1333">    return getDefaultRootDirPath(false);</span>
<span class="source-line-no">1334</span><span id="line-1334">  }</span>
<span class="source-line-no">1335</span><span id="line-1335"></span>
<span class="source-line-no">1336</span><span id="line-1336">  /**</span>
<span class="source-line-no">1337</span><span id="line-1337">   * Creates an hbase rootdir in user home directory. Also creates hbase version file. Normally you</span>
<span class="source-line-no">1338</span><span id="line-1338">   * won't make use of this method. Root hbasedir is created for you as part of mini cluster</span>
<span class="source-line-no">1339</span><span id="line-1339">   * startup. You'd only use this method if you were doing manual operation.</span>
<span class="source-line-no">1340</span><span id="line-1340">   * @param create This flag decides whether to get a new root or data directory path or not, if it</span>
<span class="source-line-no">1341</span><span id="line-1341">   *               has been fetched already. Note : Directory will be made irrespective of whether</span>
<span class="source-line-no">1342</span><span id="line-1342">   *               path has been fetched or not. If directory already exists, it will be overwritten</span>
<span class="source-line-no">1343</span><span id="line-1343">   * @return Fully qualified path to hbase root dir</span>
<span class="source-line-no">1344</span><span id="line-1344">   */</span>
<span class="source-line-no">1345</span><span id="line-1345">  public Path createRootDir(boolean create) throws IOException {</span>
<span class="source-line-no">1346</span><span id="line-1346">    FileSystem fs = FileSystem.get(this.conf);</span>
<span class="source-line-no">1347</span><span id="line-1347">    Path hbaseRootdir = getDefaultRootDirPath(create);</span>
<span class="source-line-no">1348</span><span id="line-1348">    CommonFSUtils.setRootDir(this.conf, hbaseRootdir);</span>
<span class="source-line-no">1349</span><span id="line-1349">    fs.mkdirs(hbaseRootdir);</span>
<span class="source-line-no">1350</span><span id="line-1350">    FSUtils.setVersion(fs, hbaseRootdir);</span>
<span class="source-line-no">1351</span><span id="line-1351">    return hbaseRootdir;</span>
<span class="source-line-no">1352</span><span id="line-1352">  }</span>
<span class="source-line-no">1353</span><span id="line-1353"></span>
<span class="source-line-no">1354</span><span id="line-1354">  /**</span>
<span class="source-line-no">1355</span><span id="line-1355">   * Same as {@link HBaseTestingUtility#createRootDir(boolean create)} except that</span>
<span class="source-line-no">1356</span><span id="line-1356">   * &lt;code&gt;create&lt;/code&gt; flag is false.</span>
<span class="source-line-no">1357</span><span id="line-1357">   * @return Fully qualified path to hbase root dir</span>
<span class="source-line-no">1358</span><span id="line-1358">   */</span>
<span class="source-line-no">1359</span><span id="line-1359">  public Path createRootDir() throws IOException {</span>
<span class="source-line-no">1360</span><span id="line-1360">    return createRootDir(false);</span>
<span class="source-line-no">1361</span><span id="line-1361">  }</span>
<span class="source-line-no">1362</span><span id="line-1362"></span>
<span class="source-line-no">1363</span><span id="line-1363">  /**</span>
<span class="source-line-no">1364</span><span id="line-1364">   * Creates a hbase walDir in the user's home directory. Normally you won't make use of this</span>
<span class="source-line-no">1365</span><span id="line-1365">   * method. Root hbaseWALDir is created for you as part of mini cluster startup. You'd only use</span>
<span class="source-line-no">1366</span><span id="line-1366">   * this method if you were doing manual operation.</span>
<span class="source-line-no">1367</span><span id="line-1367">   * @return Fully qualified path to hbase root dir</span>
<span class="source-line-no">1368</span><span id="line-1368">   */</span>
<span class="source-line-no">1369</span><span id="line-1369">  public Path createWALRootDir() throws IOException {</span>
<span class="source-line-no">1370</span><span id="line-1370">    FileSystem fs = FileSystem.get(this.conf);</span>
<span class="source-line-no">1371</span><span id="line-1371">    Path walDir = getNewDataTestDirOnTestFS();</span>
<span class="source-line-no">1372</span><span id="line-1372">    CommonFSUtils.setWALRootDir(this.conf, walDir);</span>
<span class="source-line-no">1373</span><span id="line-1373">    fs.mkdirs(walDir);</span>
<span class="source-line-no">1374</span><span id="line-1374">    return walDir;</span>
<span class="source-line-no">1375</span><span id="line-1375">  }</span>
<span class="source-line-no">1376</span><span id="line-1376"></span>
<span class="source-line-no">1377</span><span id="line-1377">  private void setHBaseFsTmpDir() throws IOException {</span>
<span class="source-line-no">1378</span><span id="line-1378">    String hbaseFsTmpDirInString = this.conf.get("hbase.fs.tmp.dir");</span>
<span class="source-line-no">1379</span><span id="line-1379">    if (hbaseFsTmpDirInString == null) {</span>
<span class="source-line-no">1380</span><span id="line-1380">      this.conf.set("hbase.fs.tmp.dir", getDataTestDirOnTestFS("hbase-staging").toString());</span>
<span class="source-line-no">1381</span><span id="line-1381">      LOG.info("Setting hbase.fs.tmp.dir to " + this.conf.get("hbase.fs.tmp.dir"));</span>
<span class="source-line-no">1382</span><span id="line-1382">    } else {</span>
<span class="source-line-no">1383</span><span id="line-1383">      LOG.info("The hbase.fs.tmp.dir is set to " + hbaseFsTmpDirInString);</span>
<span class="source-line-no">1384</span><span id="line-1384">    }</span>
<span class="source-line-no">1385</span><span id="line-1385">  }</span>
<span class="source-line-no">1386</span><span id="line-1386"></span>
<span class="source-line-no">1387</span><span id="line-1387">  /**</span>
<span class="source-line-no">1388</span><span id="line-1388">   * Flushes all caches in the mini hbase cluster</span>
<span class="source-line-no">1389</span><span id="line-1389">   */</span>
<span class="source-line-no">1390</span><span id="line-1390">  public void flush() throws IOException {</span>
<span class="source-line-no">1391</span><span id="line-1391">    getMiniHBaseCluster().flushcache();</span>
<span class="source-line-no">1392</span><span id="line-1392">  }</span>
<span class="source-line-no">1393</span><span id="line-1393"></span>
<span class="source-line-no">1394</span><span id="line-1394">  /**</span>
<span class="source-line-no">1395</span><span id="line-1395">   * Flushes all caches in the mini hbase cluster</span>
<span class="source-line-no">1396</span><span id="line-1396">   */</span>
<span class="source-line-no">1397</span><span id="line-1397">  public void flush(TableName tableName) throws IOException {</span>
<span class="source-line-no">1398</span><span id="line-1398">    getMiniHBaseCluster().flushcache(tableName);</span>
<span class="source-line-no">1399</span><span id="line-1399">  }</span>
<span class="source-line-no">1400</span><span id="line-1400"></span>
<span class="source-line-no">1401</span><span id="line-1401">  /**</span>
<span class="source-line-no">1402</span><span id="line-1402">   * Compact all regions in the mini hbase cluster</span>
<span class="source-line-no">1403</span><span id="line-1403">   */</span>
<span class="source-line-no">1404</span><span id="line-1404">  public void compact(boolean major) throws IOException {</span>
<span class="source-line-no">1405</span><span id="line-1405">    getMiniHBaseCluster().compact(major);</span>
<span class="source-line-no">1406</span><span id="line-1406">  }</span>
<span class="source-line-no">1407</span><span id="line-1407"></span>
<span class="source-line-no">1408</span><span id="line-1408">  /**</span>
<span class="source-line-no">1409</span><span id="line-1409">   * Compact all of a table's reagion in the mini hbase cluster</span>
<span class="source-line-no">1410</span><span id="line-1410">   */</span>
<span class="source-line-no">1411</span><span id="line-1411">  public void compact(TableName tableName, boolean major) throws IOException {</span>
<span class="source-line-no">1412</span><span id="line-1412">    getMiniHBaseCluster().compact(tableName, major);</span>
<span class="source-line-no">1413</span><span id="line-1413">  }</span>
<span class="source-line-no">1414</span><span id="line-1414"></span>
<span class="source-line-no">1415</span><span id="line-1415">  /**</span>
<span class="source-line-no">1416</span><span id="line-1416">   * Create a table.</span>
<span class="source-line-no">1417</span><span id="line-1417">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1418</span><span id="line-1418">   */</span>
<span class="source-line-no">1419</span><span id="line-1419">  public Table createTable(TableName tableName, String family) throws IOException {</span>
<span class="source-line-no">1420</span><span id="line-1420">    return createTable(tableName, new String[] { family });</span>
<span class="source-line-no">1421</span><span id="line-1421">  }</span>
<span class="source-line-no">1422</span><span id="line-1422"></span>
<span class="source-line-no">1423</span><span id="line-1423">  /**</span>
<span class="source-line-no">1424</span><span id="line-1424">   * Create a table.</span>
<span class="source-line-no">1425</span><span id="line-1425">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1426</span><span id="line-1426">   */</span>
<span class="source-line-no">1427</span><span id="line-1427">  public Table createTable(TableName tableName, String[] families) throws IOException {</span>
<span class="source-line-no">1428</span><span id="line-1428">    List&lt;byte[]&gt; fams = new ArrayList&lt;&gt;(families.length);</span>
<span class="source-line-no">1429</span><span id="line-1429">    for (String family : families) {</span>
<span class="source-line-no">1430</span><span id="line-1430">      fams.add(Bytes.toBytes(family));</span>
<span class="source-line-no">1431</span><span id="line-1431">    }</span>
<span class="source-line-no">1432</span><span id="line-1432">    return createTable(tableName, fams.toArray(new byte[0][]));</span>
<span class="source-line-no">1433</span><span id="line-1433">  }</span>
<span class="source-line-no">1434</span><span id="line-1434"></span>
<span class="source-line-no">1435</span><span id="line-1435">  /**</span>
<span class="source-line-no">1436</span><span id="line-1436">   * Create a table.</span>
<span class="source-line-no">1437</span><span id="line-1437">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1438</span><span id="line-1438">   */</span>
<span class="source-line-no">1439</span><span id="line-1439">  public Table createTable(TableName tableName, byte[] family) throws IOException {</span>
<span class="source-line-no">1440</span><span id="line-1440">    return createTable(tableName, new byte[][] { family });</span>
<span class="source-line-no">1441</span><span id="line-1441">  }</span>
<span class="source-line-no">1442</span><span id="line-1442"></span>
<span class="source-line-no">1443</span><span id="line-1443">  /**</span>
<span class="source-line-no">1444</span><span id="line-1444">   * Create a table with multiple regions.</span>
<span class="source-line-no">1445</span><span id="line-1445">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1446</span><span id="line-1446">   */</span>
<span class="source-line-no">1447</span><span id="line-1447">  public Table createMultiRegionTable(TableName tableName, byte[] family, int numRegions)</span>
<span class="source-line-no">1448</span><span id="line-1448">    throws IOException {</span>
<span class="source-line-no">1449</span><span id="line-1449">    if (numRegions &lt; 3) throw new IOException("Must create at least 3 regions");</span>
<span class="source-line-no">1450</span><span id="line-1450">    byte[] startKey = Bytes.toBytes("aaaaa");</span>
<span class="source-line-no">1451</span><span id="line-1451">    byte[] endKey = Bytes.toBytes("zzzzz");</span>
<span class="source-line-no">1452</span><span id="line-1452">    byte[][] splitKeys = Bytes.split(startKey, endKey, numRegions - 3);</span>
<span class="source-line-no">1453</span><span id="line-1453"></span>
<span class="source-line-no">1454</span><span id="line-1454">    return createTable(tableName, new byte[][] { family }, splitKeys);</span>
<span class="source-line-no">1455</span><span id="line-1455">  }</span>
<span class="source-line-no">1456</span><span id="line-1456"></span>
<span class="source-line-no">1457</span><span id="line-1457">  /**</span>
<span class="source-line-no">1458</span><span id="line-1458">   * Create a table.</span>
<span class="source-line-no">1459</span><span id="line-1459">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1460</span><span id="line-1460">   */</span>
<span class="source-line-no">1461</span><span id="line-1461">  public Table createTable(TableName tableName, byte[][] families) throws IOException {</span>
<span class="source-line-no">1462</span><span id="line-1462">    return createTable(tableName, families, (byte[][]) null);</span>
<span class="source-line-no">1463</span><span id="line-1463">  }</span>
<span class="source-line-no">1464</span><span id="line-1464"></span>
<span class="source-line-no">1465</span><span id="line-1465">  /**</span>
<span class="source-line-no">1466</span><span id="line-1466">   * Create a table with multiple regions.</span>
<span class="source-line-no">1467</span><span id="line-1467">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1468</span><span id="line-1468">   */</span>
<span class="source-line-no">1469</span><span id="line-1469">  public Table createMultiRegionTable(TableName tableName, byte[][] families) throws IOException {</span>
<span class="source-line-no">1470</span><span id="line-1470">    return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE);</span>
<span class="source-line-no">1471</span><span id="line-1471">  }</span>
<span class="source-line-no">1472</span><span id="line-1472"></span>
<span class="source-line-no">1473</span><span id="line-1473">  /**</span>
<span class="source-line-no">1474</span><span id="line-1474">   * Create a table with multiple regions.</span>
<span class="source-line-no">1475</span><span id="line-1475">   * @param replicaCount replica count.</span>
<span class="source-line-no">1476</span><span id="line-1476">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1477</span><span id="line-1477">   */</span>
<span class="source-line-no">1478</span><span id="line-1478">  public Table createMultiRegionTable(TableName tableName, int replicaCount, byte[][] families)</span>
<span class="source-line-no">1479</span><span id="line-1479">    throws IOException {</span>
<span class="source-line-no">1480</span><span id="line-1480">    return createTable(tableName, families, KEYS_FOR_HBA_CREATE_TABLE, replicaCount);</span>
<span class="source-line-no">1481</span><span id="line-1481">  }</span>
<span class="source-line-no">1482</span><span id="line-1482"></span>
<span class="source-line-no">1483</span><span id="line-1483">  /**</span>
<span class="source-line-no">1484</span><span id="line-1484">   * Create a table.</span>
<span class="source-line-no">1485</span><span id="line-1485">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1486</span><span id="line-1486">   */</span>
<span class="source-line-no">1487</span><span id="line-1487">  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys)</span>
<span class="source-line-no">1488</span><span id="line-1488">    throws IOException {</span>
<span class="source-line-no">1489</span><span id="line-1489">    return createTable(tableName, families, splitKeys, 1, new Configuration(getConfiguration()));</span>
<span class="source-line-no">1490</span><span id="line-1490">  }</span>
<span class="source-line-no">1491</span><span id="line-1491"></span>
<span class="source-line-no">1492</span><span id="line-1492">  /**</span>
<span class="source-line-no">1493</span><span id="line-1493">   * Create a table.</span>
<span class="source-line-no">1494</span><span id="line-1494">   * @param tableName    the table name</span>
<span class="source-line-no">1495</span><span id="line-1495">   * @param families     the families</span>
<span class="source-line-no">1496</span><span id="line-1496">   * @param splitKeys    the splitkeys</span>
<span class="source-line-no">1497</span><span id="line-1497">   * @param replicaCount the region replica count</span>
<span class="source-line-no">1498</span><span id="line-1498">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1499</span><span id="line-1499">   * @throws IOException throws IOException</span>
<span class="source-line-no">1500</span><span id="line-1500">   */</span>
<span class="source-line-no">1501</span><span id="line-1501">  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,</span>
<span class="source-line-no">1502</span><span id="line-1502">    int replicaCount) throws IOException {</span>
<span class="source-line-no">1503</span><span id="line-1503">    return createTable(tableName, families, splitKeys, replicaCount,</span>
<span class="source-line-no">1504</span><span id="line-1504">      new Configuration(getConfiguration()));</span>
<span class="source-line-no">1505</span><span id="line-1505">  }</span>
<span class="source-line-no">1506</span><span id="line-1506"></span>
<span class="source-line-no">1507</span><span id="line-1507">  public Table createTable(TableName tableName, byte[][] families, int numVersions, byte[] startKey,</span>
<span class="source-line-no">1508</span><span id="line-1508">    byte[] endKey, int numRegions) throws IOException {</span>
<span class="source-line-no">1509</span><span id="line-1509">    TableDescriptor desc = createTableDescriptor(tableName, families, numVersions);</span>
<span class="source-line-no">1510</span><span id="line-1510"></span>
<span class="source-line-no">1511</span><span id="line-1511">    getAdmin().createTable(desc, startKey, endKey, numRegions);</span>
<span class="source-line-no">1512</span><span id="line-1512">    // HBaseAdmin only waits for regions to appear in hbase:meta we</span>
<span class="source-line-no">1513</span><span id="line-1513">    // should wait until they are assigned</span>
<span class="source-line-no">1514</span><span id="line-1514">    waitUntilAllRegionsAssigned(tableName);</span>
<span class="source-line-no">1515</span><span id="line-1515">    return getConnection().getTable(tableName);</span>
<span class="source-line-no">1516</span><span id="line-1516">  }</span>
<span class="source-line-no">1517</span><span id="line-1517"></span>
<span class="source-line-no">1518</span><span id="line-1518">  /**</span>
<span class="source-line-no">1519</span><span id="line-1519">   * Create a table.</span>
<span class="source-line-no">1520</span><span id="line-1520">   * @param c Configuration to use</span>
<span class="source-line-no">1521</span><span id="line-1521">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1522</span><span id="line-1522">   */</span>
<span class="source-line-no">1523</span><span id="line-1523">  public Table createTable(TableDescriptor htd, byte[][] families, Configuration c)</span>
<span class="source-line-no">1524</span><span id="line-1524">    throws IOException {</span>
<span class="source-line-no">1525</span><span id="line-1525">    return createTable(htd, families, null, c);</span>
<span class="source-line-no">1526</span><span id="line-1526">  }</span>
<span class="source-line-no">1527</span><span id="line-1527"></span>
<span class="source-line-no">1528</span><span id="line-1528">  /**</span>
<span class="source-line-no">1529</span><span id="line-1529">   * Create a table.</span>
<span class="source-line-no">1530</span><span id="line-1530">   * @param htd       table descriptor</span>
<span class="source-line-no">1531</span><span id="line-1531">   * @param families  array of column families</span>
<span class="source-line-no">1532</span><span id="line-1532">   * @param splitKeys array of split keys</span>
<span class="source-line-no">1533</span><span id="line-1533">   * @param c         Configuration to use</span>
<span class="source-line-no">1534</span><span id="line-1534">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1535</span><span id="line-1535">   * @throws IOException if getAdmin or createTable fails</span>
<span class="source-line-no">1536</span><span id="line-1536">   */</span>
<span class="source-line-no">1537</span><span id="line-1537">  public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,</span>
<span class="source-line-no">1538</span><span id="line-1538">    Configuration c) throws IOException {</span>
<span class="source-line-no">1539</span><span id="line-1539">    // Disable blooms (they are on by default as of 0.95) but we disable them here because</span>
<span class="source-line-no">1540</span><span id="line-1540">    // tests have hard coded counts of what to expect in block cache, etc., and blooms being</span>
<span class="source-line-no">1541</span><span id="line-1541">    // on is interfering.</span>
<span class="source-line-no">1542</span><span id="line-1542">    return createTable(htd, families, splitKeys, BloomType.NONE, HConstants.DEFAULT_BLOCKSIZE, c);</span>
<span class="source-line-no">1543</span><span id="line-1543">  }</span>
<span class="source-line-no">1544</span><span id="line-1544"></span>
<span class="source-line-no">1545</span><span id="line-1545">  /**</span>
<span class="source-line-no">1546</span><span id="line-1546">   * Create a table.</span>
<span class="source-line-no">1547</span><span id="line-1547">   * @param htd       table descriptor</span>
<span class="source-line-no">1548</span><span id="line-1548">   * @param families  array of column families</span>
<span class="source-line-no">1549</span><span id="line-1549">   * @param splitKeys array of split keys</span>
<span class="source-line-no">1550</span><span id="line-1550">   * @param type      Bloom type</span>
<span class="source-line-no">1551</span><span id="line-1551">   * @param blockSize block size</span>
<span class="source-line-no">1552</span><span id="line-1552">   * @param c         Configuration to use</span>
<span class="source-line-no">1553</span><span id="line-1553">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1554</span><span id="line-1554">   * @throws IOException if getAdmin or createTable fails</span>
<span class="source-line-no">1555</span><span id="line-1555">   */</span>
<span class="source-line-no">1556</span><span id="line-1556"></span>
<span class="source-line-no">1557</span><span id="line-1557">  public Table createTable(TableDescriptor htd, byte[][] families, byte[][] splitKeys,</span>
<span class="source-line-no">1558</span><span id="line-1558">    BloomType type, int blockSize, Configuration c) throws IOException {</span>
<span class="source-line-no">1559</span><span id="line-1559">    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);</span>
<span class="source-line-no">1560</span><span id="line-1560">    for (byte[] family : families) {</span>
<span class="source-line-no">1561</span><span id="line-1561">      ColumnFamilyDescriptorBuilder cfdb = ColumnFamilyDescriptorBuilder.newBuilder(family)</span>
<span class="source-line-no">1562</span><span id="line-1562">        .setBloomFilterType(type).setBlocksize(blockSize);</span>
<span class="source-line-no">1563</span><span id="line-1563">      if (isNewVersionBehaviorEnabled()) {</span>
<span class="source-line-no">1564</span><span id="line-1564">        cfdb.setNewVersionBehavior(true);</span>
<span class="source-line-no">1565</span><span id="line-1565">      }</span>
<span class="source-line-no">1566</span><span id="line-1566">      builder.setColumnFamily(cfdb.build());</span>
<span class="source-line-no">1567</span><span id="line-1567">    }</span>
<span class="source-line-no">1568</span><span id="line-1568">    TableDescriptor td = builder.build();</span>
<span class="source-line-no">1569</span><span id="line-1569">    if (splitKeys != null) {</span>
<span class="source-line-no">1570</span><span id="line-1570">      getAdmin().createTable(td, splitKeys);</span>
<span class="source-line-no">1571</span><span id="line-1571">    } else {</span>
<span class="source-line-no">1572</span><span id="line-1572">      getAdmin().createTable(td);</span>
<span class="source-line-no">1573</span><span id="line-1573">    }</span>
<span class="source-line-no">1574</span><span id="line-1574">    // HBaseAdmin only waits for regions to appear in hbase:meta</span>
<span class="source-line-no">1575</span><span id="line-1575">    // we should wait until they are assigned</span>
<span class="source-line-no">1576</span><span id="line-1576">    waitUntilAllRegionsAssigned(td.getTableName());</span>
<span class="source-line-no">1577</span><span id="line-1577">    return getConnection().getTable(td.getTableName());</span>
<span class="source-line-no">1578</span><span id="line-1578">  }</span>
<span class="source-line-no">1579</span><span id="line-1579"></span>
<span class="source-line-no">1580</span><span id="line-1580">  /**</span>
<span class="source-line-no">1581</span><span id="line-1581">   * Create a table.</span>
<span class="source-line-no">1582</span><span id="line-1582">   * @param htd       table descriptor</span>
<span class="source-line-no">1583</span><span id="line-1583">   * @param splitRows array of split keys</span>
<span class="source-line-no">1584</span><span id="line-1584">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1585</span><span id="line-1585">   */</span>
<span class="source-line-no">1586</span><span id="line-1586">  public Table createTable(TableDescriptor htd, byte[][] splitRows) throws IOException {</span>
<span class="source-line-no">1587</span><span id="line-1587">    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd);</span>
<span class="source-line-no">1588</span><span id="line-1588">    if (isNewVersionBehaviorEnabled()) {</span>
<span class="source-line-no">1589</span><span id="line-1589">      for (ColumnFamilyDescriptor family : htd.getColumnFamilies()) {</span>
<span class="source-line-no">1590</span><span id="line-1590">        builder.setColumnFamily(</span>
<span class="source-line-no">1591</span><span id="line-1591">          ColumnFamilyDescriptorBuilder.newBuilder(family).setNewVersionBehavior(true).build());</span>
<span class="source-line-no">1592</span><span id="line-1592">      }</span>
<span class="source-line-no">1593</span><span id="line-1593">    }</span>
<span class="source-line-no">1594</span><span id="line-1594">    if (splitRows != null) {</span>
<span class="source-line-no">1595</span><span id="line-1595">      getAdmin().createTable(builder.build(), splitRows);</span>
<span class="source-line-no">1596</span><span id="line-1596">    } else {</span>
<span class="source-line-no">1597</span><span id="line-1597">      getAdmin().createTable(builder.build());</span>
<span class="source-line-no">1598</span><span id="line-1598">    }</span>
<span class="source-line-no">1599</span><span id="line-1599">    // HBaseAdmin only waits for regions to appear in hbase:meta</span>
<span class="source-line-no">1600</span><span id="line-1600">    // we should wait until they are assigned</span>
<span class="source-line-no">1601</span><span id="line-1601">    waitUntilAllRegionsAssigned(htd.getTableName());</span>
<span class="source-line-no">1602</span><span id="line-1602">    return getConnection().getTable(htd.getTableName());</span>
<span class="source-line-no">1603</span><span id="line-1603">  }</span>
<span class="source-line-no">1604</span><span id="line-1604"></span>
<span class="source-line-no">1605</span><span id="line-1605">  /**</span>
<span class="source-line-no">1606</span><span id="line-1606">   * Create a table.</span>
<span class="source-line-no">1607</span><span id="line-1607">   * @param tableName    the table name</span>
<span class="source-line-no">1608</span><span id="line-1608">   * @param families     the families</span>
<span class="source-line-no">1609</span><span id="line-1609">   * @param splitKeys    the split keys</span>
<span class="source-line-no">1610</span><span id="line-1610">   * @param replicaCount the replica count</span>
<span class="source-line-no">1611</span><span id="line-1611">   * @param c            Configuration to use</span>
<span class="source-line-no">1612</span><span id="line-1612">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1613</span><span id="line-1613">   */</span>
<span class="source-line-no">1614</span><span id="line-1614">  public Table createTable(TableName tableName, byte[][] families, byte[][] splitKeys,</span>
<span class="source-line-no">1615</span><span id="line-1615">    int replicaCount, final Configuration c) throws IOException {</span>
<span class="source-line-no">1616</span><span id="line-1616">    TableDescriptor htd =</span>
<span class="source-line-no">1617</span><span id="line-1617">      TableDescriptorBuilder.newBuilder(tableName).setRegionReplication(replicaCount).build();</span>
<span class="source-line-no">1618</span><span id="line-1618">    return createTable(htd, families, splitKeys, c);</span>
<span class="source-line-no">1619</span><span id="line-1619">  }</span>
<span class="source-line-no">1620</span><span id="line-1620"></span>
<span class="source-line-no">1621</span><span id="line-1621">  /**</span>
<span class="source-line-no">1622</span><span id="line-1622">   * Create a table.</span>
<span class="source-line-no">1623</span><span id="line-1623">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1624</span><span id="line-1624">   */</span>
<span class="source-line-no">1625</span><span id="line-1625">  public Table createTable(TableName tableName, byte[] family, int numVersions) throws IOException {</span>
<span class="source-line-no">1626</span><span id="line-1626">    return createTable(tableName, new byte[][] { family }, numVersions);</span>
<span class="source-line-no">1627</span><span id="line-1627">  }</span>
<span class="source-line-no">1628</span><span id="line-1628"></span>
<span class="source-line-no">1629</span><span id="line-1629">  /**</span>
<span class="source-line-no">1630</span><span id="line-1630">   * Create a table.</span>
<span class="source-line-no">1631</span><span id="line-1631">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1632</span><span id="line-1632">   */</span>
<span class="source-line-no">1633</span><span id="line-1633">  public Table createTable(TableName tableName, byte[][] families, int numVersions)</span>
<span class="source-line-no">1634</span><span id="line-1634">    throws IOException {</span>
<span class="source-line-no">1635</span><span id="line-1635">    return createTable(tableName, families, numVersions, (byte[][]) null);</span>
<span class="source-line-no">1636</span><span id="line-1636">  }</span>
<span class="source-line-no">1637</span><span id="line-1637"></span>
<span class="source-line-no">1638</span><span id="line-1638">  /**</span>
<span class="source-line-no">1639</span><span id="line-1639">   * Create a table.</span>
<span class="source-line-no">1640</span><span id="line-1640">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1641</span><span id="line-1641">   */</span>
<span class="source-line-no">1642</span><span id="line-1642">  public Table createTable(TableName tableName, byte[][] families, int numVersions,</span>
<span class="source-line-no">1643</span><span id="line-1643">    byte[][] splitKeys) throws IOException {</span>
<span class="source-line-no">1644</span><span id="line-1644">    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);</span>
<span class="source-line-no">1645</span><span id="line-1645">    for (byte[] family : families) {</span>
<span class="source-line-no">1646</span><span id="line-1646">      ColumnFamilyDescriptorBuilder cfBuilder =</span>
<span class="source-line-no">1647</span><span id="line-1647">        ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(numVersions);</span>
<span class="source-line-no">1648</span><span id="line-1648">      if (isNewVersionBehaviorEnabled()) {</span>
<span class="source-line-no">1649</span><span id="line-1649">        cfBuilder.setNewVersionBehavior(true);</span>
<span class="source-line-no">1650</span><span id="line-1650">      }</span>
<span class="source-line-no">1651</span><span id="line-1651">      builder.setColumnFamily(cfBuilder.build());</span>
<span class="source-line-no">1652</span><span id="line-1652">    }</span>
<span class="source-line-no">1653</span><span id="line-1653">    if (splitKeys != null) {</span>
<span class="source-line-no">1654</span><span id="line-1654">      getAdmin().createTable(builder.build(), splitKeys);</span>
<span class="source-line-no">1655</span><span id="line-1655">    } else {</span>
<span class="source-line-no">1656</span><span id="line-1656">      getAdmin().createTable(builder.build());</span>
<span class="source-line-no">1657</span><span id="line-1657">    }</span>
<span class="source-line-no">1658</span><span id="line-1658">    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are</span>
<span class="source-line-no">1659</span><span id="line-1659">    // assigned</span>
<span class="source-line-no">1660</span><span id="line-1660">    waitUntilAllRegionsAssigned(tableName);</span>
<span class="source-line-no">1661</span><span id="line-1661">    return getConnection().getTable(tableName);</span>
<span class="source-line-no">1662</span><span id="line-1662">  }</span>
<span class="source-line-no">1663</span><span id="line-1663"></span>
<span class="source-line-no">1664</span><span id="line-1664">  /**</span>
<span class="source-line-no">1665</span><span id="line-1665">   * Create a table with multiple regions.</span>
<span class="source-line-no">1666</span><span id="line-1666">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1667</span><span id="line-1667">   */</span>
<span class="source-line-no">1668</span><span id="line-1668">  public Table createMultiRegionTable(TableName tableName, byte[][] families, int numVersions)</span>
<span class="source-line-no">1669</span><span id="line-1669">    throws IOException {</span>
<span class="source-line-no">1670</span><span id="line-1670">    return createTable(tableName, families, numVersions, KEYS_FOR_HBA_CREATE_TABLE);</span>
<span class="source-line-no">1671</span><span id="line-1671">  }</span>
<span class="source-line-no">1672</span><span id="line-1672"></span>
<span class="source-line-no">1673</span><span id="line-1673">  /**</span>
<span class="source-line-no">1674</span><span id="line-1674">   * Create a table.</span>
<span class="source-line-no">1675</span><span id="line-1675">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1676</span><span id="line-1676">   */</span>
<span class="source-line-no">1677</span><span id="line-1677">  public Table createTable(TableName tableName, byte[][] families, int numVersions, int blockSize)</span>
<span class="source-line-no">1678</span><span id="line-1678">    throws IOException {</span>
<span class="source-line-no">1679</span><span id="line-1679">    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);</span>
<span class="source-line-no">1680</span><span id="line-1680">    for (byte[] family : families) {</span>
<span class="source-line-no">1681</span><span id="line-1681">      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)</span>
<span class="source-line-no">1682</span><span id="line-1682">        .setMaxVersions(numVersions).setBlocksize(blockSize);</span>
<span class="source-line-no">1683</span><span id="line-1683">      if (isNewVersionBehaviorEnabled()) {</span>
<span class="source-line-no">1684</span><span id="line-1684">        cfBuilder.setNewVersionBehavior(true);</span>
<span class="source-line-no">1685</span><span id="line-1685">      }</span>
<span class="source-line-no">1686</span><span id="line-1686">      builder.setColumnFamily(cfBuilder.build());</span>
<span class="source-line-no">1687</span><span id="line-1687">    }</span>
<span class="source-line-no">1688</span><span id="line-1688">    getAdmin().createTable(builder.build());</span>
<span class="source-line-no">1689</span><span id="line-1689">    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are</span>
<span class="source-line-no">1690</span><span id="line-1690">    // assigned</span>
<span class="source-line-no">1691</span><span id="line-1691">    waitUntilAllRegionsAssigned(tableName);</span>
<span class="source-line-no">1692</span><span id="line-1692">    return getConnection().getTable(tableName);</span>
<span class="source-line-no">1693</span><span id="line-1693">  }</span>
<span class="source-line-no">1694</span><span id="line-1694"></span>
<span class="source-line-no">1695</span><span id="line-1695">  public Table createTable(TableName tableName, byte[][] families, int numVersions, int blockSize,</span>
<span class="source-line-no">1696</span><span id="line-1696">    String cpName) throws IOException {</span>
<span class="source-line-no">1697</span><span id="line-1697">    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);</span>
<span class="source-line-no">1698</span><span id="line-1698">    for (byte[] family : families) {</span>
<span class="source-line-no">1699</span><span id="line-1699">      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family)</span>
<span class="source-line-no">1700</span><span id="line-1700">        .setMaxVersions(numVersions).setBlocksize(blockSize);</span>
<span class="source-line-no">1701</span><span id="line-1701">      if (isNewVersionBehaviorEnabled()) {</span>
<span class="source-line-no">1702</span><span id="line-1702">        cfBuilder.setNewVersionBehavior(true);</span>
<span class="source-line-no">1703</span><span id="line-1703">      }</span>
<span class="source-line-no">1704</span><span id="line-1704">      builder.setColumnFamily(cfBuilder.build());</span>
<span class="source-line-no">1705</span><span id="line-1705">    }</span>
<span class="source-line-no">1706</span><span id="line-1706">    if (cpName != null) {</span>
<span class="source-line-no">1707</span><span id="line-1707">      builder.setCoprocessor(cpName);</span>
<span class="source-line-no">1708</span><span id="line-1708">    }</span>
<span class="source-line-no">1709</span><span id="line-1709">    getAdmin().createTable(builder.build());</span>
<span class="source-line-no">1710</span><span id="line-1710">    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are</span>
<span class="source-line-no">1711</span><span id="line-1711">    // assigned</span>
<span class="source-line-no">1712</span><span id="line-1712">    waitUntilAllRegionsAssigned(tableName);</span>
<span class="source-line-no">1713</span><span id="line-1713">    return getConnection().getTable(tableName);</span>
<span class="source-line-no">1714</span><span id="line-1714">  }</span>
<span class="source-line-no">1715</span><span id="line-1715"></span>
<span class="source-line-no">1716</span><span id="line-1716">  /**</span>
<span class="source-line-no">1717</span><span id="line-1717">   * Create a table.</span>
<span class="source-line-no">1718</span><span id="line-1718">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1719</span><span id="line-1719">   */</span>
<span class="source-line-no">1720</span><span id="line-1720">  public Table createTable(TableName tableName, byte[][] families, int[] numVersions)</span>
<span class="source-line-no">1721</span><span id="line-1721">    throws IOException {</span>
<span class="source-line-no">1722</span><span id="line-1722">    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);</span>
<span class="source-line-no">1723</span><span id="line-1723">    int i = 0;</span>
<span class="source-line-no">1724</span><span id="line-1724">    for (byte[] family : families) {</span>
<span class="source-line-no">1725</span><span id="line-1725">      ColumnFamilyDescriptorBuilder cfBuilder =</span>
<span class="source-line-no">1726</span><span id="line-1726">        ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(numVersions[i]);</span>
<span class="source-line-no">1727</span><span id="line-1727">      if (isNewVersionBehaviorEnabled()) {</span>
<span class="source-line-no">1728</span><span id="line-1728">        cfBuilder.setNewVersionBehavior(true);</span>
<span class="source-line-no">1729</span><span id="line-1729">      }</span>
<span class="source-line-no">1730</span><span id="line-1730">      builder.setColumnFamily(cfBuilder.build());</span>
<span class="source-line-no">1731</span><span id="line-1731">      i++;</span>
<span class="source-line-no">1732</span><span id="line-1732">    }</span>
<span class="source-line-no">1733</span><span id="line-1733">    getAdmin().createTable(builder.build());</span>
<span class="source-line-no">1734</span><span id="line-1734">    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are</span>
<span class="source-line-no">1735</span><span id="line-1735">    // assigned</span>
<span class="source-line-no">1736</span><span id="line-1736">    waitUntilAllRegionsAssigned(tableName);</span>
<span class="source-line-no">1737</span><span id="line-1737">    return getConnection().getTable(tableName);</span>
<span class="source-line-no">1738</span><span id="line-1738">  }</span>
<span class="source-line-no">1739</span><span id="line-1739"></span>
<span class="source-line-no">1740</span><span id="line-1740">  /**</span>
<span class="source-line-no">1741</span><span id="line-1741">   * Create a table.</span>
<span class="source-line-no">1742</span><span id="line-1742">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1743</span><span id="line-1743">   */</span>
<span class="source-line-no">1744</span><span id="line-1744">  public Table createTable(TableName tableName, byte[] family, byte[][] splitRows)</span>
<span class="source-line-no">1745</span><span id="line-1745">    throws IOException {</span>
<span class="source-line-no">1746</span><span id="line-1746">    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);</span>
<span class="source-line-no">1747</span><span id="line-1747">    ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);</span>
<span class="source-line-no">1748</span><span id="line-1748">    if (isNewVersionBehaviorEnabled()) {</span>
<span class="source-line-no">1749</span><span id="line-1749">      cfBuilder.setNewVersionBehavior(true);</span>
<span class="source-line-no">1750</span><span id="line-1750">    }</span>
<span class="source-line-no">1751</span><span id="line-1751">    builder.setColumnFamily(cfBuilder.build());</span>
<span class="source-line-no">1752</span><span id="line-1752">    getAdmin().createTable(builder.build(), splitRows);</span>
<span class="source-line-no">1753</span><span id="line-1753">    // HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are</span>
<span class="source-line-no">1754</span><span id="line-1754">    // assigned</span>
<span class="source-line-no">1755</span><span id="line-1755">    waitUntilAllRegionsAssigned(tableName);</span>
<span class="source-line-no">1756</span><span id="line-1756">    return getConnection().getTable(tableName);</span>
<span class="source-line-no">1757</span><span id="line-1757">  }</span>
<span class="source-line-no">1758</span><span id="line-1758"></span>
<span class="source-line-no">1759</span><span id="line-1759">  /**</span>
<span class="source-line-no">1760</span><span id="line-1760">   * Create a table with multiple regions.</span>
<span class="source-line-no">1761</span><span id="line-1761">   * @return A Table instance for the created table.</span>
<span class="source-line-no">1762</span><span id="line-1762">   */</span>
<span class="source-line-no">1763</span><span id="line-1763">  public Table createMultiRegionTable(TableName tableName, byte[] family) throws IOException {</span>
<span class="source-line-no">1764</span><span id="line-1764">    return createTable(tableName, family, KEYS_FOR_HBA_CREATE_TABLE);</span>
<span class="source-line-no">1765</span><span id="line-1765">  }</span>
<span class="source-line-no">1766</span><span id="line-1766"></span>
<span class="source-line-no">1767</span><span id="line-1767">  /**</span>
<span class="source-line-no">1768</span><span id="line-1768">   * Modify a table, synchronous.</span>
<span class="source-line-no">1769</span><span id="line-1769">   * @deprecated since 3.0.0 and will be removed in 4.0.0. Just use</span>
<span class="source-line-no">1770</span><span id="line-1770">   *             {@link Admin#modifyTable(TableDescriptor)} directly as it is synchronous now.</span>
<span class="source-line-no">1771</span><span id="line-1771">   * @see Admin#modifyTable(TableDescriptor)</span>
<span class="source-line-no">1772</span><span id="line-1772">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-22002"&gt;HBASE-22002&lt;/a&gt;</span>
<span class="source-line-no">1773</span><span id="line-1773">   */</span>
<span class="source-line-no">1774</span><span id="line-1774">  @Deprecated</span>
<span class="source-line-no">1775</span><span id="line-1775">  public static void modifyTableSync(Admin admin, TableDescriptor desc)</span>
<span class="source-line-no">1776</span><span id="line-1776">    throws IOException, InterruptedException {</span>
<span class="source-line-no">1777</span><span id="line-1777">    admin.modifyTable(desc);</span>
<span class="source-line-no">1778</span><span id="line-1778">  }</span>
<span class="source-line-no">1779</span><span id="line-1779"></span>
<span class="source-line-no">1780</span><span id="line-1780">  /**</span>
<span class="source-line-no">1781</span><span id="line-1781">   * Set the number of Region replicas.</span>
<span class="source-line-no">1782</span><span id="line-1782">   */</span>
<span class="source-line-no">1783</span><span id="line-1783">  public static void setReplicas(Admin admin, TableName table, int replicaCount)</span>
<span class="source-line-no">1784</span><span id="line-1784">    throws IOException, InterruptedException {</span>
<span class="source-line-no">1785</span><span id="line-1785">    TableDescriptor desc = TableDescriptorBuilder.newBuilder(admin.getDescriptor(table))</span>
<span class="source-line-no">1786</span><span id="line-1786">      .setRegionReplication(replicaCount).build();</span>
<span class="source-line-no">1787</span><span id="line-1787">    admin.modifyTable(desc);</span>
<span class="source-line-no">1788</span><span id="line-1788">  }</span>
<span class="source-line-no">1789</span><span id="line-1789"></span>
<span class="source-line-no">1790</span><span id="line-1790">  /**</span>
<span class="source-line-no">1791</span><span id="line-1791">   * Drop an existing table</span>
<span class="source-line-no">1792</span><span id="line-1792">   * @param tableName existing table</span>
<span class="source-line-no">1793</span><span id="line-1793">   */</span>
<span class="source-line-no">1794</span><span id="line-1794">  public void deleteTable(TableName tableName) throws IOException {</span>
<span class="source-line-no">1795</span><span id="line-1795">    try {</span>
<span class="source-line-no">1796</span><span id="line-1796">      getAdmin().disableTable(tableName);</span>
<span class="source-line-no">1797</span><span id="line-1797">    } catch (TableNotEnabledException e) {</span>
<span class="source-line-no">1798</span><span id="line-1798">      LOG.debug("Table: " + tableName + " already disabled, so just deleting it.");</span>
<span class="source-line-no">1799</span><span id="line-1799">    }</span>
<span class="source-line-no">1800</span><span id="line-1800">    getAdmin().deleteTable(tableName);</span>
<span class="source-line-no">1801</span><span id="line-1801">  }</span>
<span class="source-line-no">1802</span><span id="line-1802"></span>
<span class="source-line-no">1803</span><span id="line-1803">  /**</span>
<span class="source-line-no">1804</span><span id="line-1804">   * Drop an existing table</span>
<span class="source-line-no">1805</span><span id="line-1805">   * @param tableName existing table</span>
<span class="source-line-no">1806</span><span id="line-1806">   */</span>
<span class="source-line-no">1807</span><span id="line-1807">  public void deleteTableIfAny(TableName tableName) throws IOException {</span>
<span class="source-line-no">1808</span><span id="line-1808">    try {</span>
<span class="source-line-no">1809</span><span id="line-1809">      deleteTable(tableName);</span>
<span class="source-line-no">1810</span><span id="line-1810">    } catch (TableNotFoundException e) {</span>
<span class="source-line-no">1811</span><span id="line-1811">      // ignore</span>
<span class="source-line-no">1812</span><span id="line-1812">    }</span>
<span class="source-line-no">1813</span><span id="line-1813">  }</span>
<span class="source-line-no">1814</span><span id="line-1814"></span>
<span class="source-line-no">1815</span><span id="line-1815">  // ==========================================================================</span>
<span class="source-line-no">1816</span><span id="line-1816">  // Canned table and table descriptor creation</span>
<span class="source-line-no">1817</span><span id="line-1817"></span>
<span class="source-line-no">1818</span><span id="line-1818">  public final static byte[] fam1 = Bytes.toBytes("colfamily11");</span>
<span class="source-line-no">1819</span><span id="line-1819">  public final static byte[] fam2 = Bytes.toBytes("colfamily21");</span>
<span class="source-line-no">1820</span><span id="line-1820">  public final static byte[] fam3 = Bytes.toBytes("colfamily31");</span>
<span class="source-line-no">1821</span><span id="line-1821">  public static final byte[][] COLUMNS = { fam1, fam2, fam3 };</span>
<span class="source-line-no">1822</span><span id="line-1822">  private static final int MAXVERSIONS = 3;</span>
<span class="source-line-no">1823</span><span id="line-1823"></span>
<span class="source-line-no">1824</span><span id="line-1824">  public static final char FIRST_CHAR = 'a';</span>
<span class="source-line-no">1825</span><span id="line-1825">  public static final char LAST_CHAR = 'z';</span>
<span class="source-line-no">1826</span><span id="line-1826">  public static final byte[] START_KEY_BYTES = { FIRST_CHAR, FIRST_CHAR, FIRST_CHAR };</span>
<span class="source-line-no">1827</span><span id="line-1827">  public static final String START_KEY = new String(START_KEY_BYTES, HConstants.UTF8_CHARSET);</span>
<span class="source-line-no">1828</span><span id="line-1828"></span>
<span class="source-line-no">1829</span><span id="line-1829">  public TableDescriptorBuilder createModifyableTableDescriptor(final String name) {</span>
<span class="source-line-no">1830</span><span id="line-1830">    return createModifyableTableDescriptor(TableName.valueOf(name),</span>
<span class="source-line-no">1831</span><span id="line-1831">      ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS, MAXVERSIONS, HConstants.FOREVER,</span>
<span class="source-line-no">1832</span><span id="line-1832">      ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);</span>
<span class="source-line-no">1833</span><span id="line-1833">  }</span>
<span class="source-line-no">1834</span><span id="line-1834"></span>
<span class="source-line-no">1835</span><span id="line-1835">  public TableDescriptor createTableDescriptor(final TableName name, final int minVersions,</span>
<span class="source-line-no">1836</span><span id="line-1836">    final int versions, final int ttl, KeepDeletedCells keepDeleted) {</span>
<span class="source-line-no">1837</span><span id="line-1837">    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);</span>
<span class="source-line-no">1838</span><span id="line-1838">    for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {</span>
<span class="source-line-no">1839</span><span id="line-1839">      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)</span>
<span class="source-line-no">1840</span><span id="line-1840">        .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)</span>
<span class="source-line-no">1841</span><span id="line-1841">        .setBlockCacheEnabled(false).setTimeToLive(ttl);</span>
<span class="source-line-no">1842</span><span id="line-1842">      if (isNewVersionBehaviorEnabled()) {</span>
<span class="source-line-no">1843</span><span id="line-1843">        cfBuilder.setNewVersionBehavior(true);</span>
<span class="source-line-no">1844</span><span id="line-1844">      }</span>
<span class="source-line-no">1845</span><span id="line-1845">      builder.setColumnFamily(cfBuilder.build());</span>
<span class="source-line-no">1846</span><span id="line-1846">    }</span>
<span class="source-line-no">1847</span><span id="line-1847">    return builder.build();</span>
<span class="source-line-no">1848</span><span id="line-1848">  }</span>
<span class="source-line-no">1849</span><span id="line-1849"></span>
<span class="source-line-no">1850</span><span id="line-1850">  public TableDescriptorBuilder createModifyableTableDescriptor(final TableName name,</span>
<span class="source-line-no">1851</span><span id="line-1851">    final int minVersions, final int versions, final int ttl, KeepDeletedCells keepDeleted) {</span>
<span class="source-line-no">1852</span><span id="line-1852">    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(name);</span>
<span class="source-line-no">1853</span><span id="line-1853">    for (byte[] cfName : new byte[][] { fam1, fam2, fam3 }) {</span>
<span class="source-line-no">1854</span><span id="line-1854">      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(cfName)</span>
<span class="source-line-no">1855</span><span id="line-1855">        .setMinVersions(minVersions).setMaxVersions(versions).setKeepDeletedCells(keepDeleted)</span>
<span class="source-line-no">1856</span><span id="line-1856">        .setBlockCacheEnabled(false).setTimeToLive(ttl);</span>
<span class="source-line-no">1857</span><span id="line-1857">      if (isNewVersionBehaviorEnabled()) {</span>
<span class="source-line-no">1858</span><span id="line-1858">        cfBuilder.setNewVersionBehavior(true);</span>
<span class="source-line-no">1859</span><span id="line-1859">      }</span>
<span class="source-line-no">1860</span><span id="line-1860">      builder.setColumnFamily(cfBuilder.build());</span>
<span class="source-line-no">1861</span><span id="line-1861">    }</span>
<span class="source-line-no">1862</span><span id="line-1862">    return builder;</span>
<span class="source-line-no">1863</span><span id="line-1863">  }</span>
<span class="source-line-no">1864</span><span id="line-1864"></span>
<span class="source-line-no">1865</span><span id="line-1865">  /**</span>
<span class="source-line-no">1866</span><span id="line-1866">   * Create a table of name &lt;code&gt;name&lt;/code&gt;.</span>
<span class="source-line-no">1867</span><span id="line-1867">   * @param name Name to give table.</span>
<span class="source-line-no">1868</span><span id="line-1868">   * @return Column descriptor.</span>
<span class="source-line-no">1869</span><span id="line-1869">   */</span>
<span class="source-line-no">1870</span><span id="line-1870">  public TableDescriptor createTableDescriptor(final TableName name) {</span>
<span class="source-line-no">1871</span><span id="line-1871">    return createTableDescriptor(name, ColumnFamilyDescriptorBuilder.DEFAULT_MIN_VERSIONS,</span>
<span class="source-line-no">1872</span><span id="line-1872">      MAXVERSIONS, HConstants.FOREVER, ColumnFamilyDescriptorBuilder.DEFAULT_KEEP_DELETED);</span>
<span class="source-line-no">1873</span><span id="line-1873">  }</span>
<span class="source-line-no">1874</span><span id="line-1874"></span>
<span class="source-line-no">1875</span><span id="line-1875">  public TableDescriptor createTableDescriptor(final TableName tableName, byte[] family) {</span>
<span class="source-line-no">1876</span><span id="line-1876">    return createTableDescriptor(tableName, new byte[][] { family }, 1);</span>
<span class="source-line-no">1877</span><span id="line-1877">  }</span>
<span class="source-line-no">1878</span><span id="line-1878"></span>
<span class="source-line-no">1879</span><span id="line-1879">  public TableDescriptor createTableDescriptor(final TableName tableName, byte[][] families,</span>
<span class="source-line-no">1880</span><span id="line-1880">    int maxVersions) {</span>
<span class="source-line-no">1881</span><span id="line-1881">    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);</span>
<span class="source-line-no">1882</span><span id="line-1882">    for (byte[] family : families) {</span>
<span class="source-line-no">1883</span><span id="line-1883">      ColumnFamilyDescriptorBuilder cfBuilder =</span>
<span class="source-line-no">1884</span><span id="line-1884">        ColumnFamilyDescriptorBuilder.newBuilder(family).setMaxVersions(maxVersions);</span>
<span class="source-line-no">1885</span><span id="line-1885">      if (isNewVersionBehaviorEnabled()) {</span>
<span class="source-line-no">1886</span><span id="line-1886">        cfBuilder.setNewVersionBehavior(true);</span>
<span class="source-line-no">1887</span><span id="line-1887">      }</span>
<span class="source-line-no">1888</span><span id="line-1888">      builder.setColumnFamily(cfBuilder.build());</span>
<span class="source-line-no">1889</span><span id="line-1889">    }</span>
<span class="source-line-no">1890</span><span id="line-1890">    return builder.build();</span>
<span class="source-line-no">1891</span><span id="line-1891">  }</span>
<span class="source-line-no">1892</span><span id="line-1892"></span>
<span class="source-line-no">1893</span><span id="line-1893">  /**</span>
<span class="source-line-no">1894</span><span id="line-1894">   * Create an HRegion that writes to the local tmp dirs</span>
<span class="source-line-no">1895</span><span id="line-1895">   * @param desc     a table descriptor indicating which table the region belongs to</span>
<span class="source-line-no">1896</span><span id="line-1896">   * @param startKey the start boundary of the region</span>
<span class="source-line-no">1897</span><span id="line-1897">   * @param endKey   the end boundary of the region</span>
<span class="source-line-no">1898</span><span id="line-1898">   * @return a region that writes to local dir for testing</span>
<span class="source-line-no">1899</span><span id="line-1899">   */</span>
<span class="source-line-no">1900</span><span id="line-1900">  public HRegion createLocalHRegion(TableDescriptor desc, byte[] startKey, byte[] endKey)</span>
<span class="source-line-no">1901</span><span id="line-1901">    throws IOException {</span>
<span class="source-line-no">1902</span><span id="line-1902">    RegionInfo hri = RegionInfoBuilder.newBuilder(desc.getTableName()).setStartKey(startKey)</span>
<span class="source-line-no">1903</span><span id="line-1903">      .setEndKey(endKey).build();</span>
<span class="source-line-no">1904</span><span id="line-1904">    return createLocalHRegion(hri, desc);</span>
<span class="source-line-no">1905</span><span id="line-1905">  }</span>
<span class="source-line-no">1906</span><span id="line-1906"></span>
<span class="source-line-no">1907</span><span id="line-1907">  /**</span>
<span class="source-line-no">1908</span><span id="line-1908">   * Create an HRegion that writes to the local tmp dirs. Creates the WAL for you. Be sure to call</span>
<span class="source-line-no">1909</span><span id="line-1909">   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} when you're finished with it.</span>
<span class="source-line-no">1910</span><span id="line-1910">   */</span>
<span class="source-line-no">1911</span><span id="line-1911">  public HRegion createLocalHRegion(RegionInfo info, TableDescriptor desc) throws IOException {</span>
<span class="source-line-no">1912</span><span id="line-1912">    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), desc);</span>
<span class="source-line-no">1913</span><span id="line-1913">  }</span>
<span class="source-line-no">1914</span><span id="line-1914"></span>
<span class="source-line-no">1915</span><span id="line-1915">  /**</span>
<span class="source-line-no">1916</span><span id="line-1916">   * Create an HRegion that writes to the local tmp dirs with specified wal</span>
<span class="source-line-no">1917</span><span id="line-1917">   * @param info regioninfo</span>
<span class="source-line-no">1918</span><span id="line-1918">   * @param conf configuration</span>
<span class="source-line-no">1919</span><span id="line-1919">   * @param desc table descriptor</span>
<span class="source-line-no">1920</span><span id="line-1920">   * @param wal  wal for this region.</span>
<span class="source-line-no">1921</span><span id="line-1921">   * @return created hregion</span>
<span class="source-line-no">1922</span><span id="line-1922">   */</span>
<span class="source-line-no">1923</span><span id="line-1923">  public HRegion createLocalHRegion(RegionInfo info, Configuration conf, TableDescriptor desc,</span>
<span class="source-line-no">1924</span><span id="line-1924">    WAL wal) throws IOException {</span>
<span class="source-line-no">1925</span><span id="line-1925">    return HRegion.createHRegion(info, getDataTestDir(), conf, desc, wal);</span>
<span class="source-line-no">1926</span><span id="line-1926">  }</span>
<span class="source-line-no">1927</span><span id="line-1927"></span>
<span class="source-line-no">1928</span><span id="line-1928">  /**</span>
<span class="source-line-no">1929</span><span id="line-1929">   * Return a region on which you must call {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)}</span>
<span class="source-line-no">1930</span><span id="line-1930">   * when done.</span>
<span class="source-line-no">1931</span><span id="line-1931">   */</span>
<span class="source-line-no">1932</span><span id="line-1932">  public HRegion createLocalHRegion(TableName tableName, byte[] startKey, byte[] stopKey,</span>
<span class="source-line-no">1933</span><span id="line-1933">    Configuration conf, boolean isReadOnly, Durability durability, WAL wal, byte[]... families)</span>
<span class="source-line-no">1934</span><span id="line-1934">    throws IOException {</span>
<span class="source-line-no">1935</span><span id="line-1935">    return createLocalHRegionWithInMemoryFlags(tableName, startKey, stopKey, conf, isReadOnly,</span>
<span class="source-line-no">1936</span><span id="line-1936">      durability, wal, null, families);</span>
<span class="source-line-no">1937</span><span id="line-1937">  }</span>
<span class="source-line-no">1938</span><span id="line-1938"></span>
<span class="source-line-no">1939</span><span id="line-1939">  public HRegion createLocalHRegionWithInMemoryFlags(TableName tableName, byte[] startKey,</span>
<span class="source-line-no">1940</span><span id="line-1940">    byte[] stopKey, Configuration conf, boolean isReadOnly, Durability durability, WAL wal,</span>
<span class="source-line-no">1941</span><span id="line-1941">    boolean[] compactedMemStore, byte[]... families) throws IOException {</span>
<span class="source-line-no">1942</span><span id="line-1942">    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);</span>
<span class="source-line-no">1943</span><span id="line-1943">    builder.setReadOnly(isReadOnly);</span>
<span class="source-line-no">1944</span><span id="line-1944">    int i = 0;</span>
<span class="source-line-no">1945</span><span id="line-1945">    for (byte[] family : families) {</span>
<span class="source-line-no">1946</span><span id="line-1946">      ColumnFamilyDescriptorBuilder cfBuilder = ColumnFamilyDescriptorBuilder.newBuilder(family);</span>
<span class="source-line-no">1947</span><span id="line-1947">      if (compactedMemStore != null &amp;&amp; i &lt; compactedMemStore.length) {</span>
<span class="source-line-no">1948</span><span id="line-1948">        cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.BASIC);</span>
<span class="source-line-no">1949</span><span id="line-1949">      } else {</span>
<span class="source-line-no">1950</span><span id="line-1950">        cfBuilder.setInMemoryCompaction(MemoryCompactionPolicy.NONE);</span>
<span class="source-line-no">1951</span><span id="line-1951"></span>
<span class="source-line-no">1952</span><span id="line-1952">      }</span>
<span class="source-line-no">1953</span><span id="line-1953">      i++;</span>
<span class="source-line-no">1954</span><span id="line-1954">      // Set default to be three versions.</span>
<span class="source-line-no">1955</span><span id="line-1955">      cfBuilder.setMaxVersions(Integer.MAX_VALUE);</span>
<span class="source-line-no">1956</span><span id="line-1956">      builder.setColumnFamily(cfBuilder.build());</span>
<span class="source-line-no">1957</span><span id="line-1957">    }</span>
<span class="source-line-no">1958</span><span id="line-1958">    builder.setDurability(durability);</span>
<span class="source-line-no">1959</span><span id="line-1959">    RegionInfo info =</span>
<span class="source-line-no">1960</span><span id="line-1960">      RegionInfoBuilder.newBuilder(tableName).setStartKey(startKey).setEndKey(stopKey).build();</span>
<span class="source-line-no">1961</span><span id="line-1961">    return createLocalHRegion(info, conf, builder.build(), wal);</span>
<span class="source-line-no">1962</span><span id="line-1962">  }</span>
<span class="source-line-no">1963</span><span id="line-1963"></span>
<span class="source-line-no">1964</span><span id="line-1964">  //</span>
<span class="source-line-no">1965</span><span id="line-1965">  // ==========================================================================</span>
<span class="source-line-no">1966</span><span id="line-1966"></span>
<span class="source-line-no">1967</span><span id="line-1967">  /**</span>
<span class="source-line-no">1968</span><span id="line-1968">   * Provide an existing table name to truncate. Scans the table and issues a delete for each row</span>
<span class="source-line-no">1969</span><span id="line-1969">   * read.</span>
<span class="source-line-no">1970</span><span id="line-1970">   * @param tableName existing table</span>
<span class="source-line-no">1971</span><span id="line-1971">   * @return HTable to that new table</span>
<span class="source-line-no">1972</span><span id="line-1972">   */</span>
<span class="source-line-no">1973</span><span id="line-1973">  public Table deleteTableData(TableName tableName) throws IOException {</span>
<span class="source-line-no">1974</span><span id="line-1974">    Table table = getConnection().getTable(tableName);</span>
<span class="source-line-no">1975</span><span id="line-1975">    Scan scan = new Scan();</span>
<span class="source-line-no">1976</span><span id="line-1976">    ResultScanner resScan = table.getScanner(scan);</span>
<span class="source-line-no">1977</span><span id="line-1977">    for (Result res : resScan) {</span>
<span class="source-line-no">1978</span><span id="line-1978">      Delete del = new Delete(res.getRow());</span>
<span class="source-line-no">1979</span><span id="line-1979">      table.delete(del);</span>
<span class="source-line-no">1980</span><span id="line-1980">    }</span>
<span class="source-line-no">1981</span><span id="line-1981">    resScan = table.getScanner(scan);</span>
<span class="source-line-no">1982</span><span id="line-1982">    resScan.close();</span>
<span class="source-line-no">1983</span><span id="line-1983">    return table;</span>
<span class="source-line-no">1984</span><span id="line-1984">  }</span>
<span class="source-line-no">1985</span><span id="line-1985"></span>
<span class="source-line-no">1986</span><span id="line-1986">  /**</span>
<span class="source-line-no">1987</span><span id="line-1987">   * Truncate a table using the admin command. Effectively disables, deletes, and recreates the</span>
<span class="source-line-no">1988</span><span id="line-1988">   * table.</span>
<span class="source-line-no">1989</span><span id="line-1989">   * @param tableName       table which must exist.</span>
<span class="source-line-no">1990</span><span id="line-1990">   * @param preserveRegions keep the existing split points</span>
<span class="source-line-no">1991</span><span id="line-1991">   * @return HTable for the new table</span>
<span class="source-line-no">1992</span><span id="line-1992">   */</span>
<span class="source-line-no">1993</span><span id="line-1993">  public Table truncateTable(final TableName tableName, final boolean preserveRegions)</span>
<span class="source-line-no">1994</span><span id="line-1994">    throws IOException {</span>
<span class="source-line-no">1995</span><span id="line-1995">    Admin admin = getAdmin();</span>
<span class="source-line-no">1996</span><span id="line-1996">    if (!admin.isTableDisabled(tableName)) {</span>
<span class="source-line-no">1997</span><span id="line-1997">      admin.disableTable(tableName);</span>
<span class="source-line-no">1998</span><span id="line-1998">    }</span>
<span class="source-line-no">1999</span><span id="line-1999">    admin.truncateTable(tableName, preserveRegions);</span>
<span class="source-line-no">2000</span><span id="line-2000">    return getConnection().getTable(tableName);</span>
<span class="source-line-no">2001</span><span id="line-2001">  }</span>
<span class="source-line-no">2002</span><span id="line-2002"></span>
<span class="source-line-no">2003</span><span id="line-2003">  /**</span>
<span class="source-line-no">2004</span><span id="line-2004">   * Truncate a table using the admin command. Effectively disables, deletes, and recreates the</span>
<span class="source-line-no">2005</span><span id="line-2005">   * table. For previous behavior of issuing row deletes, see deleteTableData. Expressly does not</span>
<span class="source-line-no">2006</span><span id="line-2006">   * preserve regions of existing table.</span>
<span class="source-line-no">2007</span><span id="line-2007">   * @param tableName table which must exist.</span>
<span class="source-line-no">2008</span><span id="line-2008">   * @return HTable for the new table</span>
<span class="source-line-no">2009</span><span id="line-2009">   */</span>
<span class="source-line-no">2010</span><span id="line-2010">  public Table truncateTable(final TableName tableName) throws IOException {</span>
<span class="source-line-no">2011</span><span id="line-2011">    return truncateTable(tableName, false);</span>
<span class="source-line-no">2012</span><span id="line-2012">  }</span>
<span class="source-line-no">2013</span><span id="line-2013"></span>
<span class="source-line-no">2014</span><span id="line-2014">  /**</span>
<span class="source-line-no">2015</span><span id="line-2015">   * Load table with rows from 'aaa' to 'zzz'.</span>
<span class="source-line-no">2016</span><span id="line-2016">   * @param t Table</span>
<span class="source-line-no">2017</span><span id="line-2017">   * @param f Family</span>
<span class="source-line-no">2018</span><span id="line-2018">   * @return Count of rows loaded.</span>
<span class="source-line-no">2019</span><span id="line-2019">   */</span>
<span class="source-line-no">2020</span><span id="line-2020">  public int loadTable(final Table t, final byte[] f) throws IOException {</span>
<span class="source-line-no">2021</span><span id="line-2021">    return loadTable(t, new byte[][] { f });</span>
<span class="source-line-no">2022</span><span id="line-2022">  }</span>
<span class="source-line-no">2023</span><span id="line-2023"></span>
<span class="source-line-no">2024</span><span id="line-2024">  /**</span>
<span class="source-line-no">2025</span><span id="line-2025">   * Load table with rows from 'aaa' to 'zzz'.</span>
<span class="source-line-no">2026</span><span id="line-2026">   * @param t Table</span>
<span class="source-line-no">2027</span><span id="line-2027">   * @param f Family</span>
<span class="source-line-no">2028</span><span id="line-2028">   * @return Count of rows loaded.</span>
<span class="source-line-no">2029</span><span id="line-2029">   */</span>
<span class="source-line-no">2030</span><span id="line-2030">  public int loadTable(final Table t, final byte[] f, boolean writeToWAL) throws IOException {</span>
<span class="source-line-no">2031</span><span id="line-2031">    return loadTable(t, new byte[][] { f }, null, writeToWAL);</span>
<span class="source-line-no">2032</span><span id="line-2032">  }</span>
<span class="source-line-no">2033</span><span id="line-2033"></span>
<span class="source-line-no">2034</span><span id="line-2034">  /**</span>
<span class="source-line-no">2035</span><span id="line-2035">   * Load table of multiple column families with rows from 'aaa' to 'zzz'.</span>
<span class="source-line-no">2036</span><span id="line-2036">   * @param t Table</span>
<span class="source-line-no">2037</span><span id="line-2037">   * @param f Array of Families to load</span>
<span class="source-line-no">2038</span><span id="line-2038">   * @return Count of rows loaded.</span>
<span class="source-line-no">2039</span><span id="line-2039">   */</span>
<span class="source-line-no">2040</span><span id="line-2040">  public int loadTable(final Table t, final byte[][] f) throws IOException {</span>
<span class="source-line-no">2041</span><span id="line-2041">    return loadTable(t, f, null);</span>
<span class="source-line-no">2042</span><span id="line-2042">  }</span>
<span class="source-line-no">2043</span><span id="line-2043"></span>
<span class="source-line-no">2044</span><span id="line-2044">  /**</span>
<span class="source-line-no">2045</span><span id="line-2045">   * Load table of multiple column families with rows from 'aaa' to 'zzz'.</span>
<span class="source-line-no">2046</span><span id="line-2046">   * @param t     Table</span>
<span class="source-line-no">2047</span><span id="line-2047">   * @param f     Array of Families to load</span>
<span class="source-line-no">2048</span><span id="line-2048">   * @param value the values of the cells. If null is passed, the row key is used as value</span>
<span class="source-line-no">2049</span><span id="line-2049">   * @return Count of rows loaded.</span>
<span class="source-line-no">2050</span><span id="line-2050">   */</span>
<span class="source-line-no">2051</span><span id="line-2051">  public int loadTable(final Table t, final byte[][] f, byte[] value) throws IOException {</span>
<span class="source-line-no">2052</span><span id="line-2052">    return loadTable(t, f, value, true);</span>
<span class="source-line-no">2053</span><span id="line-2053">  }</span>
<span class="source-line-no">2054</span><span id="line-2054"></span>
<span class="source-line-no">2055</span><span id="line-2055">  /**</span>
<span class="source-line-no">2056</span><span id="line-2056">   * Load table of multiple column families with rows from 'aaa' to 'zzz'.</span>
<span class="source-line-no">2057</span><span id="line-2057">   * @param t     Table</span>
<span class="source-line-no">2058</span><span id="line-2058">   * @param f     Array of Families to load</span>
<span class="source-line-no">2059</span><span id="line-2059">   * @param value the values of the cells. If null is passed, the row key is used as value</span>
<span class="source-line-no">2060</span><span id="line-2060">   * @return Count of rows loaded.</span>
<span class="source-line-no">2061</span><span id="line-2061">   */</span>
<span class="source-line-no">2062</span><span id="line-2062">  public int loadTable(final Table t, final byte[][] f, byte[] value, boolean writeToWAL)</span>
<span class="source-line-no">2063</span><span id="line-2063">    throws IOException {</span>
<span class="source-line-no">2064</span><span id="line-2064">    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();</span>
<span class="source-line-no">2065</span><span id="line-2065">    for (byte[] row : HBaseTestingUtility.ROWS) {</span>
<span class="source-line-no">2066</span><span id="line-2066">      Put put = new Put(row);</span>
<span class="source-line-no">2067</span><span id="line-2067">      put.setDurability(writeToWAL ? Durability.USE_DEFAULT : Durability.SKIP_WAL);</span>
<span class="source-line-no">2068</span><span id="line-2068">      for (int i = 0; i &lt; f.length; i++) {</span>
<span class="source-line-no">2069</span><span id="line-2069">        byte[] value1 = value != null ? value : row;</span>
<span class="source-line-no">2070</span><span id="line-2070">        put.addColumn(f[i], f[i], value1);</span>
<span class="source-line-no">2071</span><span id="line-2071">      }</span>
<span class="source-line-no">2072</span><span id="line-2072">      puts.add(put);</span>
<span class="source-line-no">2073</span><span id="line-2073">    }</span>
<span class="source-line-no">2074</span><span id="line-2074">    t.put(puts);</span>
<span class="source-line-no">2075</span><span id="line-2075">    return puts.size();</span>
<span class="source-line-no">2076</span><span id="line-2076">  }</span>
<span class="source-line-no">2077</span><span id="line-2077"></span>
<span class="source-line-no">2078</span><span id="line-2078">  /**</span>
<span class="source-line-no">2079</span><span id="line-2079">   * A tracker for tracking and validating table rows generated with</span>
<span class="source-line-no">2080</span><span id="line-2080">   * {@link HBaseTestingUtility#loadTable(Table, byte[])}</span>
<span class="source-line-no">2081</span><span id="line-2081">   */</span>
<span class="source-line-no">2082</span><span id="line-2082">  public static class SeenRowTracker {</span>
<span class="source-line-no">2083</span><span id="line-2083">    int dim = 'z' - 'a' + 1;</span>
<span class="source-line-no">2084</span><span id="line-2084">    int[][][] seenRows = new int[dim][dim][dim]; // count of how many times the row is seen</span>
<span class="source-line-no">2085</span><span id="line-2085">    byte[] startRow;</span>
<span class="source-line-no">2086</span><span id="line-2086">    byte[] stopRow;</span>
<span class="source-line-no">2087</span><span id="line-2087"></span>
<span class="source-line-no">2088</span><span id="line-2088">    public SeenRowTracker(byte[] startRow, byte[] stopRow) {</span>
<span class="source-line-no">2089</span><span id="line-2089">      this.startRow = startRow;</span>
<span class="source-line-no">2090</span><span id="line-2090">      this.stopRow = stopRow;</span>
<span class="source-line-no">2091</span><span id="line-2091">    }</span>
<span class="source-line-no">2092</span><span id="line-2092"></span>
<span class="source-line-no">2093</span><span id="line-2093">    void reset() {</span>
<span class="source-line-no">2094</span><span id="line-2094">      for (byte[] row : ROWS) {</span>
<span class="source-line-no">2095</span><span id="line-2095">        seenRows[i(row[0])][i(row[1])][i(row[2])] = 0;</span>
<span class="source-line-no">2096</span><span id="line-2096">      }</span>
<span class="source-line-no">2097</span><span id="line-2097">    }</span>
<span class="source-line-no">2098</span><span id="line-2098"></span>
<span class="source-line-no">2099</span><span id="line-2099">    int i(byte b) {</span>
<span class="source-line-no">2100</span><span id="line-2100">      return b - 'a';</span>
<span class="source-line-no">2101</span><span id="line-2101">    }</span>
<span class="source-line-no">2102</span><span id="line-2102"></span>
<span class="source-line-no">2103</span><span id="line-2103">    public void addRow(byte[] row) {</span>
<span class="source-line-no">2104</span><span id="line-2104">      seenRows[i(row[0])][i(row[1])][i(row[2])]++;</span>
<span class="source-line-no">2105</span><span id="line-2105">    }</span>
<span class="source-line-no">2106</span><span id="line-2106"></span>
<span class="source-line-no">2107</span><span id="line-2107">    /**</span>
<span class="source-line-no">2108</span><span id="line-2108">     * Validate that all the rows between startRow and stopRow are seen exactly once, and all other</span>
<span class="source-line-no">2109</span><span id="line-2109">     * rows none</span>
<span class="source-line-no">2110</span><span id="line-2110">     */</span>
<span class="source-line-no">2111</span><span id="line-2111">    public void validate() {</span>
<span class="source-line-no">2112</span><span id="line-2112">      for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {</span>
<span class="source-line-no">2113</span><span id="line-2113">        for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {</span>
<span class="source-line-no">2114</span><span id="line-2114">          for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {</span>
<span class="source-line-no">2115</span><span id="line-2115">            int count = seenRows[i(b1)][i(b2)][i(b3)];</span>
<span class="source-line-no">2116</span><span id="line-2116">            int expectedCount = 0;</span>
<span class="source-line-no">2117</span><span id="line-2117">            if (</span>
<span class="source-line-no">2118</span><span id="line-2118">              Bytes.compareTo(new byte[] { b1, b2, b3 }, startRow) &gt;= 0</span>
<span class="source-line-no">2119</span><span id="line-2119">                &amp;&amp; Bytes.compareTo(new byte[] { b1, b2, b3 }, stopRow) &lt; 0</span>
<span class="source-line-no">2120</span><span id="line-2120">            ) {</span>
<span class="source-line-no">2121</span><span id="line-2121">              expectedCount = 1;</span>
<span class="source-line-no">2122</span><span id="line-2122">            }</span>
<span class="source-line-no">2123</span><span id="line-2123">            if (count != expectedCount) {</span>
<span class="source-line-no">2124</span><span id="line-2124">              String row = new String(new byte[] { b1, b2, b3 }, StandardCharsets.UTF_8);</span>
<span class="source-line-no">2125</span><span id="line-2125">              throw new RuntimeException("Row:" + row + " has a seen count of " + count + " "</span>
<span class="source-line-no">2126</span><span id="line-2126">                + "instead of " + expectedCount);</span>
<span class="source-line-no">2127</span><span id="line-2127">            }</span>
<span class="source-line-no">2128</span><span id="line-2128">          }</span>
<span class="source-line-no">2129</span><span id="line-2129">        }</span>
<span class="source-line-no">2130</span><span id="line-2130">      }</span>
<span class="source-line-no">2131</span><span id="line-2131">    }</span>
<span class="source-line-no">2132</span><span id="line-2132">  }</span>
<span class="source-line-no">2133</span><span id="line-2133"></span>
<span class="source-line-no">2134</span><span id="line-2134">  public int loadRegion(final HRegion r, final byte[] f) throws IOException {</span>
<span class="source-line-no">2135</span><span id="line-2135">    return loadRegion(r, f, false);</span>
<span class="source-line-no">2136</span><span id="line-2136">  }</span>
<span class="source-line-no">2137</span><span id="line-2137"></span>
<span class="source-line-no">2138</span><span id="line-2138">  public int loadRegion(final Region r, final byte[] f) throws IOException {</span>
<span class="source-line-no">2139</span><span id="line-2139">    return loadRegion((HRegion) r, f);</span>
<span class="source-line-no">2140</span><span id="line-2140">  }</span>
<span class="source-line-no">2141</span><span id="line-2141"></span>
<span class="source-line-no">2142</span><span id="line-2142">  /**</span>
<span class="source-line-no">2143</span><span id="line-2143">   * Load region with rows from 'aaa' to 'zzz'.</span>
<span class="source-line-no">2144</span><span id="line-2144">   * @param r     Region</span>
<span class="source-line-no">2145</span><span id="line-2145">   * @param f     Family</span>
<span class="source-line-no">2146</span><span id="line-2146">   * @param flush flush the cache if true</span>
<span class="source-line-no">2147</span><span id="line-2147">   * @return Count of rows loaded.</span>
<span class="source-line-no">2148</span><span id="line-2148">   */</span>
<span class="source-line-no">2149</span><span id="line-2149">  public int loadRegion(final HRegion r, final byte[] f, final boolean flush) throws IOException {</span>
<span class="source-line-no">2150</span><span id="line-2150">    byte[] k = new byte[3];</span>
<span class="source-line-no">2151</span><span id="line-2151">    int rowCount = 0;</span>
<span class="source-line-no">2152</span><span id="line-2152">    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {</span>
<span class="source-line-no">2153</span><span id="line-2153">      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {</span>
<span class="source-line-no">2154</span><span id="line-2154">        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {</span>
<span class="source-line-no">2155</span><span id="line-2155">          k[0] = b1;</span>
<span class="source-line-no">2156</span><span id="line-2156">          k[1] = b2;</span>
<span class="source-line-no">2157</span><span id="line-2157">          k[2] = b3;</span>
<span class="source-line-no">2158</span><span id="line-2158">          Put put = new Put(k);</span>
<span class="source-line-no">2159</span><span id="line-2159">          put.setDurability(Durability.SKIP_WAL);</span>
<span class="source-line-no">2160</span><span id="line-2160">          put.addColumn(f, null, k);</span>
<span class="source-line-no">2161</span><span id="line-2161">          if (r.getWAL() == null) {</span>
<span class="source-line-no">2162</span><span id="line-2162">            put.setDurability(Durability.SKIP_WAL);</span>
<span class="source-line-no">2163</span><span id="line-2163">          }</span>
<span class="source-line-no">2164</span><span id="line-2164">          int preRowCount = rowCount;</span>
<span class="source-line-no">2165</span><span id="line-2165">          int pause = 10;</span>
<span class="source-line-no">2166</span><span id="line-2166">          int maxPause = 1000;</span>
<span class="source-line-no">2167</span><span id="line-2167">          while (rowCount == preRowCount) {</span>
<span class="source-line-no">2168</span><span id="line-2168">            try {</span>
<span class="source-line-no">2169</span><span id="line-2169">              r.put(put);</span>
<span class="source-line-no">2170</span><span id="line-2170">              rowCount++;</span>
<span class="source-line-no">2171</span><span id="line-2171">            } catch (RegionTooBusyException e) {</span>
<span class="source-line-no">2172</span><span id="line-2172">              pause = (pause * 2 &gt;= maxPause) ? maxPause : pause * 2;</span>
<span class="source-line-no">2173</span><span id="line-2173">              Threads.sleep(pause);</span>
<span class="source-line-no">2174</span><span id="line-2174">            }</span>
<span class="source-line-no">2175</span><span id="line-2175">          }</span>
<span class="source-line-no">2176</span><span id="line-2176">        }</span>
<span class="source-line-no">2177</span><span id="line-2177">      }</span>
<span class="source-line-no">2178</span><span id="line-2178">      if (flush) {</span>
<span class="source-line-no">2179</span><span id="line-2179">        r.flush(true);</span>
<span class="source-line-no">2180</span><span id="line-2180">      }</span>
<span class="source-line-no">2181</span><span id="line-2181">    }</span>
<span class="source-line-no">2182</span><span id="line-2182">    return rowCount;</span>
<span class="source-line-no">2183</span><span id="line-2183">  }</span>
<span class="source-line-no">2184</span><span id="line-2184"></span>
<span class="source-line-no">2185</span><span id="line-2185">  public void loadNumericRows(final Table t, final byte[] f, int startRow, int endRow)</span>
<span class="source-line-no">2186</span><span id="line-2186">    throws IOException {</span>
<span class="source-line-no">2187</span><span id="line-2187">    for (int i = startRow; i &lt; endRow; i++) {</span>
<span class="source-line-no">2188</span><span id="line-2188">      byte[] data = Bytes.toBytes(String.valueOf(i));</span>
<span class="source-line-no">2189</span><span id="line-2189">      Put put = new Put(data);</span>
<span class="source-line-no">2190</span><span id="line-2190">      put.addColumn(f, null, data);</span>
<span class="source-line-no">2191</span><span id="line-2191">      t.put(put);</span>
<span class="source-line-no">2192</span><span id="line-2192">    }</span>
<span class="source-line-no">2193</span><span id="line-2193">  }</span>
<span class="source-line-no">2194</span><span id="line-2194"></span>
<span class="source-line-no">2195</span><span id="line-2195">  public void loadRandomRows(final Table t, final byte[] f, int rowSize, int totalRows)</span>
<span class="source-line-no">2196</span><span id="line-2196">    throws IOException {</span>
<span class="source-line-no">2197</span><span id="line-2197">    byte[] row = new byte[rowSize];</span>
<span class="source-line-no">2198</span><span id="line-2198">    for (int i = 0; i &lt; totalRows; i++) {</span>
<span class="source-line-no">2199</span><span id="line-2199">      Bytes.random(row);</span>
<span class="source-line-no">2200</span><span id="line-2200">      Put put = new Put(row);</span>
<span class="source-line-no">2201</span><span id="line-2201">      put.addColumn(f, new byte[] { 0 }, new byte[] { 0 });</span>
<span class="source-line-no">2202</span><span id="line-2202">      t.put(put);</span>
<span class="source-line-no">2203</span><span id="line-2203">    }</span>
<span class="source-line-no">2204</span><span id="line-2204">  }</span>
<span class="source-line-no">2205</span><span id="line-2205"></span>
<span class="source-line-no">2206</span><span id="line-2206">  public void verifyNumericRows(Table table, final byte[] f, int startRow, int endRow,</span>
<span class="source-line-no">2207</span><span id="line-2207">    int replicaId) throws IOException {</span>
<span class="source-line-no">2208</span><span id="line-2208">    for (int i = startRow; i &lt; endRow; i++) {</span>
<span class="source-line-no">2209</span><span id="line-2209">      String failMsg = "Failed verification of row :" + i;</span>
<span class="source-line-no">2210</span><span id="line-2210">      byte[] data = Bytes.toBytes(String.valueOf(i));</span>
<span class="source-line-no">2211</span><span id="line-2211">      Get get = new Get(data);</span>
<span class="source-line-no">2212</span><span id="line-2212">      get.setReplicaId(replicaId);</span>
<span class="source-line-no">2213</span><span id="line-2213">      get.setConsistency(Consistency.TIMELINE);</span>
<span class="source-line-no">2214</span><span id="line-2214">      Result result = table.get(get);</span>
<span class="source-line-no">2215</span><span id="line-2215">      if (!result.containsColumn(f, null)) {</span>
<span class="source-line-no">2216</span><span id="line-2216">        throw new AssertionError(failMsg);</span>
<span class="source-line-no">2217</span><span id="line-2217">      }</span>
<span class="source-line-no">2218</span><span id="line-2218">      assertEquals(failMsg, 1, result.getColumnCells(f, null).size());</span>
<span class="source-line-no">2219</span><span id="line-2219">      Cell cell = result.getColumnLatestCell(f, null);</span>
<span class="source-line-no">2220</span><span id="line-2220">      if (</span>
<span class="source-line-no">2221</span><span id="line-2221">        !Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),</span>
<span class="source-line-no">2222</span><span id="line-2222">          cell.getValueLength())</span>
<span class="source-line-no">2223</span><span id="line-2223">      ) {</span>
<span class="source-line-no">2224</span><span id="line-2224">        throw new AssertionError(failMsg);</span>
<span class="source-line-no">2225</span><span id="line-2225">      }</span>
<span class="source-line-no">2226</span><span id="line-2226">    }</span>
<span class="source-line-no">2227</span><span id="line-2227">  }</span>
<span class="source-line-no">2228</span><span id="line-2228"></span>
<span class="source-line-no">2229</span><span id="line-2229">  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow)</span>
<span class="source-line-no">2230</span><span id="line-2230">    throws IOException {</span>
<span class="source-line-no">2231</span><span id="line-2231">    verifyNumericRows((HRegion) region, f, startRow, endRow);</span>
<span class="source-line-no">2232</span><span id="line-2232">  }</span>
<span class="source-line-no">2233</span><span id="line-2233"></span>
<span class="source-line-no">2234</span><span id="line-2234">  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow)</span>
<span class="source-line-no">2235</span><span id="line-2235">    throws IOException {</span>
<span class="source-line-no">2236</span><span id="line-2236">    verifyNumericRows(region, f, startRow, endRow, true);</span>
<span class="source-line-no">2237</span><span id="line-2237">  }</span>
<span class="source-line-no">2238</span><span id="line-2238"></span>
<span class="source-line-no">2239</span><span id="line-2239">  public void verifyNumericRows(Region region, final byte[] f, int startRow, int endRow,</span>
<span class="source-line-no">2240</span><span id="line-2240">    final boolean present) throws IOException {</span>
<span class="source-line-no">2241</span><span id="line-2241">    verifyNumericRows((HRegion) region, f, startRow, endRow, present);</span>
<span class="source-line-no">2242</span><span id="line-2242">  }</span>
<span class="source-line-no">2243</span><span id="line-2243"></span>
<span class="source-line-no">2244</span><span id="line-2244">  public void verifyNumericRows(HRegion region, final byte[] f, int startRow, int endRow,</span>
<span class="source-line-no">2245</span><span id="line-2245">    final boolean present) throws IOException {</span>
<span class="source-line-no">2246</span><span id="line-2246">    for (int i = startRow; i &lt; endRow; i++) {</span>
<span class="source-line-no">2247</span><span id="line-2247">      String failMsg = "Failed verification of row :" + i;</span>
<span class="source-line-no">2248</span><span id="line-2248">      byte[] data = Bytes.toBytes(String.valueOf(i));</span>
<span class="source-line-no">2249</span><span id="line-2249">      Result result = region.get(new Get(data));</span>
<span class="source-line-no">2250</span><span id="line-2250"></span>
<span class="source-line-no">2251</span><span id="line-2251">      boolean hasResult = result != null &amp;&amp; !result.isEmpty();</span>
<span class="source-line-no">2252</span><span id="line-2252">      if (present != hasResult) {</span>
<span class="source-line-no">2253</span><span id="line-2253">        throw new AssertionError(</span>
<span class="source-line-no">2254</span><span id="line-2254">          failMsg + result + " expected:&lt;" + present + "&gt; but was:&lt;" + hasResult + "&gt;");</span>
<span class="source-line-no">2255</span><span id="line-2255">      }</span>
<span class="source-line-no">2256</span><span id="line-2256">      if (!present) continue;</span>
<span class="source-line-no">2257</span><span id="line-2257"></span>
<span class="source-line-no">2258</span><span id="line-2258">      if (!result.containsColumn(f, null)) {</span>
<span class="source-line-no">2259</span><span id="line-2259">        throw new AssertionError(failMsg);</span>
<span class="source-line-no">2260</span><span id="line-2260">      }</span>
<span class="source-line-no">2261</span><span id="line-2261">      assertEquals(failMsg, 1, result.getColumnCells(f, null).size());</span>
<span class="source-line-no">2262</span><span id="line-2262">      Cell cell = result.getColumnLatestCell(f, null);</span>
<span class="source-line-no">2263</span><span id="line-2263">      if (</span>
<span class="source-line-no">2264</span><span id="line-2264">        !Bytes.equals(data, 0, data.length, cell.getValueArray(), cell.getValueOffset(),</span>
<span class="source-line-no">2265</span><span id="line-2265">          cell.getValueLength())</span>
<span class="source-line-no">2266</span><span id="line-2266">      ) {</span>
<span class="source-line-no">2267</span><span id="line-2267">        throw new AssertionError(failMsg);</span>
<span class="source-line-no">2268</span><span id="line-2268">      }</span>
<span class="source-line-no">2269</span><span id="line-2269">    }</span>
<span class="source-line-no">2270</span><span id="line-2270">  }</span>
<span class="source-line-no">2271</span><span id="line-2271"></span>
<span class="source-line-no">2272</span><span id="line-2272">  public void deleteNumericRows(final Table t, final byte[] f, int startRow, int endRow)</span>
<span class="source-line-no">2273</span><span id="line-2273">    throws IOException {</span>
<span class="source-line-no">2274</span><span id="line-2274">    for (int i = startRow; i &lt; endRow; i++) {</span>
<span class="source-line-no">2275</span><span id="line-2275">      byte[] data = Bytes.toBytes(String.valueOf(i));</span>
<span class="source-line-no">2276</span><span id="line-2276">      Delete delete = new Delete(data);</span>
<span class="source-line-no">2277</span><span id="line-2277">      delete.addFamily(f);</span>
<span class="source-line-no">2278</span><span id="line-2278">      t.delete(delete);</span>
<span class="source-line-no">2279</span><span id="line-2279">    }</span>
<span class="source-line-no">2280</span><span id="line-2280">  }</span>
<span class="source-line-no">2281</span><span id="line-2281"></span>
<span class="source-line-no">2282</span><span id="line-2282">  /**</span>
<span class="source-line-no">2283</span><span id="line-2283">   * Return the number of rows in the given table.</span>
<span class="source-line-no">2284</span><span id="line-2284">   * @param table to count rows</span>
<span class="source-line-no">2285</span><span id="line-2285">   * @return count of rows</span>
<span class="source-line-no">2286</span><span id="line-2286">   */</span>
<span class="source-line-no">2287</span><span id="line-2287">  public static int countRows(final Table table) throws IOException {</span>
<span class="source-line-no">2288</span><span id="line-2288">    return countRows(table, new Scan());</span>
<span class="source-line-no">2289</span><span id="line-2289">  }</span>
<span class="source-line-no">2290</span><span id="line-2290"></span>
<span class="source-line-no">2291</span><span id="line-2291">  public static int countRows(final Table table, final Scan scan) throws IOException {</span>
<span class="source-line-no">2292</span><span id="line-2292">    try (ResultScanner results = table.getScanner(scan)) {</span>
<span class="source-line-no">2293</span><span id="line-2293">      int count = 0;</span>
<span class="source-line-no">2294</span><span id="line-2294">      while (results.next() != null) {</span>
<span class="source-line-no">2295</span><span id="line-2295">        count++;</span>
<span class="source-line-no">2296</span><span id="line-2296">      }</span>
<span class="source-line-no">2297</span><span id="line-2297">      return count;</span>
<span class="source-line-no">2298</span><span id="line-2298">    }</span>
<span class="source-line-no">2299</span><span id="line-2299">  }</span>
<span class="source-line-no">2300</span><span id="line-2300"></span>
<span class="source-line-no">2301</span><span id="line-2301">  public int countRows(final Table table, final byte[]... families) throws IOException {</span>
<span class="source-line-no">2302</span><span id="line-2302">    Scan scan = new Scan();</span>
<span class="source-line-no">2303</span><span id="line-2303">    for (byte[] family : families) {</span>
<span class="source-line-no">2304</span><span id="line-2304">      scan.addFamily(family);</span>
<span class="source-line-no">2305</span><span id="line-2305">    }</span>
<span class="source-line-no">2306</span><span id="line-2306">    return countRows(table, scan);</span>
<span class="source-line-no">2307</span><span id="line-2307">  }</span>
<span class="source-line-no">2308</span><span id="line-2308"></span>
<span class="source-line-no">2309</span><span id="line-2309">  /**</span>
<span class="source-line-no">2310</span><span id="line-2310">   * Return the number of rows in the given table.</span>
<span class="source-line-no">2311</span><span id="line-2311">   */</span>
<span class="source-line-no">2312</span><span id="line-2312">  public int countRows(final TableName tableName) throws IOException {</span>
<span class="source-line-no">2313</span><span id="line-2313">    Table table = getConnection().getTable(tableName);</span>
<span class="source-line-no">2314</span><span id="line-2314">    try {</span>
<span class="source-line-no">2315</span><span id="line-2315">      return countRows(table);</span>
<span class="source-line-no">2316</span><span id="line-2316">    } finally {</span>
<span class="source-line-no">2317</span><span id="line-2317">      table.close();</span>
<span class="source-line-no">2318</span><span id="line-2318">    }</span>
<span class="source-line-no">2319</span><span id="line-2319">  }</span>
<span class="source-line-no">2320</span><span id="line-2320"></span>
<span class="source-line-no">2321</span><span id="line-2321">  public int countRows(final Region region) throws IOException {</span>
<span class="source-line-no">2322</span><span id="line-2322">    return countRows(region, new Scan());</span>
<span class="source-line-no">2323</span><span id="line-2323">  }</span>
<span class="source-line-no">2324</span><span id="line-2324"></span>
<span class="source-line-no">2325</span><span id="line-2325">  public int countRows(final Region region, final Scan scan) throws IOException {</span>
<span class="source-line-no">2326</span><span id="line-2326">    InternalScanner scanner = region.getScanner(scan);</span>
<span class="source-line-no">2327</span><span id="line-2327">    try {</span>
<span class="source-line-no">2328</span><span id="line-2328">      return countRows(scanner);</span>
<span class="source-line-no">2329</span><span id="line-2329">    } finally {</span>
<span class="source-line-no">2330</span><span id="line-2330">      scanner.close();</span>
<span class="source-line-no">2331</span><span id="line-2331">    }</span>
<span class="source-line-no">2332</span><span id="line-2332">  }</span>
<span class="source-line-no">2333</span><span id="line-2333"></span>
<span class="source-line-no">2334</span><span id="line-2334">  public int countRows(final InternalScanner scanner) throws IOException {</span>
<span class="source-line-no">2335</span><span id="line-2335">    int scannedCount = 0;</span>
<span class="source-line-no">2336</span><span id="line-2336">    List&lt;Cell&gt; results = new ArrayList&lt;&gt;();</span>
<span class="source-line-no">2337</span><span id="line-2337">    boolean hasMore = true;</span>
<span class="source-line-no">2338</span><span id="line-2338">    while (hasMore) {</span>
<span class="source-line-no">2339</span><span id="line-2339">      hasMore = scanner.next(results);</span>
<span class="source-line-no">2340</span><span id="line-2340">      scannedCount += results.size();</span>
<span class="source-line-no">2341</span><span id="line-2341">      results.clear();</span>
<span class="source-line-no">2342</span><span id="line-2342">    }</span>
<span class="source-line-no">2343</span><span id="line-2343">    return scannedCount;</span>
<span class="source-line-no">2344</span><span id="line-2344">  }</span>
<span class="source-line-no">2345</span><span id="line-2345"></span>
<span class="source-line-no">2346</span><span id="line-2346">  /**</span>
<span class="source-line-no">2347</span><span id="line-2347">   * Return an md5 digest of the entire contents of a table.</span>
<span class="source-line-no">2348</span><span id="line-2348">   */</span>
<span class="source-line-no">2349</span><span id="line-2349">  public String checksumRows(final Table table) throws Exception {</span>
<span class="source-line-no">2350</span><span id="line-2350"></span>
<span class="source-line-no">2351</span><span id="line-2351">    Scan scan = new Scan();</span>
<span class="source-line-no">2352</span><span id="line-2352">    ResultScanner results = table.getScanner(scan);</span>
<span class="source-line-no">2353</span><span id="line-2353">    MessageDigest digest = MessageDigest.getInstance("MD5");</span>
<span class="source-line-no">2354</span><span id="line-2354">    for (Result res : results) {</span>
<span class="source-line-no">2355</span><span id="line-2355">      digest.update(res.getRow());</span>
<span class="source-line-no">2356</span><span id="line-2356">    }</span>
<span class="source-line-no">2357</span><span id="line-2357">    results.close();</span>
<span class="source-line-no">2358</span><span id="line-2358">    return digest.toString();</span>
<span class="source-line-no">2359</span><span id="line-2359">  }</span>
<span class="source-line-no">2360</span><span id="line-2360"></span>
<span class="source-line-no">2361</span><span id="line-2361">  /** All the row values for the data loaded by {@link #loadTable(Table, byte[])} */</span>
<span class="source-line-no">2362</span><span id="line-2362">  public static final byte[][] ROWS = new byte[(int) Math.pow('z' - 'a' + 1, 3)][3]; // ~52KB</span>
<span class="source-line-no">2363</span><span id="line-2363">  static {</span>
<span class="source-line-no">2364</span><span id="line-2364">    int i = 0;</span>
<span class="source-line-no">2365</span><span id="line-2365">    for (byte b1 = 'a'; b1 &lt;= 'z'; b1++) {</span>
<span class="source-line-no">2366</span><span id="line-2366">      for (byte b2 = 'a'; b2 &lt;= 'z'; b2++) {</span>
<span class="source-line-no">2367</span><span id="line-2367">        for (byte b3 = 'a'; b3 &lt;= 'z'; b3++) {</span>
<span class="source-line-no">2368</span><span id="line-2368">          ROWS[i][0] = b1;</span>
<span class="source-line-no">2369</span><span id="line-2369">          ROWS[i][1] = b2;</span>
<span class="source-line-no">2370</span><span id="line-2370">          ROWS[i][2] = b3;</span>
<span class="source-line-no">2371</span><span id="line-2371">          i++;</span>
<span class="source-line-no">2372</span><span id="line-2372">        }</span>
<span class="source-line-no">2373</span><span id="line-2373">      }</span>
<span class="source-line-no">2374</span><span id="line-2374">    }</span>
<span class="source-line-no">2375</span><span id="line-2375">  }</span>
<span class="source-line-no">2376</span><span id="line-2376"></span>
<span class="source-line-no">2377</span><span id="line-2377">  public static final byte[][] KEYS = { HConstants.EMPTY_BYTE_ARRAY, Bytes.toBytes("bbb"),</span>
<span class="source-line-no">2378</span><span id="line-2378">    Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"), Bytes.toBytes("fff"),</span>
<span class="source-line-no">2379</span><span id="line-2379">    Bytes.toBytes("ggg"), Bytes.toBytes("hhh"), Bytes.toBytes("iii"), Bytes.toBytes("jjj"),</span>
<span class="source-line-no">2380</span><span id="line-2380">    Bytes.toBytes("kkk"), Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),</span>
<span class="source-line-no">2381</span><span id="line-2381">    Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"), Bytes.toBytes("rrr"),</span>
<span class="source-line-no">2382</span><span id="line-2382">    Bytes.toBytes("sss"), Bytes.toBytes("ttt"), Bytes.toBytes("uuu"), Bytes.toBytes("vvv"),</span>
<span class="source-line-no">2383</span><span id="line-2383">    Bytes.toBytes("www"), Bytes.toBytes("xxx"), Bytes.toBytes("yyy") };</span>
<span class="source-line-no">2384</span><span id="line-2384"></span>
<span class="source-line-no">2385</span><span id="line-2385">  public static final byte[][] KEYS_FOR_HBA_CREATE_TABLE = { Bytes.toBytes("bbb"),</span>
<span class="source-line-no">2386</span><span id="line-2386">    Bytes.toBytes("ccc"), Bytes.toBytes("ddd"), Bytes.toBytes("eee"), Bytes.toBytes("fff"),</span>
<span class="source-line-no">2387</span><span id="line-2387">    Bytes.toBytes("ggg"), Bytes.toBytes("hhh"), Bytes.toBytes("iii"), Bytes.toBytes("jjj"),</span>
<span class="source-line-no">2388</span><span id="line-2388">    Bytes.toBytes("kkk"), Bytes.toBytes("lll"), Bytes.toBytes("mmm"), Bytes.toBytes("nnn"),</span>
<span class="source-line-no">2389</span><span id="line-2389">    Bytes.toBytes("ooo"), Bytes.toBytes("ppp"), Bytes.toBytes("qqq"), Bytes.toBytes("rrr"),</span>
<span class="source-line-no">2390</span><span id="line-2390">    Bytes.toBytes("sss"), Bytes.toBytes("ttt"), Bytes.toBytes("uuu"), Bytes.toBytes("vvv"),</span>
<span class="source-line-no">2391</span><span id="line-2391">    Bytes.toBytes("www"), Bytes.toBytes("xxx"), Bytes.toBytes("yyy"), Bytes.toBytes("zzz") };</span>
<span class="source-line-no">2392</span><span id="line-2392"></span>
<span class="source-line-no">2393</span><span id="line-2393">  /**</span>
<span class="source-line-no">2394</span><span id="line-2394">   * Create rows in hbase:meta for regions of the specified table with the specified start keys. The</span>
<span class="source-line-no">2395</span><span id="line-2395">   * first startKey should be a 0 length byte array if you want to form a proper range of regions.</span>
<span class="source-line-no">2396</span><span id="line-2396">   * @return list of region info for regions added to meta</span>
<span class="source-line-no">2397</span><span id="line-2397">   */</span>
<span class="source-line-no">2398</span><span id="line-2398">  public List&lt;RegionInfo&gt; createMultiRegionsInMeta(final Configuration conf,</span>
<span class="source-line-no">2399</span><span id="line-2399">    final TableDescriptor htd, byte[][] startKeys) throws IOException {</span>
<span class="source-line-no">2400</span><span id="line-2400">    Table meta = getConnection().getTable(TableName.META_TABLE_NAME);</span>
<span class="source-line-no">2401</span><span id="line-2401">    Arrays.sort(startKeys, Bytes.BYTES_COMPARATOR);</span>
<span class="source-line-no">2402</span><span id="line-2402">    List&lt;RegionInfo&gt; newRegions = new ArrayList&lt;&gt;(startKeys.length);</span>
<span class="source-line-no">2403</span><span id="line-2403">    MetaTableAccessor.updateTableState(getConnection(), htd.getTableName(),</span>
<span class="source-line-no">2404</span><span id="line-2404">      TableState.State.ENABLED);</span>
<span class="source-line-no">2405</span><span id="line-2405">    // add custom ones</span>
<span class="source-line-no">2406</span><span id="line-2406">    for (int i = 0; i &lt; startKeys.length; i++) {</span>
<span class="source-line-no">2407</span><span id="line-2407">      int j = (i + 1) % startKeys.length;</span>
<span class="source-line-no">2408</span><span id="line-2408">      RegionInfo hri = RegionInfoBuilder.newBuilder(htd.getTableName()).setStartKey(startKeys[i])</span>
<span class="source-line-no">2409</span><span id="line-2409">        .setEndKey(startKeys[j]).build();</span>
<span class="source-line-no">2410</span><span id="line-2410">      MetaTableAccessor.addRegionsToMeta(getConnection(), Collections.singletonList(hri), 1);</span>
<span class="source-line-no">2411</span><span id="line-2411">      newRegions.add(hri);</span>
<span class="source-line-no">2412</span><span id="line-2412">    }</span>
<span class="source-line-no">2413</span><span id="line-2413"></span>
<span class="source-line-no">2414</span><span id="line-2414">    meta.close();</span>
<span class="source-line-no">2415</span><span id="line-2415">    return newRegions;</span>
<span class="source-line-no">2416</span><span id="line-2416">  }</span>
<span class="source-line-no">2417</span><span id="line-2417"></span>
<span class="source-line-no">2418</span><span id="line-2418">  /**</span>
<span class="source-line-no">2419</span><span id="line-2419">   * Create an unmanaged WAL. Be sure to close it when you're through.</span>
<span class="source-line-no">2420</span><span id="line-2420">   */</span>
<span class="source-line-no">2421</span><span id="line-2421">  public static WAL createWal(final Configuration conf, final Path rootDir, final RegionInfo hri)</span>
<span class="source-line-no">2422</span><span id="line-2422">    throws IOException {</span>
<span class="source-line-no">2423</span><span id="line-2423">    // The WAL subsystem will use the default rootDir rather than the passed in rootDir</span>
<span class="source-line-no">2424</span><span id="line-2424">    // unless I pass along via the conf.</span>
<span class="source-line-no">2425</span><span id="line-2425">    Configuration confForWAL = new Configuration(conf);</span>
<span class="source-line-no">2426</span><span id="line-2426">    confForWAL.set(HConstants.HBASE_DIR, rootDir.toString());</span>
<span class="source-line-no">2427</span><span id="line-2427">    return new WALFactory(confForWAL, "hregion-" + RandomStringUtils.randomNumeric(8)).getWAL(hri);</span>
<span class="source-line-no">2428</span><span id="line-2428">  }</span>
<span class="source-line-no">2429</span><span id="line-2429"></span>
<span class="source-line-no">2430</span><span id="line-2430">  /**</span>
<span class="source-line-no">2431</span><span id="line-2431">   * Create a region with it's own WAL. Be sure to call</span>
<span class="source-line-no">2432</span><span id="line-2432">   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.</span>
<span class="source-line-no">2433</span><span id="line-2433">   */</span>
<span class="source-line-no">2434</span><span id="line-2434">  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,</span>
<span class="source-line-no">2435</span><span id="line-2435">    final Configuration conf, final TableDescriptor htd) throws IOException {</span>
<span class="source-line-no">2436</span><span id="line-2436">    return createRegionAndWAL(info, rootDir, conf, htd, true);</span>
<span class="source-line-no">2437</span><span id="line-2437">  }</span>
<span class="source-line-no">2438</span><span id="line-2438"></span>
<span class="source-line-no">2439</span><span id="line-2439">  /**</span>
<span class="source-line-no">2440</span><span id="line-2440">   * Create a region with it's own WAL. Be sure to call</span>
<span class="source-line-no">2441</span><span id="line-2441">   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.</span>
<span class="source-line-no">2442</span><span id="line-2442">   */</span>
<span class="source-line-no">2443</span><span id="line-2443">  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,</span>
<span class="source-line-no">2444</span><span id="line-2444">    final Configuration conf, final TableDescriptor htd, BlockCache blockCache) throws IOException {</span>
<span class="source-line-no">2445</span><span id="line-2445">    HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);</span>
<span class="source-line-no">2446</span><span id="line-2446">    region.setBlockCache(blockCache);</span>
<span class="source-line-no">2447</span><span id="line-2447">    region.initialize();</span>
<span class="source-line-no">2448</span><span id="line-2448">    return region;</span>
<span class="source-line-no">2449</span><span id="line-2449">  }</span>
<span class="source-line-no">2450</span><span id="line-2450"></span>
<span class="source-line-no">2451</span><span id="line-2451">  /**</span>
<span class="source-line-no">2452</span><span id="line-2452">   * Create a region with it's own WAL. Be sure to call</span>
<span class="source-line-no">2453</span><span id="line-2453">   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.</span>
<span class="source-line-no">2454</span><span id="line-2454">   */</span>
<span class="source-line-no">2455</span><span id="line-2455">  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,</span>
<span class="source-line-no">2456</span><span id="line-2456">    final Configuration conf, final TableDescriptor htd, MobFileCache mobFileCache)</span>
<span class="source-line-no">2457</span><span id="line-2457">    throws IOException {</span>
<span class="source-line-no">2458</span><span id="line-2458">    HRegion region = createRegionAndWAL(info, rootDir, conf, htd, false);</span>
<span class="source-line-no">2459</span><span id="line-2459">    region.setMobFileCache(mobFileCache);</span>
<span class="source-line-no">2460</span><span id="line-2460">    region.initialize();</span>
<span class="source-line-no">2461</span><span id="line-2461">    return region;</span>
<span class="source-line-no">2462</span><span id="line-2462">  }</span>
<span class="source-line-no">2463</span><span id="line-2463"></span>
<span class="source-line-no">2464</span><span id="line-2464">  /**</span>
<span class="source-line-no">2465</span><span id="line-2465">   * Create a region with it's own WAL. Be sure to call</span>
<span class="source-line-no">2466</span><span id="line-2466">   * {@link HBaseTestingUtility#closeRegionAndWAL(HRegion)} to clean up all resources.</span>
<span class="source-line-no">2467</span><span id="line-2467">   */</span>
<span class="source-line-no">2468</span><span id="line-2468">  public static HRegion createRegionAndWAL(final RegionInfo info, final Path rootDir,</span>
<span class="source-line-no">2469</span><span id="line-2469">    final Configuration conf, final TableDescriptor htd, boolean initialize) throws IOException {</span>
<span class="source-line-no">2470</span><span id="line-2470">    ChunkCreator.initialize(MemStoreLAB.CHUNK_SIZE_DEFAULT, false, 0, 0, 0, null,</span>
<span class="source-line-no">2471</span><span id="line-2471">      MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);</span>
<span class="source-line-no">2472</span><span id="line-2472">    WAL wal = createWal(conf, rootDir, info);</span>
<span class="source-line-no">2473</span><span id="line-2473">    return HRegion.createHRegion(info, rootDir, conf, htd, wal, initialize);</span>
<span class="source-line-no">2474</span><span id="line-2474">  }</span>
<span class="source-line-no">2475</span><span id="line-2475"></span>
<span class="source-line-no">2476</span><span id="line-2476">  /**</span>
<span class="source-line-no">2477</span><span id="line-2477">   * Returns all rows from the hbase:meta table.</span>
<span class="source-line-no">2478</span><span id="line-2478">   * @throws IOException When reading the rows fails.</span>
<span class="source-line-no">2479</span><span id="line-2479">   */</span>
<span class="source-line-no">2480</span><span id="line-2480">  public List&lt;byte[]&gt; getMetaTableRows() throws IOException {</span>
<span class="source-line-no">2481</span><span id="line-2481">    // TODO: Redo using MetaTableAccessor class</span>
<span class="source-line-no">2482</span><span id="line-2482">    Table t = getConnection().getTable(TableName.META_TABLE_NAME);</span>
<span class="source-line-no">2483</span><span id="line-2483">    List&lt;byte[]&gt; rows = new ArrayList&lt;&gt;();</span>
<span class="source-line-no">2484</span><span id="line-2484">    ResultScanner s = t.getScanner(new Scan());</span>
<span class="source-line-no">2485</span><span id="line-2485">    for (Result result : s) {</span>
<span class="source-line-no">2486</span><span id="line-2486">      LOG.info("getMetaTableRows: row -&gt; " + Bytes.toStringBinary(result.getRow()));</span>
<span class="source-line-no">2487</span><span id="line-2487">      rows.add(result.getRow());</span>
<span class="source-line-no">2488</span><span id="line-2488">    }</span>
<span class="source-line-no">2489</span><span id="line-2489">    s.close();</span>
<span class="source-line-no">2490</span><span id="line-2490">    t.close();</span>
<span class="source-line-no">2491</span><span id="line-2491">    return rows;</span>
<span class="source-line-no">2492</span><span id="line-2492">  }</span>
<span class="source-line-no">2493</span><span id="line-2493"></span>
<span class="source-line-no">2494</span><span id="line-2494">  /**</span>
<span class="source-line-no">2495</span><span id="line-2495">   * Returns all rows from the hbase:meta table for a given user table</span>
<span class="source-line-no">2496</span><span id="line-2496">   * @throws IOException When reading the rows fails.</span>
<span class="source-line-no">2497</span><span id="line-2497">   */</span>
<span class="source-line-no">2498</span><span id="line-2498">  public List&lt;byte[]&gt; getMetaTableRows(TableName tableName) throws IOException {</span>
<span class="source-line-no">2499</span><span id="line-2499">    // TODO: Redo using MetaTableAccessor.</span>
<span class="source-line-no">2500</span><span id="line-2500">    Table t = getConnection().getTable(TableName.META_TABLE_NAME);</span>
<span class="source-line-no">2501</span><span id="line-2501">    List&lt;byte[]&gt; rows = new ArrayList&lt;&gt;();</span>
<span class="source-line-no">2502</span><span id="line-2502">    ResultScanner s = t.getScanner(new Scan());</span>
<span class="source-line-no">2503</span><span id="line-2503">    for (Result result : s) {</span>
<span class="source-line-no">2504</span><span id="line-2504">      RegionInfo info = CatalogFamilyFormat.getRegionInfo(result);</span>
<span class="source-line-no">2505</span><span id="line-2505">      if (info == null) {</span>
<span class="source-line-no">2506</span><span id="line-2506">        LOG.error("No region info for row " + Bytes.toString(result.getRow()));</span>
<span class="source-line-no">2507</span><span id="line-2507">        // TODO figure out what to do for this new hosed case.</span>
<span class="source-line-no">2508</span><span id="line-2508">        continue;</span>
<span class="source-line-no">2509</span><span id="line-2509">      }</span>
<span class="source-line-no">2510</span><span id="line-2510"></span>
<span class="source-line-no">2511</span><span id="line-2511">      if (info.getTable().equals(tableName)) {</span>
<span class="source-line-no">2512</span><span id="line-2512">        LOG.info("getMetaTableRows: row -&gt; " + Bytes.toStringBinary(result.getRow()) + info);</span>
<span class="source-line-no">2513</span><span id="line-2513">        rows.add(result.getRow());</span>
<span class="source-line-no">2514</span><span id="line-2514">      }</span>
<span class="source-line-no">2515</span><span id="line-2515">    }</span>
<span class="source-line-no">2516</span><span id="line-2516">    s.close();</span>
<span class="source-line-no">2517</span><span id="line-2517">    t.close();</span>
<span class="source-line-no">2518</span><span id="line-2518">    return rows;</span>
<span class="source-line-no">2519</span><span id="line-2519">  }</span>
<span class="source-line-no">2520</span><span id="line-2520"></span>
<span class="source-line-no">2521</span><span id="line-2521">  /**</span>
<span class="source-line-no">2522</span><span id="line-2522">   * Returns all regions of the specified table</span>
<span class="source-line-no">2523</span><span id="line-2523">   * @param tableName the table name</span>
<span class="source-line-no">2524</span><span id="line-2524">   * @return all regions of the specified table</span>
<span class="source-line-no">2525</span><span id="line-2525">   * @throws IOException when getting the regions fails.</span>
<span class="source-line-no">2526</span><span id="line-2526">   */</span>
<span class="source-line-no">2527</span><span id="line-2527">  private List&lt;RegionInfo&gt; getRegions(TableName tableName) throws IOException {</span>
<span class="source-line-no">2528</span><span id="line-2528">    try (Admin admin = getConnection().getAdmin()) {</span>
<span class="source-line-no">2529</span><span id="line-2529">      return admin.getRegions(tableName);</span>
<span class="source-line-no">2530</span><span id="line-2530">    }</span>
<span class="source-line-no">2531</span><span id="line-2531">  }</span>
<span class="source-line-no">2532</span><span id="line-2532"></span>
<span class="source-line-no">2533</span><span id="line-2533">  /**</span>
<span class="source-line-no">2534</span><span id="line-2534">   * Find any other region server which is different from the one identified by parameter</span>
<span class="source-line-no">2535</span><span id="line-2535">   * @return another region server</span>
<span class="source-line-no">2536</span><span id="line-2536">   */</span>
<span class="source-line-no">2537</span><span id="line-2537">  public HRegionServer getOtherRegionServer(HRegionServer rs) {</span>
<span class="source-line-no">2538</span><span id="line-2538">    for (JVMClusterUtil.RegionServerThread rst : getMiniHBaseCluster().getRegionServerThreads()) {</span>
<span class="source-line-no">2539</span><span id="line-2539">      if (!(rst.getRegionServer() == rs)) {</span>
<span class="source-line-no">2540</span><span id="line-2540">        return rst.getRegionServer();</span>
<span class="source-line-no">2541</span><span id="line-2541">      }</span>
<span class="source-line-no">2542</span><span id="line-2542">    }</span>
<span class="source-line-no">2543</span><span id="line-2543">    return null;</span>
<span class="source-line-no">2544</span><span id="line-2544">  }</span>
<span class="source-line-no">2545</span><span id="line-2545"></span>
<span class="source-line-no">2546</span><span id="line-2546">  /**</span>
<span class="source-line-no">2547</span><span id="line-2547">   * Tool to get the reference to the region server object that holds the region of the specified</span>
<span class="source-line-no">2548</span><span id="line-2548">   * user table.</span>
<span class="source-line-no">2549</span><span id="line-2549">   * @param tableName user table to lookup in hbase:meta</span>
<span class="source-line-no">2550</span><span id="line-2550">   * @return region server that holds it, null if the row doesn't exist</span>
<span class="source-line-no">2551</span><span id="line-2551">   */</span>
<span class="source-line-no">2552</span><span id="line-2552">  public HRegionServer getRSForFirstRegionInTable(TableName tableName)</span>
<span class="source-line-no">2553</span><span id="line-2553">    throws IOException, InterruptedException {</span>
<span class="source-line-no">2554</span><span id="line-2554">    List&lt;RegionInfo&gt; regions = getRegions(tableName);</span>
<span class="source-line-no">2555</span><span id="line-2555">    if (regions == null || regions.isEmpty()) {</span>
<span class="source-line-no">2556</span><span id="line-2556">      return null;</span>
<span class="source-line-no">2557</span><span id="line-2557">    }</span>
<span class="source-line-no">2558</span><span id="line-2558">    LOG.debug("Found " + regions.size() + " regions for table " + tableName);</span>
<span class="source-line-no">2559</span><span id="line-2559"></span>
<span class="source-line-no">2560</span><span id="line-2560">    byte[] firstRegionName =</span>
<span class="source-line-no">2561</span><span id="line-2561">      regions.stream().filter(r -&gt; !r.isOffline()).map(RegionInfo::getRegionName).findFirst()</span>
<span class="source-line-no">2562</span><span id="line-2562">        .orElseThrow(() -&gt; new IOException("online regions not found in table " + tableName));</span>
<span class="source-line-no">2563</span><span id="line-2563"></span>
<span class="source-line-no">2564</span><span id="line-2564">    LOG.debug("firstRegionName=" + Bytes.toString(firstRegionName));</span>
<span class="source-line-no">2565</span><span id="line-2565">    long pause = getConfiguration().getLong(HConstants.HBASE_CLIENT_PAUSE,</span>
<span class="source-line-no">2566</span><span id="line-2566">      HConstants.DEFAULT_HBASE_CLIENT_PAUSE);</span>
<span class="source-line-no">2567</span><span id="line-2567">    int numRetries = getConfiguration().getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,</span>
<span class="source-line-no">2568</span><span id="line-2568">      HConstants.DEFAULT_HBASE_CLIENT_RETRIES_NUMBER);</span>
<span class="source-line-no">2569</span><span id="line-2569">    RetryCounter retrier = new RetryCounter(numRetries + 1, (int) pause, TimeUnit.MICROSECONDS);</span>
<span class="source-line-no">2570</span><span id="line-2570">    while (retrier.shouldRetry()) {</span>
<span class="source-line-no">2571</span><span id="line-2571">      int index = getMiniHBaseCluster().getServerWith(firstRegionName);</span>
<span class="source-line-no">2572</span><span id="line-2572">      if (index != -1) {</span>
<span class="source-line-no">2573</span><span id="line-2573">        return getMiniHBaseCluster().getRegionServerThreads().get(index).getRegionServer();</span>
<span class="source-line-no">2574</span><span id="line-2574">      }</span>
<span class="source-line-no">2575</span><span id="line-2575">      // Came back -1. Region may not be online yet. Sleep a while.</span>
<span class="source-line-no">2576</span><span id="line-2576">      retrier.sleepUntilNextRetry();</span>
<span class="source-line-no">2577</span><span id="line-2577">    }</span>
<span class="source-line-no">2578</span><span id="line-2578">    return null;</span>
<span class="source-line-no">2579</span><span id="line-2579">  }</span>
<span class="source-line-no">2580</span><span id="line-2580"></span>
<span class="source-line-no">2581</span><span id="line-2581">  /**</span>
<span class="source-line-no">2582</span><span id="line-2582">   * Starts a &lt;code&gt;MiniMRCluster&lt;/code&gt; with a default number of &lt;code&gt;TaskTracker&lt;/code&gt;'s.</span>
<span class="source-line-no">2583</span><span id="line-2583">   * @throws IOException When starting the cluster fails.</span>
<span class="source-line-no">2584</span><span id="line-2584">   */</span>
<span class="source-line-no">2585</span><span id="line-2585">  public MiniMRCluster startMiniMapReduceCluster() throws IOException {</span>
<span class="source-line-no">2586</span><span id="line-2586">    // Set a very high max-disk-utilization percentage to avoid the NodeManagers from failing.</span>
<span class="source-line-no">2587</span><span id="line-2587">    conf.setIfUnset("yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage",</span>
<span class="source-line-no">2588</span><span id="line-2588">      "99.0");</span>
<span class="source-line-no">2589</span><span id="line-2589">    startMiniMapReduceCluster(2);</span>
<span class="source-line-no">2590</span><span id="line-2590">    return mrCluster;</span>
<span class="source-line-no">2591</span><span id="line-2591">  }</span>
<span class="source-line-no">2592</span><span id="line-2592"></span>
<span class="source-line-no">2593</span><span id="line-2593">  /**</span>
<span class="source-line-no">2594</span><span id="line-2594">   * Tasktracker has a bug where changing the hadoop.log.dir system property will not change its</span>
<span class="source-line-no">2595</span><span id="line-2595">   * internal static LOG_DIR variable.</span>
<span class="source-line-no">2596</span><span id="line-2596">   */</span>
<span class="source-line-no">2597</span><span id="line-2597">  private void forceChangeTaskLogDir() {</span>
<span class="source-line-no">2598</span><span id="line-2598">    Field logDirField;</span>
<span class="source-line-no">2599</span><span id="line-2599">    try {</span>
<span class="source-line-no">2600</span><span id="line-2600">      logDirField = TaskLog.class.getDeclaredField("LOG_DIR");</span>
<span class="source-line-no">2601</span><span id="line-2601">      logDirField.setAccessible(true);</span>
<span class="source-line-no">2602</span><span id="line-2602"></span>
<span class="source-line-no">2603</span><span id="line-2603">      Field modifiersField = ReflectionUtils.getModifiersField();</span>
<span class="source-line-no">2604</span><span id="line-2604">      modifiersField.setAccessible(true);</span>
<span class="source-line-no">2605</span><span id="line-2605">      modifiersField.setInt(logDirField, logDirField.getModifiers() &amp; ~Modifier.FINAL);</span>
<span class="source-line-no">2606</span><span id="line-2606"></span>
<span class="source-line-no">2607</span><span id="line-2607">      logDirField.set(null, new File(hadoopLogDir, "userlogs"));</span>
<span class="source-line-no">2608</span><span id="line-2608">    } catch (SecurityException e) {</span>
<span class="source-line-no">2609</span><span id="line-2609">      throw new RuntimeException(e);</span>
<span class="source-line-no">2610</span><span id="line-2610">    } catch (NoSuchFieldException e) {</span>
<span class="source-line-no">2611</span><span id="line-2611">      throw new RuntimeException(e);</span>
<span class="source-line-no">2612</span><span id="line-2612">    } catch (IllegalArgumentException e) {</span>
<span class="source-line-no">2613</span><span id="line-2613">      throw new RuntimeException(e);</span>
<span class="source-line-no">2614</span><span id="line-2614">    } catch (IllegalAccessException e) {</span>
<span class="source-line-no">2615</span><span id="line-2615">      throw new RuntimeException(e);</span>
<span class="source-line-no">2616</span><span id="line-2616">    }</span>
<span class="source-line-no">2617</span><span id="line-2617">  }</span>
<span class="source-line-no">2618</span><span id="line-2618"></span>
<span class="source-line-no">2619</span><span id="line-2619">  /**</span>
<span class="source-line-no">2620</span><span id="line-2620">   * Starts a &lt;code&gt;MiniMRCluster&lt;/code&gt;. Call {@link #setFileSystemURI(String)} to use a different</span>
<span class="source-line-no">2621</span><span id="line-2621">   * filesystem.</span>
<span class="source-line-no">2622</span><span id="line-2622">   * @param servers The number of &lt;code&gt;TaskTracker&lt;/code&gt;'s to start.</span>
<span class="source-line-no">2623</span><span id="line-2623">   * @throws IOException When starting the cluster fails.</span>
<span class="source-line-no">2624</span><span id="line-2624">   */</span>
<span class="source-line-no">2625</span><span id="line-2625">  private void startMiniMapReduceCluster(final int servers) throws IOException {</span>
<span class="source-line-no">2626</span><span id="line-2626">    if (mrCluster != null) {</span>
<span class="source-line-no">2627</span><span id="line-2627">      throw new IllegalStateException("MiniMRCluster is already running");</span>
<span class="source-line-no">2628</span><span id="line-2628">    }</span>
<span class="source-line-no">2629</span><span id="line-2629">    LOG.info("Starting mini mapreduce cluster...");</span>
<span class="source-line-no">2630</span><span id="line-2630">    setupClusterTestDir();</span>
<span class="source-line-no">2631</span><span id="line-2631">    createDirsAndSetProperties();</span>
<span class="source-line-no">2632</span><span id="line-2632"></span>
<span class="source-line-no">2633</span><span id="line-2633">    forceChangeTaskLogDir();</span>
<span class="source-line-no">2634</span><span id="line-2634"></span>
<span class="source-line-no">2635</span><span id="line-2635">    //// hadoop2 specific settings</span>
<span class="source-line-no">2636</span><span id="line-2636">    // Tests were failing because this process used 6GB of virtual memory and was getting killed.</span>
<span class="source-line-no">2637</span><span id="line-2637">    // we up the VM usable so that processes don't get killed.</span>
<span class="source-line-no">2638</span><span id="line-2638">    conf.setFloat("yarn.nodemanager.vmem-pmem-ratio", 8.0f);</span>
<span class="source-line-no">2639</span><span id="line-2639"></span>
<span class="source-line-no">2640</span><span id="line-2640">    // Tests were failing due to MAPREDUCE-4880 / MAPREDUCE-4607 against hadoop 2.0.2-alpha and</span>
<span class="source-line-no">2641</span><span id="line-2641">    // this avoids the problem by disabling speculative task execution in tests.</span>
<span class="source-line-no">2642</span><span id="line-2642">    conf.setBoolean("mapreduce.map.speculative", false);</span>
<span class="source-line-no">2643</span><span id="line-2643">    conf.setBoolean("mapreduce.reduce.speculative", false);</span>
<span class="source-line-no">2644</span><span id="line-2644">    ////</span>
<span class="source-line-no">2645</span><span id="line-2645"></span>
<span class="source-line-no">2646</span><span id="line-2646">    // Allow the user to override FS URI for this map-reduce cluster to use.</span>
<span class="source-line-no">2647</span><span id="line-2647">    mrCluster =</span>
<span class="source-line-no">2648</span><span id="line-2648">      new MiniMRCluster(servers, FS_URI != null ? FS_URI : FileSystem.get(conf).getUri().toString(),</span>
<span class="source-line-no">2649</span><span id="line-2649">        1, null, null, new JobConf(this.conf));</span>
<span class="source-line-no">2650</span><span id="line-2650">    JobConf jobConf = MapreduceTestingShim.getJobConf(mrCluster);</span>
<span class="source-line-no">2651</span><span id="line-2651">    if (jobConf == null) {</span>
<span class="source-line-no">2652</span><span id="line-2652">      jobConf = mrCluster.createJobConf();</span>
<span class="source-line-no">2653</span><span id="line-2653">    }</span>
<span class="source-line-no">2654</span><span id="line-2654">    // Hadoop MiniMR overwrites this while it should not</span>
<span class="source-line-no">2655</span><span id="line-2655">    jobConf.set("mapreduce.cluster.local.dir", conf.get("mapreduce.cluster.local.dir"));</span>
<span class="source-line-no">2656</span><span id="line-2656">    LOG.info("Mini mapreduce cluster started");</span>
<span class="source-line-no">2657</span><span id="line-2657"></span>
<span class="source-line-no">2658</span><span id="line-2658">    // In hadoop2, YARN/MR2 starts a mini cluster with its own conf instance and updates settings.</span>
<span class="source-line-no">2659</span><span id="line-2659">    // Our HBase MR jobs need several of these settings in order to properly run. So we copy the</span>
<span class="source-line-no">2660</span><span id="line-2660">    // necessary config properties here. YARN-129 required adding a few properties.</span>
<span class="source-line-no">2661</span><span id="line-2661">    conf.set("mapreduce.jobtracker.address", jobConf.get("mapreduce.jobtracker.address"));</span>
<span class="source-line-no">2662</span><span id="line-2662">    // this for mrv2 support; mr1 ignores this</span>
<span class="source-line-no">2663</span><span id="line-2663">    conf.set("mapreduce.framework.name", "yarn");</span>
<span class="source-line-no">2664</span><span id="line-2664">    conf.setBoolean("yarn.is.minicluster", true);</span>
<span class="source-line-no">2665</span><span id="line-2665">    String rmAddress = jobConf.get("yarn.resourcemanager.address");</span>
<span class="source-line-no">2666</span><span id="line-2666">    if (rmAddress != null) {</span>
<span class="source-line-no">2667</span><span id="line-2667">      conf.set("yarn.resourcemanager.address", rmAddress);</span>
<span class="source-line-no">2668</span><span id="line-2668">    }</span>
<span class="source-line-no">2669</span><span id="line-2669">    String historyAddress = jobConf.get("mapreduce.jobhistory.address");</span>
<span class="source-line-no">2670</span><span id="line-2670">    if (historyAddress != null) {</span>
<span class="source-line-no">2671</span><span id="line-2671">      conf.set("mapreduce.jobhistory.address", historyAddress);</span>
<span class="source-line-no">2672</span><span id="line-2672">    }</span>
<span class="source-line-no">2673</span><span id="line-2673">    String schedulerAddress = jobConf.get("yarn.resourcemanager.scheduler.address");</span>
<span class="source-line-no">2674</span><span id="line-2674">    if (schedulerAddress != null) {</span>
<span class="source-line-no">2675</span><span id="line-2675">      conf.set("yarn.resourcemanager.scheduler.address", schedulerAddress);</span>
<span class="source-line-no">2676</span><span id="line-2676">    }</span>
<span class="source-line-no">2677</span><span id="line-2677">    String mrJobHistoryWebappAddress = jobConf.get("mapreduce.jobhistory.webapp.address");</span>
<span class="source-line-no">2678</span><span id="line-2678">    if (mrJobHistoryWebappAddress != null) {</span>
<span class="source-line-no">2679</span><span id="line-2679">      conf.set("mapreduce.jobhistory.webapp.address", mrJobHistoryWebappAddress);</span>
<span class="source-line-no">2680</span><span id="line-2680">    }</span>
<span class="source-line-no">2681</span><span id="line-2681">    String yarnRMWebappAddress = jobConf.get("yarn.resourcemanager.webapp.address");</span>
<span class="source-line-no">2682</span><span id="line-2682">    if (yarnRMWebappAddress != null) {</span>
<span class="source-line-no">2683</span><span id="line-2683">      conf.set("yarn.resourcemanager.webapp.address", yarnRMWebappAddress);</span>
<span class="source-line-no">2684</span><span id="line-2684">    }</span>
<span class="source-line-no">2685</span><span id="line-2685">  }</span>
<span class="source-line-no">2686</span><span id="line-2686"></span>
<span class="source-line-no">2687</span><span id="line-2687">  /**</span>
<span class="source-line-no">2688</span><span id="line-2688">   * Stops the previously started &lt;code&gt;MiniMRCluster&lt;/code&gt;.</span>
<span class="source-line-no">2689</span><span id="line-2689">   */</span>
<span class="source-line-no">2690</span><span id="line-2690">  public void shutdownMiniMapReduceCluster() {</span>
<span class="source-line-no">2691</span><span id="line-2691">    if (mrCluster != null) {</span>
<span class="source-line-no">2692</span><span id="line-2692">      LOG.info("Stopping mini mapreduce cluster...");</span>
<span class="source-line-no">2693</span><span id="line-2693">      mrCluster.shutdown();</span>
<span class="source-line-no">2694</span><span id="line-2694">      mrCluster = null;</span>
<span class="source-line-no">2695</span><span id="line-2695">      LOG.info("Mini mapreduce cluster stopped");</span>
<span class="source-line-no">2696</span><span id="line-2696">    }</span>
<span class="source-line-no">2697</span><span id="line-2697">    // Restore configuration to point to local jobtracker</span>
<span class="source-line-no">2698</span><span id="line-2698">    conf.set("mapreduce.jobtracker.address", "local");</span>
<span class="source-line-no">2699</span><span id="line-2699">  }</span>
<span class="source-line-no">2700</span><span id="line-2700"></span>
<span class="source-line-no">2701</span><span id="line-2701">  /**</span>
<span class="source-line-no">2702</span><span id="line-2702">   * Create a stubbed out RegionServerService, mainly for getting FS.</span>
<span class="source-line-no">2703</span><span id="line-2703">   */</span>
<span class="source-line-no">2704</span><span id="line-2704">  public RegionServerServices createMockRegionServerService() throws IOException {</span>
<span class="source-line-no">2705</span><span id="line-2705">    return createMockRegionServerService((ServerName) null);</span>
<span class="source-line-no">2706</span><span id="line-2706">  }</span>
<span class="source-line-no">2707</span><span id="line-2707"></span>
<span class="source-line-no">2708</span><span id="line-2708">  /**</span>
<span class="source-line-no">2709</span><span id="line-2709">   * Create a stubbed out RegionServerService, mainly for getting FS. This version is used by</span>
<span class="source-line-no">2710</span><span id="line-2710">   * TestTokenAuthentication</span>
<span class="source-line-no">2711</span><span id="line-2711">   */</span>
<span class="source-line-no">2712</span><span id="line-2712">  public RegionServerServices createMockRegionServerService(RpcServerInterface rpc)</span>
<span class="source-line-no">2713</span><span id="line-2713">    throws IOException {</span>
<span class="source-line-no">2714</span><span id="line-2714">    final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher());</span>
<span class="source-line-no">2715</span><span id="line-2715">    rss.setFileSystem(getTestFileSystem());</span>
<span class="source-line-no">2716</span><span id="line-2716">    rss.setRpcServer(rpc);</span>
<span class="source-line-no">2717</span><span id="line-2717">    return rss;</span>
<span class="source-line-no">2718</span><span id="line-2718">  }</span>
<span class="source-line-no">2719</span><span id="line-2719"></span>
<span class="source-line-no">2720</span><span id="line-2720">  /**</span>
<span class="source-line-no">2721</span><span id="line-2721">   * Create a stubbed out RegionServerService, mainly for getting FS. This version is used by</span>
<span class="source-line-no">2722</span><span id="line-2722">   * TestOpenRegionHandler</span>
<span class="source-line-no">2723</span><span id="line-2723">   */</span>
<span class="source-line-no">2724</span><span id="line-2724">  public RegionServerServices createMockRegionServerService(ServerName name) throws IOException {</span>
<span class="source-line-no">2725</span><span id="line-2725">    final MockRegionServerServices rss = new MockRegionServerServices(getZooKeeperWatcher(), name);</span>
<span class="source-line-no">2726</span><span id="line-2726">    rss.setFileSystem(getTestFileSystem());</span>
<span class="source-line-no">2727</span><span id="line-2727">    return rss;</span>
<span class="source-line-no">2728</span><span id="line-2728">  }</span>
<span class="source-line-no">2729</span><span id="line-2729"></span>
<span class="source-line-no">2730</span><span id="line-2730">  /**</span>
<span class="source-line-no">2731</span><span id="line-2731">   * Switches the logger for the given class to DEBUG level.</span>
<span class="source-line-no">2732</span><span id="line-2732">   * @param clazz The class for which to switch to debug logging.</span>
<span class="source-line-no">2733</span><span id="line-2733">   * @deprecated In 2.3.0, will be removed in 4.0.0. Only support changing log level on log4j now as</span>
<span class="source-line-no">2734</span><span id="line-2734">   *             HBase only uses log4j. You should do this by your own as it you know which log</span>
<span class="source-line-no">2735</span><span id="line-2735">   *             framework you are using then set the log level to debug is very easy.</span>
<span class="source-line-no">2736</span><span id="line-2736">   */</span>
<span class="source-line-no">2737</span><span id="line-2737">  @Deprecated</span>
<span class="source-line-no">2738</span><span id="line-2738">  public void enableDebug(Class&lt;?&gt; clazz) {</span>
<span class="source-line-no">2739</span><span id="line-2739">    Log4jUtils.enableDebug(clazz);</span>
<span class="source-line-no">2740</span><span id="line-2740">  }</span>
<span class="source-line-no">2741</span><span id="line-2741"></span>
<span class="source-line-no">2742</span><span id="line-2742">  /**</span>
<span class="source-line-no">2743</span><span id="line-2743">   * Expire the Master's session</span>
<span class="source-line-no">2744</span><span id="line-2744">   */</span>
<span class="source-line-no">2745</span><span id="line-2745">  public void expireMasterSession() throws Exception {</span>
<span class="source-line-no">2746</span><span id="line-2746">    HMaster master = getMiniHBaseCluster().getMaster();</span>
<span class="source-line-no">2747</span><span id="line-2747">    expireSession(master.getZooKeeper(), false);</span>
<span class="source-line-no">2748</span><span id="line-2748">  }</span>
<span class="source-line-no">2749</span><span id="line-2749"></span>
<span class="source-line-no">2750</span><span id="line-2750">  /**</span>
<span class="source-line-no">2751</span><span id="line-2751">   * Expire a region server's session</span>
<span class="source-line-no">2752</span><span id="line-2752">   * @param index which RS</span>
<span class="source-line-no">2753</span><span id="line-2753">   */</span>
<span class="source-line-no">2754</span><span id="line-2754">  public void expireRegionServerSession(int index) throws Exception {</span>
<span class="source-line-no">2755</span><span id="line-2755">    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);</span>
<span class="source-line-no">2756</span><span id="line-2756">    expireSession(rs.getZooKeeper(), false);</span>
<span class="source-line-no">2757</span><span id="line-2757">    decrementMinRegionServerCount();</span>
<span class="source-line-no">2758</span><span id="line-2758">  }</span>
<span class="source-line-no">2759</span><span id="line-2759"></span>
<span class="source-line-no">2760</span><span id="line-2760">  private void decrementMinRegionServerCount() {</span>
<span class="source-line-no">2761</span><span id="line-2761">    // decrement the count for this.conf, for newly spwaned master</span>
<span class="source-line-no">2762</span><span id="line-2762">    // this.hbaseCluster shares this configuration too</span>
<span class="source-line-no">2763</span><span id="line-2763">    decrementMinRegionServerCount(getConfiguration());</span>
<span class="source-line-no">2764</span><span id="line-2764"></span>
<span class="source-line-no">2765</span><span id="line-2765">    // each master thread keeps a copy of configuration</span>
<span class="source-line-no">2766</span><span id="line-2766">    for (MasterThread master : getHBaseCluster().getMasterThreads()) {</span>
<span class="source-line-no">2767</span><span id="line-2767">      decrementMinRegionServerCount(master.getMaster().getConfiguration());</span>
<span class="source-line-no">2768</span><span id="line-2768">    }</span>
<span class="source-line-no">2769</span><span id="line-2769">  }</span>
<span class="source-line-no">2770</span><span id="line-2770"></span>
<span class="source-line-no">2771</span><span id="line-2771">  private void decrementMinRegionServerCount(Configuration conf) {</span>
<span class="source-line-no">2772</span><span id="line-2772">    int currentCount = conf.getInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, -1);</span>
<span class="source-line-no">2773</span><span id="line-2773">    if (currentCount != -1) {</span>
<span class="source-line-no">2774</span><span id="line-2774">      conf.setInt(ServerManager.WAIT_ON_REGIONSERVERS_MINTOSTART, Math.max(currentCount - 1, 1));</span>
<span class="source-line-no">2775</span><span id="line-2775">    }</span>
<span class="source-line-no">2776</span><span id="line-2776">  }</span>
<span class="source-line-no">2777</span><span id="line-2777"></span>
<span class="source-line-no">2778</span><span id="line-2778">  public void expireSession(ZKWatcher nodeZK) throws Exception {</span>
<span class="source-line-no">2779</span><span id="line-2779">    expireSession(nodeZK, false);</span>
<span class="source-line-no">2780</span><span id="line-2780">  }</span>
<span class="source-line-no">2781</span><span id="line-2781"></span>
<span class="source-line-no">2782</span><span id="line-2782">  /**</span>
<span class="source-line-no">2783</span><span id="line-2783">   * Expire a ZooKeeper session as recommended in ZooKeeper documentation</span>
<span class="source-line-no">2784</span><span id="line-2784">   * http://hbase.apache.org/book.html#trouble.zookeeper There are issues when doing this: [1]</span>
<span class="source-line-no">2785</span><span id="line-2785">   * http://www.mail-archive.com/dev@zookeeper.apache.org/msg01942.html [2]</span>
<span class="source-line-no">2786</span><span id="line-2786">   * https://issues.apache.org/jira/browse/ZOOKEEPER-1105</span>
<span class="source-line-no">2787</span><span id="line-2787">   * @param nodeZK      - the ZK watcher to expire</span>
<span class="source-line-no">2788</span><span id="line-2788">   * @param checkStatus - true to check if we can create a Table with the current configuration.</span>
<span class="source-line-no">2789</span><span id="line-2789">   */</span>
<span class="source-line-no">2790</span><span id="line-2790">  public void expireSession(ZKWatcher nodeZK, boolean checkStatus) throws Exception {</span>
<span class="source-line-no">2791</span><span id="line-2791">    Configuration c = new Configuration(this.conf);</span>
<span class="source-line-no">2792</span><span id="line-2792">    String quorumServers = ZKConfig.getZKQuorumServersString(c);</span>
<span class="source-line-no">2793</span><span id="line-2793">    ZooKeeper zk = nodeZK.getRecoverableZooKeeper().getZooKeeper();</span>
<span class="source-line-no">2794</span><span id="line-2794">    byte[] password = zk.getSessionPasswd();</span>
<span class="source-line-no">2795</span><span id="line-2795">    long sessionID = zk.getSessionId();</span>
<span class="source-line-no">2796</span><span id="line-2796"></span>
<span class="source-line-no">2797</span><span id="line-2797">    // Expiry seems to be asynchronous (see comment from P. Hunt in [1]),</span>
<span class="source-line-no">2798</span><span id="line-2798">    // so we create a first watcher to be sure that the</span>
<span class="source-line-no">2799</span><span id="line-2799">    // event was sent. We expect that if our watcher receives the event</span>
<span class="source-line-no">2800</span><span id="line-2800">    // other watchers on the same machine will get is as well.</span>
<span class="source-line-no">2801</span><span id="line-2801">    // When we ask to close the connection, ZK does not close it before</span>
<span class="source-line-no">2802</span><span id="line-2802">    // we receive all the events, so don't have to capture the event, just</span>
<span class="source-line-no">2803</span><span id="line-2803">    // closing the connection should be enough.</span>
<span class="source-line-no">2804</span><span id="line-2804">    ZooKeeper monitor = new ZooKeeper(quorumServers, 1000, new org.apache.zookeeper.Watcher() {</span>
<span class="source-line-no">2805</span><span id="line-2805">      @Override</span>
<span class="source-line-no">2806</span><span id="line-2806">      public void process(WatchedEvent watchedEvent) {</span>
<span class="source-line-no">2807</span><span id="line-2807">        LOG.info("Monitor ZKW received event=" + watchedEvent);</span>
<span class="source-line-no">2808</span><span id="line-2808">      }</span>
<span class="source-line-no">2809</span><span id="line-2809">    }, sessionID, password);</span>
<span class="source-line-no">2810</span><span id="line-2810"></span>
<span class="source-line-no">2811</span><span id="line-2811">    // Making it expire</span>
<span class="source-line-no">2812</span><span id="line-2812">    ZooKeeper newZK =</span>
<span class="source-line-no">2813</span><span id="line-2813">      new ZooKeeper(quorumServers, 1000, EmptyWatcher.instance, sessionID, password);</span>
<span class="source-line-no">2814</span><span id="line-2814"></span>
<span class="source-line-no">2815</span><span id="line-2815">    // ensure that we have connection to the server before closing down, otherwise</span>
<span class="source-line-no">2816</span><span id="line-2816">    // the close session event will be eaten out before we start CONNECTING state</span>
<span class="source-line-no">2817</span><span id="line-2817">    long start = EnvironmentEdgeManager.currentTime();</span>
<span class="source-line-no">2818</span><span id="line-2818">    while (</span>
<span class="source-line-no">2819</span><span id="line-2819">      newZK.getState() != States.CONNECTED &amp;&amp; EnvironmentEdgeManager.currentTime() - start &lt; 1000</span>
<span class="source-line-no">2820</span><span id="line-2820">    ) {</span>
<span class="source-line-no">2821</span><span id="line-2821">      Thread.sleep(1);</span>
<span class="source-line-no">2822</span><span id="line-2822">    }</span>
<span class="source-line-no">2823</span><span id="line-2823">    newZK.close();</span>
<span class="source-line-no">2824</span><span id="line-2824">    LOG.info("ZK Closed Session 0x" + Long.toHexString(sessionID));</span>
<span class="source-line-no">2825</span><span id="line-2825"></span>
<span class="source-line-no">2826</span><span id="line-2826">    // Now closing &amp; waiting to be sure that the clients get it.</span>
<span class="source-line-no">2827</span><span id="line-2827">    monitor.close();</span>
<span class="source-line-no">2828</span><span id="line-2828"></span>
<span class="source-line-no">2829</span><span id="line-2829">    if (checkStatus) {</span>
<span class="source-line-no">2830</span><span id="line-2830">      getConnection().getTable(TableName.META_TABLE_NAME).close();</span>
<span class="source-line-no">2831</span><span id="line-2831">    }</span>
<span class="source-line-no">2832</span><span id="line-2832">  }</span>
<span class="source-line-no">2833</span><span id="line-2833"></span>
<span class="source-line-no">2834</span><span id="line-2834">  /**</span>
<span class="source-line-no">2835</span><span id="line-2835">   * Get the Mini HBase cluster.</span>
<span class="source-line-no">2836</span><span id="line-2836">   * @return hbase cluster</span>
<span class="source-line-no">2837</span><span id="line-2837">   * @see #getHBaseClusterInterface()</span>
<span class="source-line-no">2838</span><span id="line-2838">   */</span>
<span class="source-line-no">2839</span><span id="line-2839">  public MiniHBaseCluster getHBaseCluster() {</span>
<span class="source-line-no">2840</span><span id="line-2840">    return getMiniHBaseCluster();</span>
<span class="source-line-no">2841</span><span id="line-2841">  }</span>
<span class="source-line-no">2842</span><span id="line-2842"></span>
<span class="source-line-no">2843</span><span id="line-2843">  /**</span>
<span class="source-line-no">2844</span><span id="line-2844">   * Returns the HBaseCluster instance.</span>
<span class="source-line-no">2845</span><span id="line-2845">   * &lt;p&gt;</span>
<span class="source-line-no">2846</span><span id="line-2846">   * Returned object can be any of the subclasses of HBaseCluster, and the tests referring this</span>
<span class="source-line-no">2847</span><span id="line-2847">   * should not assume that the cluster is a mini cluster or a distributed one. If the test only</span>
<span class="source-line-no">2848</span><span id="line-2848">   * works on a mini cluster, then specific method {@link #getMiniHBaseCluster()} can be used</span>
<span class="source-line-no">2849</span><span id="line-2849">   * instead w/o the need to type-cast.</span>
<span class="source-line-no">2850</span><span id="line-2850">   */</span>
<span class="source-line-no">2851</span><span id="line-2851">  public HBaseCluster getHBaseClusterInterface() {</span>
<span class="source-line-no">2852</span><span id="line-2852">    // implementation note: we should rename this method as #getHBaseCluster(),</span>
<span class="source-line-no">2853</span><span id="line-2853">    // but this would require refactoring 90+ calls.</span>
<span class="source-line-no">2854</span><span id="line-2854">    return hbaseCluster;</span>
<span class="source-line-no">2855</span><span id="line-2855">  }</span>
<span class="source-line-no">2856</span><span id="line-2856"></span>
<span class="source-line-no">2857</span><span id="line-2857">  /**</span>
<span class="source-line-no">2858</span><span id="line-2858">   * Resets the connections so that the next time getConnection() is called, a new connection is</span>
<span class="source-line-no">2859</span><span id="line-2859">   * created. This is needed in cases where the entire cluster / all the masters are shutdown and</span>
<span class="source-line-no">2860</span><span id="line-2860">   * the connection is not valid anymore. TODO: There should be a more coherent way of doing this.</span>
<span class="source-line-no">2861</span><span id="line-2861">   * Unfortunately the way tests are written, not all start() stop() calls go through this class.</span>
<span class="source-line-no">2862</span><span id="line-2862">   * Most tests directly operate on the underlying mini/local hbase cluster. That makes it difficult</span>
<span class="source-line-no">2863</span><span id="line-2863">   * for this wrapper class to maintain the connection state automatically. Cleaning this is a much</span>
<span class="source-line-no">2864</span><span id="line-2864">   * bigger refactor.</span>
<span class="source-line-no">2865</span><span id="line-2865">   */</span>
<span class="source-line-no">2866</span><span id="line-2866">  public void invalidateConnection() throws IOException {</span>
<span class="source-line-no">2867</span><span id="line-2867">    closeConnection();</span>
<span class="source-line-no">2868</span><span id="line-2868">    // Update the master addresses if they changed.</span>
<span class="source-line-no">2869</span><span id="line-2869">    final String masterConfigBefore = conf.get(HConstants.MASTER_ADDRS_KEY);</span>
<span class="source-line-no">2870</span><span id="line-2870">    final String masterConfAfter = getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY);</span>
<span class="source-line-no">2871</span><span id="line-2871">    LOG.info("Invalidated connection. Updating master addresses before: {} after: {}",</span>
<span class="source-line-no">2872</span><span id="line-2872">      masterConfigBefore, masterConfAfter);</span>
<span class="source-line-no">2873</span><span id="line-2873">    conf.set(HConstants.MASTER_ADDRS_KEY,</span>
<span class="source-line-no">2874</span><span id="line-2874">      getMiniHBaseCluster().conf.get(HConstants.MASTER_ADDRS_KEY));</span>
<span class="source-line-no">2875</span><span id="line-2875">  }</span>
<span class="source-line-no">2876</span><span id="line-2876"></span>
<span class="source-line-no">2877</span><span id="line-2877">  /**</span>
<span class="source-line-no">2878</span><span id="line-2878">   * Get a shared Connection to the cluster. this method is thread safe.</span>
<span class="source-line-no">2879</span><span id="line-2879">   * @return A Connection that can be shared. Don't close. Will be closed on shutdown of cluster.</span>
<span class="source-line-no">2880</span><span id="line-2880">   */</span>
<span class="source-line-no">2881</span><span id="line-2881">  public Connection getConnection() throws IOException {</span>
<span class="source-line-no">2882</span><span id="line-2882">    return getAsyncConnection().toConnection();</span>
<span class="source-line-no">2883</span><span id="line-2883">  }</span>
<span class="source-line-no">2884</span><span id="line-2884"></span>
<span class="source-line-no">2885</span><span id="line-2885">  /**</span>
<span class="source-line-no">2886</span><span id="line-2886">   * Get a assigned Connection to the cluster. this method is thread safe.</span>
<span class="source-line-no">2887</span><span id="line-2887">   * @param user assigned user</span>
<span class="source-line-no">2888</span><span id="line-2888">   * @return A Connection with assigned user.</span>
<span class="source-line-no">2889</span><span id="line-2889">   */</span>
<span class="source-line-no">2890</span><span id="line-2890">  public Connection getConnection(User user) throws IOException {</span>
<span class="source-line-no">2891</span><span id="line-2891">    return getAsyncConnection(user).toConnection();</span>
<span class="source-line-no">2892</span><span id="line-2892">  }</span>
<span class="source-line-no">2893</span><span id="line-2893"></span>
<span class="source-line-no">2894</span><span id="line-2894">  /**</span>
<span class="source-line-no">2895</span><span id="line-2895">   * Get a shared AsyncClusterConnection to the cluster. this method is thread safe.</span>
<span class="source-line-no">2896</span><span id="line-2896">   * @return An AsyncClusterConnection that can be shared. Don't close. Will be closed on shutdown</span>
<span class="source-line-no">2897</span><span id="line-2897">   *         of cluster.</span>
<span class="source-line-no">2898</span><span id="line-2898">   */</span>
<span class="source-line-no">2899</span><span id="line-2899">  public AsyncClusterConnection getAsyncConnection() throws IOException {</span>
<span class="source-line-no">2900</span><span id="line-2900">    try {</span>
<span class="source-line-no">2901</span><span id="line-2901">      return asyncConnection.updateAndGet(connection -&gt; {</span>
<span class="source-line-no">2902</span><span id="line-2902">        if (connection == null) {</span>
<span class="source-line-no">2903</span><span id="line-2903">          try {</span>
<span class="source-line-no">2904</span><span id="line-2904">            User user = UserProvider.instantiate(conf).getCurrent();</span>
<span class="source-line-no">2905</span><span id="line-2905">            connection = getAsyncConnection(user);</span>
<span class="source-line-no">2906</span><span id="line-2906">          } catch (IOException ioe) {</span>
<span class="source-line-no">2907</span><span id="line-2907">            throw new UncheckedIOException("Failed to create connection", ioe);</span>
<span class="source-line-no">2908</span><span id="line-2908">          }</span>
<span class="source-line-no">2909</span><span id="line-2909">        }</span>
<span class="source-line-no">2910</span><span id="line-2910">        return connection;</span>
<span class="source-line-no">2911</span><span id="line-2911">      });</span>
<span class="source-line-no">2912</span><span id="line-2912">    } catch (UncheckedIOException exception) {</span>
<span class="source-line-no">2913</span><span id="line-2913">      throw exception.getCause();</span>
<span class="source-line-no">2914</span><span id="line-2914">    }</span>
<span class="source-line-no">2915</span><span id="line-2915">  }</span>
<span class="source-line-no">2916</span><span id="line-2916"></span>
<span class="source-line-no">2917</span><span id="line-2917">  /**</span>
<span class="source-line-no">2918</span><span id="line-2918">   * Get a assigned AsyncClusterConnection to the cluster. this method is thread safe.</span>
<span class="source-line-no">2919</span><span id="line-2919">   * @param user assigned user</span>
<span class="source-line-no">2920</span><span id="line-2920">   * @return An AsyncClusterConnection with assigned user.</span>
<span class="source-line-no">2921</span><span id="line-2921">   */</span>
<span class="source-line-no">2922</span><span id="line-2922">  public AsyncClusterConnection getAsyncConnection(User user) throws IOException {</span>
<span class="source-line-no">2923</span><span id="line-2923">    return ClusterConnectionFactory.createAsyncClusterConnection(conf, null, user);</span>
<span class="source-line-no">2924</span><span id="line-2924">  }</span>
<span class="source-line-no">2925</span><span id="line-2925"></span>
<span class="source-line-no">2926</span><span id="line-2926">  public void closeConnection() throws IOException {</span>
<span class="source-line-no">2927</span><span id="line-2927">    if (hbaseAdmin != null) {</span>
<span class="source-line-no">2928</span><span id="line-2928">      Closeables.close(hbaseAdmin, true);</span>
<span class="source-line-no">2929</span><span id="line-2929">      hbaseAdmin = null;</span>
<span class="source-line-no">2930</span><span id="line-2930">    }</span>
<span class="source-line-no">2931</span><span id="line-2931">    AsyncClusterConnection asyncConnection = this.asyncConnection.getAndSet(null);</span>
<span class="source-line-no">2932</span><span id="line-2932">    if (asyncConnection != null) {</span>
<span class="source-line-no">2933</span><span id="line-2933">      Closeables.close(asyncConnection, true);</span>
<span class="source-line-no">2934</span><span id="line-2934">    }</span>
<span class="source-line-no">2935</span><span id="line-2935">  }</span>
<span class="source-line-no">2936</span><span id="line-2936"></span>
<span class="source-line-no">2937</span><span id="line-2937">  /**</span>
<span class="source-line-no">2938</span><span id="line-2938">   * Returns an Admin instance which is shared between HBaseTestingUtility instance users. Closing</span>
<span class="source-line-no">2939</span><span id="line-2939">   * it has no effect, it will be closed automatically when the cluster shutdowns</span>
<span class="source-line-no">2940</span><span id="line-2940">   */</span>
<span class="source-line-no">2941</span><span id="line-2941">  public Admin getAdmin() throws IOException {</span>
<span class="source-line-no">2942</span><span id="line-2942">    if (hbaseAdmin == null) {</span>
<span class="source-line-no">2943</span><span id="line-2943">      this.hbaseAdmin = getConnection().getAdmin();</span>
<span class="source-line-no">2944</span><span id="line-2944">    }</span>
<span class="source-line-no">2945</span><span id="line-2945">    return hbaseAdmin;</span>
<span class="source-line-no">2946</span><span id="line-2946">  }</span>
<span class="source-line-no">2947</span><span id="line-2947"></span>
<span class="source-line-no">2948</span><span id="line-2948">  private Admin hbaseAdmin = null;</span>
<span class="source-line-no">2949</span><span id="line-2949"></span>
<span class="source-line-no">2950</span><span id="line-2950">  /**</span>
<span class="source-line-no">2951</span><span id="line-2951">   * Returns an {@link Hbck} instance. Needs be closed when done.</span>
<span class="source-line-no">2952</span><span id="line-2952">   */</span>
<span class="source-line-no">2953</span><span id="line-2953">  public Hbck getHbck() throws IOException {</span>
<span class="source-line-no">2954</span><span id="line-2954">    return getConnection().getHbck();</span>
<span class="source-line-no">2955</span><span id="line-2955">  }</span>
<span class="source-line-no">2956</span><span id="line-2956"></span>
<span class="source-line-no">2957</span><span id="line-2957">  /**</span>
<span class="source-line-no">2958</span><span id="line-2958">   * Unassign the named region.</span>
<span class="source-line-no">2959</span><span id="line-2959">   * @param regionName The region to unassign.</span>
<span class="source-line-no">2960</span><span id="line-2960">   */</span>
<span class="source-line-no">2961</span><span id="line-2961">  public void unassignRegion(String regionName) throws IOException {</span>
<span class="source-line-no">2962</span><span id="line-2962">    unassignRegion(Bytes.toBytes(regionName));</span>
<span class="source-line-no">2963</span><span id="line-2963">  }</span>
<span class="source-line-no">2964</span><span id="line-2964"></span>
<span class="source-line-no">2965</span><span id="line-2965">  /**</span>
<span class="source-line-no">2966</span><span id="line-2966">   * Unassign the named region.</span>
<span class="source-line-no">2967</span><span id="line-2967">   * @param regionName The region to unassign.</span>
<span class="source-line-no">2968</span><span id="line-2968">   */</span>
<span class="source-line-no">2969</span><span id="line-2969">  public void unassignRegion(byte[] regionName) throws IOException {</span>
<span class="source-line-no">2970</span><span id="line-2970">    getAdmin().unassign(regionName, true);</span>
<span class="source-line-no">2971</span><span id="line-2971">  }</span>
<span class="source-line-no">2972</span><span id="line-2972"></span>
<span class="source-line-no">2973</span><span id="line-2973">  /**</span>
<span class="source-line-no">2974</span><span id="line-2974">   * Closes the region containing the given row.</span>
<span class="source-line-no">2975</span><span id="line-2975">   * @param row   The row to find the containing region.</span>
<span class="source-line-no">2976</span><span id="line-2976">   * @param table The table to find the region.</span>
<span class="source-line-no">2977</span><span id="line-2977">   */</span>
<span class="source-line-no">2978</span><span id="line-2978">  public void unassignRegionByRow(String row, RegionLocator table) throws IOException {</span>
<span class="source-line-no">2979</span><span id="line-2979">    unassignRegionByRow(Bytes.toBytes(row), table);</span>
<span class="source-line-no">2980</span><span id="line-2980">  }</span>
<span class="source-line-no">2981</span><span id="line-2981"></span>
<span class="source-line-no">2982</span><span id="line-2982">  /**</span>
<span class="source-line-no">2983</span><span id="line-2983">   * Closes the region containing the given row.</span>
<span class="source-line-no">2984</span><span id="line-2984">   * @param row   The row to find the containing region.</span>
<span class="source-line-no">2985</span><span id="line-2985">   * @param table The table to find the region.</span>
<span class="source-line-no">2986</span><span id="line-2986">   */</span>
<span class="source-line-no">2987</span><span id="line-2987">  public void unassignRegionByRow(byte[] row, RegionLocator table) throws IOException {</span>
<span class="source-line-no">2988</span><span id="line-2988">    HRegionLocation hrl = table.getRegionLocation(row);</span>
<span class="source-line-no">2989</span><span id="line-2989">    unassignRegion(hrl.getRegion().getRegionName());</span>
<span class="source-line-no">2990</span><span id="line-2990">  }</span>
<span class="source-line-no">2991</span><span id="line-2991"></span>
<span class="source-line-no">2992</span><span id="line-2992">  /**</span>
<span class="source-line-no">2993</span><span id="line-2993">   * Retrieves a splittable region randomly from tableName</span>
<span class="source-line-no">2994</span><span id="line-2994">   * @param tableName   name of table</span>
<span class="source-line-no">2995</span><span id="line-2995">   * @param maxAttempts maximum number of attempts, unlimited for value of -1</span>
<span class="source-line-no">2996</span><span id="line-2996">   * @return the HRegion chosen, null if none was found within limit of maxAttempts</span>
<span class="source-line-no">2997</span><span id="line-2997">   */</span>
<span class="source-line-no">2998</span><span id="line-2998">  public HRegion getSplittableRegion(TableName tableName, int maxAttempts) {</span>
<span class="source-line-no">2999</span><span id="line-2999">    List&lt;HRegion&gt; regions = getHBaseCluster().getRegions(tableName);</span>
<span class="source-line-no">3000</span><span id="line-3000">    int regCount = regions.size();</span>
<span class="source-line-no">3001</span><span id="line-3001">    Set&lt;Integer&gt; attempted = new HashSet&lt;&gt;();</span>
<span class="source-line-no">3002</span><span id="line-3002">    int idx;</span>
<span class="source-line-no">3003</span><span id="line-3003">    int attempts = 0;</span>
<span class="source-line-no">3004</span><span id="line-3004">    do {</span>
<span class="source-line-no">3005</span><span id="line-3005">      regions = getHBaseCluster().getRegions(tableName);</span>
<span class="source-line-no">3006</span><span id="line-3006">      if (regCount != regions.size()) {</span>
<span class="source-line-no">3007</span><span id="line-3007">        // if there was region movement, clear attempted Set</span>
<span class="source-line-no">3008</span><span id="line-3008">        attempted.clear();</span>
<span class="source-line-no">3009</span><span id="line-3009">      }</span>
<span class="source-line-no">3010</span><span id="line-3010">      regCount = regions.size();</span>
<span class="source-line-no">3011</span><span id="line-3011">      // There are chances that before we get the region for the table from an RS the region may</span>
<span class="source-line-no">3012</span><span id="line-3012">      // be going for CLOSE. This may be because online schema change is enabled</span>
<span class="source-line-no">3013</span><span id="line-3013">      if (regCount &gt; 0) {</span>
<span class="source-line-no">3014</span><span id="line-3014">        idx = ThreadLocalRandom.current().nextInt(regCount);</span>
<span class="source-line-no">3015</span><span id="line-3015">        // if we have just tried this region, there is no need to try again</span>
<span class="source-line-no">3016</span><span id="line-3016">        if (attempted.contains(idx)) {</span>
<span class="source-line-no">3017</span><span id="line-3017">          continue;</span>
<span class="source-line-no">3018</span><span id="line-3018">        }</span>
<span class="source-line-no">3019</span><span id="line-3019">        HRegion region = regions.get(idx);</span>
<span class="source-line-no">3020</span><span id="line-3020">        if (region.checkSplit().isPresent()) {</span>
<span class="source-line-no">3021</span><span id="line-3021">          return region;</span>
<span class="source-line-no">3022</span><span id="line-3022">        }</span>
<span class="source-line-no">3023</span><span id="line-3023">        attempted.add(idx);</span>
<span class="source-line-no">3024</span><span id="line-3024">      }</span>
<span class="source-line-no">3025</span><span id="line-3025">      attempts++;</span>
<span class="source-line-no">3026</span><span id="line-3026">    } while (maxAttempts == -1 || attempts &lt; maxAttempts);</span>
<span class="source-line-no">3027</span><span id="line-3027">    return null;</span>
<span class="source-line-no">3028</span><span id="line-3028">  }</span>
<span class="source-line-no">3029</span><span id="line-3029"></span>
<span class="source-line-no">3030</span><span id="line-3030">  public MiniDFSCluster getDFSCluster() {</span>
<span class="source-line-no">3031</span><span id="line-3031">    return dfsCluster;</span>
<span class="source-line-no">3032</span><span id="line-3032">  }</span>
<span class="source-line-no">3033</span><span id="line-3033"></span>
<span class="source-line-no">3034</span><span id="line-3034">  public void setDFSCluster(MiniDFSCluster cluster) throws IllegalStateException, IOException {</span>
<span class="source-line-no">3035</span><span id="line-3035">    setDFSCluster(cluster, true);</span>
<span class="source-line-no">3036</span><span id="line-3036">  }</span>
<span class="source-line-no">3037</span><span id="line-3037"></span>
<span class="source-line-no">3038</span><span id="line-3038">  /**</span>
<span class="source-line-no">3039</span><span id="line-3039">   * Set the MiniDFSCluster</span>
<span class="source-line-no">3040</span><span id="line-3040">   * @param cluster     cluster to use</span>
<span class="source-line-no">3041</span><span id="line-3041">   * @param requireDown require the that cluster not be "up" (MiniDFSCluster#isClusterUp) before it</span>
<span class="source-line-no">3042</span><span id="line-3042">   *                    is set.</span>
<span class="source-line-no">3043</span><span id="line-3043">   * @throws IllegalStateException if the passed cluster is up when it is required to be down</span>
<span class="source-line-no">3044</span><span id="line-3044">   * @throws IOException           if the FileSystem could not be set from the passed dfs cluster</span>
<span class="source-line-no">3045</span><span id="line-3045">   */</span>
<span class="source-line-no">3046</span><span id="line-3046">  public void setDFSCluster(MiniDFSCluster cluster, boolean requireDown)</span>
<span class="source-line-no">3047</span><span id="line-3047">    throws IllegalStateException, IOException {</span>
<span class="source-line-no">3048</span><span id="line-3048">    if (dfsCluster != null &amp;&amp; requireDown &amp;&amp; dfsCluster.isClusterUp()) {</span>
<span class="source-line-no">3049</span><span id="line-3049">      throw new IllegalStateException("DFSCluster is already running! Shut it down first.");</span>
<span class="source-line-no">3050</span><span id="line-3050">    }</span>
<span class="source-line-no">3051</span><span id="line-3051">    this.dfsCluster = cluster;</span>
<span class="source-line-no">3052</span><span id="line-3052">    this.setFs();</span>
<span class="source-line-no">3053</span><span id="line-3053">  }</span>
<span class="source-line-no">3054</span><span id="line-3054"></span>
<span class="source-line-no">3055</span><span id="line-3055">  public FileSystem getTestFileSystem() throws IOException {</span>
<span class="source-line-no">3056</span><span id="line-3056">    return HFileSystem.get(conf);</span>
<span class="source-line-no">3057</span><span id="line-3057">  }</span>
<span class="source-line-no">3058</span><span id="line-3058"></span>
<span class="source-line-no">3059</span><span id="line-3059">  /**</span>
<span class="source-line-no">3060</span><span id="line-3060">   * Wait until all regions in a table have been assigned. Waits default timeout before giving up</span>
<span class="source-line-no">3061</span><span id="line-3061">   * (30 seconds).</span>
<span class="source-line-no">3062</span><span id="line-3062">   * @param table Table to wait on.</span>
<span class="source-line-no">3063</span><span id="line-3063">   */</span>
<span class="source-line-no">3064</span><span id="line-3064">  public void waitTableAvailable(TableName table) throws InterruptedException, IOException {</span>
<span class="source-line-no">3065</span><span id="line-3065">    waitTableAvailable(table.getName(), 30000);</span>
<span class="source-line-no">3066</span><span id="line-3066">  }</span>
<span class="source-line-no">3067</span><span id="line-3067"></span>
<span class="source-line-no">3068</span><span id="line-3068">  public void waitTableAvailable(TableName table, long timeoutMillis)</span>
<span class="source-line-no">3069</span><span id="line-3069">    throws InterruptedException, IOException {</span>
<span class="source-line-no">3070</span><span id="line-3070">    waitFor(timeoutMillis, predicateTableAvailable(table));</span>
<span class="source-line-no">3071</span><span id="line-3071">  }</span>
<span class="source-line-no">3072</span><span id="line-3072"></span>
<span class="source-line-no">3073</span><span id="line-3073">  /**</span>
<span class="source-line-no">3074</span><span id="line-3074">   * Wait until all regions in a table have been assigned</span>
<span class="source-line-no">3075</span><span id="line-3075">   * @param table         Table to wait on.</span>
<span class="source-line-no">3076</span><span id="line-3076">   * @param timeoutMillis Timeout.</span>
<span class="source-line-no">3077</span><span id="line-3077">   */</span>
<span class="source-line-no">3078</span><span id="line-3078">  public void waitTableAvailable(byte[] table, long timeoutMillis)</span>
<span class="source-line-no">3079</span><span id="line-3079">    throws InterruptedException, IOException {</span>
<span class="source-line-no">3080</span><span id="line-3080">    waitFor(timeoutMillis, predicateTableAvailable(TableName.valueOf(table)));</span>
<span class="source-line-no">3081</span><span id="line-3081">  }</span>
<span class="source-line-no">3082</span><span id="line-3082"></span>
<span class="source-line-no">3083</span><span id="line-3083">  public String explainTableAvailability(TableName tableName) throws IOException {</span>
<span class="source-line-no">3084</span><span id="line-3084">    StringBuilder msg =</span>
<span class="source-line-no">3085</span><span id="line-3085">      new StringBuilder(explainTableState(tableName, TableState.State.ENABLED)).append(", ");</span>
<span class="source-line-no">3086</span><span id="line-3086">    if (getHBaseCluster().getMaster().isAlive()) {</span>
<span class="source-line-no">3087</span><span id="line-3087">      Map&lt;RegionInfo, ServerName&gt; assignments = getHBaseCluster().getMaster().getAssignmentManager()</span>
<span class="source-line-no">3088</span><span id="line-3088">        .getRegionStates().getRegionAssignments();</span>
<span class="source-line-no">3089</span><span id="line-3089">      final List&lt;Pair&lt;RegionInfo, ServerName&gt;&gt; metaLocations =</span>
<span class="source-line-no">3090</span><span id="line-3090">        MetaTableAccessor.getTableRegionsAndLocations(getConnection(), tableName);</span>
<span class="source-line-no">3091</span><span id="line-3091">      for (Pair&lt;RegionInfo, ServerName&gt; metaLocation : metaLocations) {</span>
<span class="source-line-no">3092</span><span id="line-3092">        RegionInfo hri = metaLocation.getFirst();</span>
<span class="source-line-no">3093</span><span id="line-3093">        ServerName sn = metaLocation.getSecond();</span>
<span class="source-line-no">3094</span><span id="line-3094">        if (!assignments.containsKey(hri)) {</span>
<span class="source-line-no">3095</span><span id="line-3095">          msg.append(", region ").append(hri)</span>
<span class="source-line-no">3096</span><span id="line-3096">            .append(" not assigned, but found in meta, it expected to be on ").append(sn);</span>
<span class="source-line-no">3097</span><span id="line-3097">        } else if (sn == null) {</span>
<span class="source-line-no">3098</span><span id="line-3098">          msg.append(",  region ").append(hri).append(" assigned,  but has no server in meta");</span>
<span class="source-line-no">3099</span><span id="line-3099">        } else if (!sn.equals(assignments.get(hri))) {</span>
<span class="source-line-no">3100</span><span id="line-3100">          msg.append(",  region ").append(hri)</span>
<span class="source-line-no">3101</span><span id="line-3101">            .append(" assigned,  but has different servers in meta and AM ( ").append(sn)</span>
<span class="source-line-no">3102</span><span id="line-3102">            .append(" &lt;&gt; ").append(assignments.get(hri));</span>
<span class="source-line-no">3103</span><span id="line-3103">        }</span>
<span class="source-line-no">3104</span><span id="line-3104">      }</span>
<span class="source-line-no">3105</span><span id="line-3105">    }</span>
<span class="source-line-no">3106</span><span id="line-3106">    return msg.toString();</span>
<span class="source-line-no">3107</span><span id="line-3107">  }</span>
<span class="source-line-no">3108</span><span id="line-3108"></span>
<span class="source-line-no">3109</span><span id="line-3109">  public String explainTableState(final TableName table, TableState.State state)</span>
<span class="source-line-no">3110</span><span id="line-3110">    throws IOException {</span>
<span class="source-line-no">3111</span><span id="line-3111">    TableState tableState = MetaTableAccessor.getTableState(getConnection(), table);</span>
<span class="source-line-no">3112</span><span id="line-3112">    if (tableState == null) {</span>
<span class="source-line-no">3113</span><span id="line-3113">      return "TableState in META: No table state in META for table " + table</span>
<span class="source-line-no">3114</span><span id="line-3114">        + " last state in meta (including deleted is " + findLastTableState(table) + ")";</span>
<span class="source-line-no">3115</span><span id="line-3115">    } else if (!tableState.inStates(state)) {</span>
<span class="source-line-no">3116</span><span id="line-3116">      return "TableState in META: Not " + state + " state, but " + tableState;</span>
<span class="source-line-no">3117</span><span id="line-3117">    } else {</span>
<span class="source-line-no">3118</span><span id="line-3118">      return "TableState in META: OK";</span>
<span class="source-line-no">3119</span><span id="line-3119">    }</span>
<span class="source-line-no">3120</span><span id="line-3120">  }</span>
<span class="source-line-no">3121</span><span id="line-3121"></span>
<span class="source-line-no">3122</span><span id="line-3122">  public TableState findLastTableState(final TableName table) throws IOException {</span>
<span class="source-line-no">3123</span><span id="line-3123">    final AtomicReference&lt;TableState&gt; lastTableState = new AtomicReference&lt;&gt;(null);</span>
<span class="source-line-no">3124</span><span id="line-3124">    ClientMetaTableAccessor.Visitor visitor = new ClientMetaTableAccessor.Visitor() {</span>
<span class="source-line-no">3125</span><span id="line-3125">      @Override</span>
<span class="source-line-no">3126</span><span id="line-3126">      public boolean visit(Result r) throws IOException {</span>
<span class="source-line-no">3127</span><span id="line-3127">        if (!Arrays.equals(r.getRow(), table.getName())) {</span>
<span class="source-line-no">3128</span><span id="line-3128">          return false;</span>
<span class="source-line-no">3129</span><span id="line-3129">        }</span>
<span class="source-line-no">3130</span><span id="line-3130">        TableState state = CatalogFamilyFormat.getTableState(r);</span>
<span class="source-line-no">3131</span><span id="line-3131">        if (state != null) {</span>
<span class="source-line-no">3132</span><span id="line-3132">          lastTableState.set(state);</span>
<span class="source-line-no">3133</span><span id="line-3133">        }</span>
<span class="source-line-no">3134</span><span id="line-3134">        return true;</span>
<span class="source-line-no">3135</span><span id="line-3135">      }</span>
<span class="source-line-no">3136</span><span id="line-3136">    };</span>
<span class="source-line-no">3137</span><span id="line-3137">    MetaTableAccessor.scanMeta(getConnection(), null, null, ClientMetaTableAccessor.QueryType.TABLE,</span>
<span class="source-line-no">3138</span><span id="line-3138">      Integer.MAX_VALUE, visitor);</span>
<span class="source-line-no">3139</span><span id="line-3139">    return lastTableState.get();</span>
<span class="source-line-no">3140</span><span id="line-3140">  }</span>
<span class="source-line-no">3141</span><span id="line-3141"></span>
<span class="source-line-no">3142</span><span id="line-3142">  /**</span>
<span class="source-line-no">3143</span><span id="line-3143">   * Waits for a table to be 'enabled'. Enabled means that table is set as 'enabled' and the regions</span>
<span class="source-line-no">3144</span><span id="line-3144">   * have been all assigned. Will timeout after default period (30 seconds) Tolerates nonexistent</span>
<span class="source-line-no">3145</span><span id="line-3145">   * table.</span>
<span class="source-line-no">3146</span><span id="line-3146">   * @param table the table to wait on.</span>
<span class="source-line-no">3147</span><span id="line-3147">   * @throws InterruptedException if interrupted while waiting</span>
<span class="source-line-no">3148</span><span id="line-3148">   * @throws IOException          if an IO problem is encountered</span>
<span class="source-line-no">3149</span><span id="line-3149">   */</span>
<span class="source-line-no">3150</span><span id="line-3150">  public void waitTableEnabled(TableName table) throws InterruptedException, IOException {</span>
<span class="source-line-no">3151</span><span id="line-3151">    waitTableEnabled(table, 30000);</span>
<span class="source-line-no">3152</span><span id="line-3152">  }</span>
<span class="source-line-no">3153</span><span id="line-3153"></span>
<span class="source-line-no">3154</span><span id="line-3154">  /**</span>
<span class="source-line-no">3155</span><span id="line-3155">   * Waits for a table to be 'enabled'. Enabled means that table is set as 'enabled' and the regions</span>
<span class="source-line-no">3156</span><span id="line-3156">   * have been all assigned.</span>
<span class="source-line-no">3157</span><span id="line-3157">   * @see #waitTableEnabled(TableName, long)</span>
<span class="source-line-no">3158</span><span id="line-3158">   * @param table         Table to wait on.</span>
<span class="source-line-no">3159</span><span id="line-3159">   * @param timeoutMillis Time to wait on it being marked enabled.</span>
<span class="source-line-no">3160</span><span id="line-3160">   */</span>
<span class="source-line-no">3161</span><span id="line-3161">  public void waitTableEnabled(byte[] table, long timeoutMillis)</span>
<span class="source-line-no">3162</span><span id="line-3162">    throws InterruptedException, IOException {</span>
<span class="source-line-no">3163</span><span id="line-3163">    waitTableEnabled(TableName.valueOf(table), timeoutMillis);</span>
<span class="source-line-no">3164</span><span id="line-3164">  }</span>
<span class="source-line-no">3165</span><span id="line-3165"></span>
<span class="source-line-no">3166</span><span id="line-3166">  public void waitTableEnabled(TableName table, long timeoutMillis) throws IOException {</span>
<span class="source-line-no">3167</span><span id="line-3167">    waitFor(timeoutMillis, predicateTableEnabled(table));</span>
<span class="source-line-no">3168</span><span id="line-3168">  }</span>
<span class="source-line-no">3169</span><span id="line-3169"></span>
<span class="source-line-no">3170</span><span id="line-3170">  /**</span>
<span class="source-line-no">3171</span><span id="line-3171">   * Waits for a table to be 'disabled'. Disabled means that table is set as 'disabled' Will timeout</span>
<span class="source-line-no">3172</span><span id="line-3172">   * after default period (30 seconds)</span>
<span class="source-line-no">3173</span><span id="line-3173">   * @param table Table to wait on.</span>
<span class="source-line-no">3174</span><span id="line-3174">   */</span>
<span class="source-line-no">3175</span><span id="line-3175">  public void waitTableDisabled(byte[] table) throws InterruptedException, IOException {</span>
<span class="source-line-no">3176</span><span id="line-3176">    waitTableDisabled(table, 30000);</span>
<span class="source-line-no">3177</span><span id="line-3177">  }</span>
<span class="source-line-no">3178</span><span id="line-3178"></span>
<span class="source-line-no">3179</span><span id="line-3179">  public void waitTableDisabled(TableName table, long millisTimeout)</span>
<span class="source-line-no">3180</span><span id="line-3180">    throws InterruptedException, IOException {</span>
<span class="source-line-no">3181</span><span id="line-3181">    waitFor(millisTimeout, predicateTableDisabled(table));</span>
<span class="source-line-no">3182</span><span id="line-3182">  }</span>
<span class="source-line-no">3183</span><span id="line-3183"></span>
<span class="source-line-no">3184</span><span id="line-3184">  /**</span>
<span class="source-line-no">3185</span><span id="line-3185">   * Waits for a table to be 'disabled'. Disabled means that table is set as 'disabled'</span>
<span class="source-line-no">3186</span><span id="line-3186">   * @param table         Table to wait on.</span>
<span class="source-line-no">3187</span><span id="line-3187">   * @param timeoutMillis Time to wait on it being marked disabled.</span>
<span class="source-line-no">3188</span><span id="line-3188">   */</span>
<span class="source-line-no">3189</span><span id="line-3189">  public void waitTableDisabled(byte[] table, long timeoutMillis)</span>
<span class="source-line-no">3190</span><span id="line-3190">    throws InterruptedException, IOException {</span>
<span class="source-line-no">3191</span><span id="line-3191">    waitTableDisabled(TableName.valueOf(table), timeoutMillis);</span>
<span class="source-line-no">3192</span><span id="line-3192">  }</span>
<span class="source-line-no">3193</span><span id="line-3193"></span>
<span class="source-line-no">3194</span><span id="line-3194">  /**</span>
<span class="source-line-no">3195</span><span id="line-3195">   * Make sure that at least the specified number of region servers are running</span>
<span class="source-line-no">3196</span><span id="line-3196">   * @param num minimum number of region servers that should be running</span>
<span class="source-line-no">3197</span><span id="line-3197">   * @return true if we started some servers</span>
<span class="source-line-no">3198</span><span id="line-3198">   */</span>
<span class="source-line-no">3199</span><span id="line-3199">  public boolean ensureSomeRegionServersAvailable(final int num) throws IOException {</span>
<span class="source-line-no">3200</span><span id="line-3200">    boolean startedServer = false;</span>
<span class="source-line-no">3201</span><span id="line-3201">    MiniHBaseCluster hbaseCluster = getMiniHBaseCluster();</span>
<span class="source-line-no">3202</span><span id="line-3202">    for (int i = hbaseCluster.getLiveRegionServerThreads().size(); i &lt; num; ++i) {</span>
<span class="source-line-no">3203</span><span id="line-3203">      LOG.info("Started new server=" + hbaseCluster.startRegionServer());</span>
<span class="source-line-no">3204</span><span id="line-3204">      startedServer = true;</span>
<span class="source-line-no">3205</span><span id="line-3205">    }</span>
<span class="source-line-no">3206</span><span id="line-3206"></span>
<span class="source-line-no">3207</span><span id="line-3207">    return startedServer;</span>
<span class="source-line-no">3208</span><span id="line-3208">  }</span>
<span class="source-line-no">3209</span><span id="line-3209"></span>
<span class="source-line-no">3210</span><span id="line-3210">  /**</span>
<span class="source-line-no">3211</span><span id="line-3211">   * Make sure that at least the specified number of region servers are running. We don't count the</span>
<span class="source-line-no">3212</span><span id="line-3212">   * ones that are currently stopping or are stopped.</span>
<span class="source-line-no">3213</span><span id="line-3213">   * @param num minimum number of region servers that should be running</span>
<span class="source-line-no">3214</span><span id="line-3214">   * @return true if we started some servers</span>
<span class="source-line-no">3215</span><span id="line-3215">   */</span>
<span class="source-line-no">3216</span><span id="line-3216">  public boolean ensureSomeNonStoppedRegionServersAvailable(final int num) throws IOException {</span>
<span class="source-line-no">3217</span><span id="line-3217">    boolean startedServer = ensureSomeRegionServersAvailable(num);</span>
<span class="source-line-no">3218</span><span id="line-3218"></span>
<span class="source-line-no">3219</span><span id="line-3219">    int nonStoppedServers = 0;</span>
<span class="source-line-no">3220</span><span id="line-3220">    for (JVMClusterUtil.RegionServerThread rst : getMiniHBaseCluster().getRegionServerThreads()) {</span>
<span class="source-line-no">3221</span><span id="line-3221"></span>
<span class="source-line-no">3222</span><span id="line-3222">      HRegionServer hrs = rst.getRegionServer();</span>
<span class="source-line-no">3223</span><span id="line-3223">      if (hrs.isStopping() || hrs.isStopped()) {</span>
<span class="source-line-no">3224</span><span id="line-3224">        LOG.info("A region server is stopped or stopping:" + hrs);</span>
<span class="source-line-no">3225</span><span id="line-3225">      } else {</span>
<span class="source-line-no">3226</span><span id="line-3226">        nonStoppedServers++;</span>
<span class="source-line-no">3227</span><span id="line-3227">      }</span>
<span class="source-line-no">3228</span><span id="line-3228">    }</span>
<span class="source-line-no">3229</span><span id="line-3229">    for (int i = nonStoppedServers; i &lt; num; ++i) {</span>
<span class="source-line-no">3230</span><span id="line-3230">      LOG.info("Started new server=" + getMiniHBaseCluster().startRegionServer());</span>
<span class="source-line-no">3231</span><span id="line-3231">      startedServer = true;</span>
<span class="source-line-no">3232</span><span id="line-3232">    }</span>
<span class="source-line-no">3233</span><span id="line-3233">    return startedServer;</span>
<span class="source-line-no">3234</span><span id="line-3234">  }</span>
<span class="source-line-no">3235</span><span id="line-3235"></span>
<span class="source-line-no">3236</span><span id="line-3236">  /**</span>
<span class="source-line-no">3237</span><span id="line-3237">   * This method clones the passed &lt;code&gt;c&lt;/code&gt; configuration setting a new user into the clone.</span>
<span class="source-line-no">3238</span><span id="line-3238">   * Use it getting new instances of FileSystem. Only works for DistributedFileSystem w/o Kerberos.</span>
<span class="source-line-no">3239</span><span id="line-3239">   * @param c                     Initial configuration</span>
<span class="source-line-no">3240</span><span id="line-3240">   * @param differentiatingSuffix Suffix to differentiate this user from others.</span>
<span class="source-line-no">3241</span><span id="line-3241">   * @return A new configuration instance with a different user set into it.</span>
<span class="source-line-no">3242</span><span id="line-3242">   */</span>
<span class="source-line-no">3243</span><span id="line-3243">  public static User getDifferentUser(final Configuration c, final String differentiatingSuffix)</span>
<span class="source-line-no">3244</span><span id="line-3244">    throws IOException {</span>
<span class="source-line-no">3245</span><span id="line-3245">    FileSystem currentfs = FileSystem.get(c);</span>
<span class="source-line-no">3246</span><span id="line-3246">    if (!(currentfs instanceof DistributedFileSystem) || User.isHBaseSecurityEnabled(c)) {</span>
<span class="source-line-no">3247</span><span id="line-3247">      return User.getCurrent();</span>
<span class="source-line-no">3248</span><span id="line-3248">    }</span>
<span class="source-line-no">3249</span><span id="line-3249">    // Else distributed filesystem. Make a new instance per daemon. Below</span>
<span class="source-line-no">3250</span><span id="line-3250">    // code is taken from the AppendTestUtil over in hdfs.</span>
<span class="source-line-no">3251</span><span id="line-3251">    String username = User.getCurrent().getName() + differentiatingSuffix;</span>
<span class="source-line-no">3252</span><span id="line-3252">    User user = User.createUserForTesting(c, username, new String[] { "supergroup" });</span>
<span class="source-line-no">3253</span><span id="line-3253">    return user;</span>
<span class="source-line-no">3254</span><span id="line-3254">  }</span>
<span class="source-line-no">3255</span><span id="line-3255"></span>
<span class="source-line-no">3256</span><span id="line-3256">  public static NavigableSet&lt;String&gt; getAllOnlineRegions(MiniHBaseCluster cluster)</span>
<span class="source-line-no">3257</span><span id="line-3257">    throws IOException {</span>
<span class="source-line-no">3258</span><span id="line-3258">    NavigableSet&lt;String&gt; online = new TreeSet&lt;&gt;();</span>
<span class="source-line-no">3259</span><span id="line-3259">    for (RegionServerThread rst : cluster.getLiveRegionServerThreads()) {</span>
<span class="source-line-no">3260</span><span id="line-3260">      try {</span>
<span class="source-line-no">3261</span><span id="line-3261">        for (RegionInfo region : ProtobufUtil</span>
<span class="source-line-no">3262</span><span id="line-3262">          .getOnlineRegions(rst.getRegionServer().getRSRpcServices())) {</span>
<span class="source-line-no">3263</span><span id="line-3263">          online.add(region.getRegionNameAsString());</span>
<span class="source-line-no">3264</span><span id="line-3264">        }</span>
<span class="source-line-no">3265</span><span id="line-3265">      } catch (RegionServerStoppedException e) {</span>
<span class="source-line-no">3266</span><span id="line-3266">        // That's fine.</span>
<span class="source-line-no">3267</span><span id="line-3267">      }</span>
<span class="source-line-no">3268</span><span id="line-3268">    }</span>
<span class="source-line-no">3269</span><span id="line-3269">    return online;</span>
<span class="source-line-no">3270</span><span id="line-3270">  }</span>
<span class="source-line-no">3271</span><span id="line-3271"></span>
<span class="source-line-no">3272</span><span id="line-3272">  /**</span>
<span class="source-line-no">3273</span><span id="line-3273">   * Set maxRecoveryErrorCount in DFSClient. In 0.20 pre-append its hard-coded to 5 and makes tests</span>
<span class="source-line-no">3274</span><span id="line-3274">   * linger. Here is the exception you'll see:</span>
<span class="source-line-no">3275</span><span id="line-3275">   *</span>
<span class="source-line-no">3276</span><span id="line-3276">   * &lt;pre&gt;</span>
<span class="source-line-no">3277</span><span id="line-3277">   * 2010-06-15 11:52:28,511 WARN  [DataStreamer for file /hbase/.logs/wal.1276627923013 block</span>
<span class="source-line-no">3278</span><span id="line-3278">   * blk_928005470262850423_1021] hdfs.DFSClient$DFSOutputStream(2657): Error Recovery for block</span>
<span class="source-line-no">3279</span><span id="line-3279">   * blk_928005470262850423_1021 failed  because recovery from primary datanode 127.0.0.1:53683</span>
<span class="source-line-no">3280</span><span id="line-3280">   * failed 4 times.  Pipeline was 127.0.0.1:53687, 127.0.0.1:53683. Will retry...</span>
<span class="source-line-no">3281</span><span id="line-3281">   * &lt;/pre&gt;</span>
<span class="source-line-no">3282</span><span id="line-3282">   *</span>
<span class="source-line-no">3283</span><span id="line-3283">   * @param stream A DFSClient.DFSOutputStream.</span>
<span class="source-line-no">3284</span><span id="line-3284">   */</span>
<span class="source-line-no">3285</span><span id="line-3285">  public static void setMaxRecoveryErrorCount(final OutputStream stream, final int max) {</span>
<span class="source-line-no">3286</span><span id="line-3286">    try {</span>
<span class="source-line-no">3287</span><span id="line-3287">      Class&lt;?&gt;[] clazzes = DFSClient.class.getDeclaredClasses();</span>
<span class="source-line-no">3288</span><span id="line-3288">      for (Class&lt;?&gt; clazz : clazzes) {</span>
<span class="source-line-no">3289</span><span id="line-3289">        String className = clazz.getSimpleName();</span>
<span class="source-line-no">3290</span><span id="line-3290">        if (className.equals("DFSOutputStream")) {</span>
<span class="source-line-no">3291</span><span id="line-3291">          if (clazz.isInstance(stream)) {</span>
<span class="source-line-no">3292</span><span id="line-3292">            Field maxRecoveryErrorCountField =</span>
<span class="source-line-no">3293</span><span id="line-3293">              stream.getClass().getDeclaredField("maxRecoveryErrorCount");</span>
<span class="source-line-no">3294</span><span id="line-3294">            maxRecoveryErrorCountField.setAccessible(true);</span>
<span class="source-line-no">3295</span><span id="line-3295">            maxRecoveryErrorCountField.setInt(stream, max);</span>
<span class="source-line-no">3296</span><span id="line-3296">            break;</span>
<span class="source-line-no">3297</span><span id="line-3297">          }</span>
<span class="source-line-no">3298</span><span id="line-3298">        }</span>
<span class="source-line-no">3299</span><span id="line-3299">      }</span>
<span class="source-line-no">3300</span><span id="line-3300">    } catch (Exception e) {</span>
<span class="source-line-no">3301</span><span id="line-3301">      LOG.info("Could not set max recovery field", e);</span>
<span class="source-line-no">3302</span><span id="line-3302">    }</span>
<span class="source-line-no">3303</span><span id="line-3303">  }</span>
<span class="source-line-no">3304</span><span id="line-3304"></span>
<span class="source-line-no">3305</span><span id="line-3305">  /**</span>
<span class="source-line-no">3306</span><span id="line-3306">   * Uses directly the assignment manager to assign the region. and waits until the specified region</span>
<span class="source-line-no">3307</span><span id="line-3307">   * has completed assignment.</span>
<span class="source-line-no">3308</span><span id="line-3308">   * @return true if the region is assigned false otherwise.</span>
<span class="source-line-no">3309</span><span id="line-3309">   */</span>
<span class="source-line-no">3310</span><span id="line-3310">  public boolean assignRegion(final RegionInfo regionInfo)</span>
<span class="source-line-no">3311</span><span id="line-3311">    throws IOException, InterruptedException {</span>
<span class="source-line-no">3312</span><span id="line-3312">    final AssignmentManager am = getHBaseCluster().getMaster().getAssignmentManager();</span>
<span class="source-line-no">3313</span><span id="line-3313">    am.assign(regionInfo);</span>
<span class="source-line-no">3314</span><span id="line-3314">    return AssignmentTestingUtil.waitForAssignment(am, regionInfo);</span>
<span class="source-line-no">3315</span><span id="line-3315">  }</span>
<span class="source-line-no">3316</span><span id="line-3316"></span>
<span class="source-line-no">3317</span><span id="line-3317">  /**</span>
<span class="source-line-no">3318</span><span id="line-3318">   * Move region to destination server and wait till region is completely moved and online</span>
<span class="source-line-no">3319</span><span id="line-3319">   * @param destRegion region to move</span>
<span class="source-line-no">3320</span><span id="line-3320">   * @param destServer destination server of the region</span>
<span class="source-line-no">3321</span><span id="line-3321">   */</span>
<span class="source-line-no">3322</span><span id="line-3322">  public void moveRegionAndWait(RegionInfo destRegion, ServerName destServer)</span>
<span class="source-line-no">3323</span><span id="line-3323">    throws InterruptedException, IOException {</span>
<span class="source-line-no">3324</span><span id="line-3324">    HMaster master = getMiniHBaseCluster().getMaster();</span>
<span class="source-line-no">3325</span><span id="line-3325">    // TODO: Here we start the move. The move can take a while.</span>
<span class="source-line-no">3326</span><span id="line-3326">    getAdmin().move(destRegion.getEncodedNameAsBytes(), destServer);</span>
<span class="source-line-no">3327</span><span id="line-3327">    while (true) {</span>
<span class="source-line-no">3328</span><span id="line-3328">      ServerName serverName =</span>
<span class="source-line-no">3329</span><span id="line-3329">        master.getAssignmentManager().getRegionStates().getRegionServerOfRegion(destRegion);</span>
<span class="source-line-no">3330</span><span id="line-3330">      if (serverName != null &amp;&amp; serverName.equals(destServer)) {</span>
<span class="source-line-no">3331</span><span id="line-3331">        assertRegionOnServer(destRegion, serverName, 2000);</span>
<span class="source-line-no">3332</span><span id="line-3332">        break;</span>
<span class="source-line-no">3333</span><span id="line-3333">      }</span>
<span class="source-line-no">3334</span><span id="line-3334">      Thread.sleep(10);</span>
<span class="source-line-no">3335</span><span id="line-3335">    }</span>
<span class="source-line-no">3336</span><span id="line-3336">  }</span>
<span class="source-line-no">3337</span><span id="line-3337"></span>
<span class="source-line-no">3338</span><span id="line-3338">  /**</span>
<span class="source-line-no">3339</span><span id="line-3339">   * Wait until all regions for a table in hbase:meta have a non-empty info:server, up to a</span>
<span class="source-line-no">3340</span><span id="line-3340">   * configuable timeout value (default is 60 seconds) This means all regions have been deployed,</span>
<span class="source-line-no">3341</span><span id="line-3341">   * master has been informed and updated hbase:meta with the regions deployed server.</span>
<span class="source-line-no">3342</span><span id="line-3342">   * @param tableName the table name</span>
<span class="source-line-no">3343</span><span id="line-3343">   */</span>
<span class="source-line-no">3344</span><span id="line-3344">  public void waitUntilAllRegionsAssigned(final TableName tableName) throws IOException {</span>
<span class="source-line-no">3345</span><span id="line-3345">    waitUntilAllRegionsAssigned(tableName,</span>
<span class="source-line-no">3346</span><span id="line-3346">      this.conf.getLong("hbase.client.sync.wait.timeout.msec", 60000));</span>
<span class="source-line-no">3347</span><span id="line-3347">  }</span>
<span class="source-line-no">3348</span><span id="line-3348"></span>
<span class="source-line-no">3349</span><span id="line-3349">  /**</span>
<span class="source-line-no">3350</span><span id="line-3350">   * Waith until all system table's regions get assigned</span>
<span class="source-line-no">3351</span><span id="line-3351">   */</span>
<span class="source-line-no">3352</span><span id="line-3352">  public void waitUntilAllSystemRegionsAssigned() throws IOException {</span>
<span class="source-line-no">3353</span><span id="line-3353">    waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);</span>
<span class="source-line-no">3354</span><span id="line-3354">  }</span>
<span class="source-line-no">3355</span><span id="line-3355"></span>
<span class="source-line-no">3356</span><span id="line-3356">  /**</span>
<span class="source-line-no">3357</span><span id="line-3357">   * Wait until all regions for a table in hbase:meta have a non-empty info:server, or until</span>
<span class="source-line-no">3358</span><span id="line-3358">   * timeout. This means all regions have been deployed, master has been informed and updated</span>
<span class="source-line-no">3359</span><span id="line-3359">   * hbase:meta with the regions deployed server.</span>
<span class="source-line-no">3360</span><span id="line-3360">   * @param tableName the table name</span>
<span class="source-line-no">3361</span><span id="line-3361">   * @param timeout   timeout, in milliseconds</span>
<span class="source-line-no">3362</span><span id="line-3362">   */</span>
<span class="source-line-no">3363</span><span id="line-3363">  public void waitUntilAllRegionsAssigned(final TableName tableName, final long timeout)</span>
<span class="source-line-no">3364</span><span id="line-3364">    throws IOException {</span>
<span class="source-line-no">3365</span><span id="line-3365">    if (!TableName.isMetaTableName(tableName)) {</span>
<span class="source-line-no">3366</span><span id="line-3366">      try (final Table meta = getConnection().getTable(TableName.META_TABLE_NAME)) {</span>
<span class="source-line-no">3367</span><span id="line-3367">        LOG.debug("Waiting until all regions of table " + tableName + " get assigned. Timeout = "</span>
<span class="source-line-no">3368</span><span id="line-3368">          + timeout + "ms");</span>
<span class="source-line-no">3369</span><span id="line-3369">        waitFor(timeout, 200, true, new ExplainingPredicate&lt;IOException&gt;() {</span>
<span class="source-line-no">3370</span><span id="line-3370">          @Override</span>
<span class="source-line-no">3371</span><span id="line-3371">          public String explainFailure() throws IOException {</span>
<span class="source-line-no">3372</span><span id="line-3372">            return explainTableAvailability(tableName);</span>
<span class="source-line-no">3373</span><span id="line-3373">          }</span>
<span class="source-line-no">3374</span><span id="line-3374"></span>
<span class="source-line-no">3375</span><span id="line-3375">          @Override</span>
<span class="source-line-no">3376</span><span id="line-3376">          public boolean evaluate() throws IOException {</span>
<span class="source-line-no">3377</span><span id="line-3377">            Scan scan = new Scan();</span>
<span class="source-line-no">3378</span><span id="line-3378">            scan.addFamily(HConstants.CATALOG_FAMILY);</span>
<span class="source-line-no">3379</span><span id="line-3379">            boolean tableFound = false;</span>
<span class="source-line-no">3380</span><span id="line-3380">            try (ResultScanner s = meta.getScanner(scan)) {</span>
<span class="source-line-no">3381</span><span id="line-3381">              for (Result r; (r = s.next()) != null;) {</span>
<span class="source-line-no">3382</span><span id="line-3382">                byte[] b = r.getValue(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);</span>
<span class="source-line-no">3383</span><span id="line-3383">                RegionInfo info = RegionInfo.parseFromOrNull(b);</span>
<span class="source-line-no">3384</span><span id="line-3384">                if (info != null &amp;&amp; info.getTable().equals(tableName)) {</span>
<span class="source-line-no">3385</span><span id="line-3385">                  // Get server hosting this region from catalog family. Return false if no server</span>
<span class="source-line-no">3386</span><span id="line-3386">                  // hosting this region, or if the server hosting this region was recently killed</span>
<span class="source-line-no">3387</span><span id="line-3387">                  // (for fault tolerance testing).</span>
<span class="source-line-no">3388</span><span id="line-3388">                  tableFound = true;</span>
<span class="source-line-no">3389</span><span id="line-3389">                  byte[] server =</span>
<span class="source-line-no">3390</span><span id="line-3390">                    r.getValue(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);</span>
<span class="source-line-no">3391</span><span id="line-3391">                  if (server == null) {</span>
<span class="source-line-no">3392</span><span id="line-3392">                    return false;</span>
<span class="source-line-no">3393</span><span id="line-3393">                  } else {</span>
<span class="source-line-no">3394</span><span id="line-3394">                    byte[] startCode =</span>
<span class="source-line-no">3395</span><span id="line-3395">                      r.getValue(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);</span>
<span class="source-line-no">3396</span><span id="line-3396">                    ServerName serverName =</span>
<span class="source-line-no">3397</span><span id="line-3397">                      ServerName.valueOf(Bytes.toString(server).replaceFirst(":", ",") + ","</span>
<span class="source-line-no">3398</span><span id="line-3398">                        + Bytes.toLong(startCode));</span>
<span class="source-line-no">3399</span><span id="line-3399">                    if (</span>
<span class="source-line-no">3400</span><span id="line-3400">                      !getHBaseClusterInterface().isDistributedCluster()</span>
<span class="source-line-no">3401</span><span id="line-3401">                        &amp;&amp; getHBaseCluster().isKilledRS(serverName)</span>
<span class="source-line-no">3402</span><span id="line-3402">                    ) {</span>
<span class="source-line-no">3403</span><span id="line-3403">                      return false;</span>
<span class="source-line-no">3404</span><span id="line-3404">                    }</span>
<span class="source-line-no">3405</span><span id="line-3405">                  }</span>
<span class="source-line-no">3406</span><span id="line-3406">                  if (RegionStateStore.getRegionState(r, info) != RegionState.State.OPEN) {</span>
<span class="source-line-no">3407</span><span id="line-3407">                    return false;</span>
<span class="source-line-no">3408</span><span id="line-3408">                  }</span>
<span class="source-line-no">3409</span><span id="line-3409">                }</span>
<span class="source-line-no">3410</span><span id="line-3410">              }</span>
<span class="source-line-no">3411</span><span id="line-3411">            }</span>
<span class="source-line-no">3412</span><span id="line-3412">            if (!tableFound) {</span>
<span class="source-line-no">3413</span><span id="line-3413">              LOG.warn(</span>
<span class="source-line-no">3414</span><span id="line-3414">                "Didn't find the entries for table " + tableName + " in meta, already deleted?");</span>
<span class="source-line-no">3415</span><span id="line-3415">            }</span>
<span class="source-line-no">3416</span><span id="line-3416">            return tableFound;</span>
<span class="source-line-no">3417</span><span id="line-3417">          }</span>
<span class="source-line-no">3418</span><span id="line-3418">        });</span>
<span class="source-line-no">3419</span><span id="line-3419">      }</span>
<span class="source-line-no">3420</span><span id="line-3420">    }</span>
<span class="source-line-no">3421</span><span id="line-3421">    LOG.info("All regions for table " + tableName + " assigned to meta. Checking AM states.");</span>
<span class="source-line-no">3422</span><span id="line-3422">    // check from the master state if we are using a mini cluster</span>
<span class="source-line-no">3423</span><span id="line-3423">    if (!getHBaseClusterInterface().isDistributedCluster()) {</span>
<span class="source-line-no">3424</span><span id="line-3424">      // So, all regions are in the meta table but make sure master knows of the assignments before</span>
<span class="source-line-no">3425</span><span id="line-3425">      // returning -- sometimes this can lag.</span>
<span class="source-line-no">3426</span><span id="line-3426">      HMaster master = getHBaseCluster().getMaster();</span>
<span class="source-line-no">3427</span><span id="line-3427">      final RegionStates states = master.getAssignmentManager().getRegionStates();</span>
<span class="source-line-no">3428</span><span id="line-3428">      waitFor(timeout, 200, new ExplainingPredicate&lt;IOException&gt;() {</span>
<span class="source-line-no">3429</span><span id="line-3429">        @Override</span>
<span class="source-line-no">3430</span><span id="line-3430">        public String explainFailure() throws IOException {</span>
<span class="source-line-no">3431</span><span id="line-3431">          return explainTableAvailability(tableName);</span>
<span class="source-line-no">3432</span><span id="line-3432">        }</span>
<span class="source-line-no">3433</span><span id="line-3433"></span>
<span class="source-line-no">3434</span><span id="line-3434">        @Override</span>
<span class="source-line-no">3435</span><span id="line-3435">        public boolean evaluate() throws IOException {</span>
<span class="source-line-no">3436</span><span id="line-3436">          List&lt;RegionInfo&gt; hris = states.getRegionsOfTable(tableName);</span>
<span class="source-line-no">3437</span><span id="line-3437">          return hris != null &amp;&amp; !hris.isEmpty();</span>
<span class="source-line-no">3438</span><span id="line-3438">        }</span>
<span class="source-line-no">3439</span><span id="line-3439">      });</span>
<span class="source-line-no">3440</span><span id="line-3440">    }</span>
<span class="source-line-no">3441</span><span id="line-3441">    LOG.info("All regions for table " + tableName + " assigned.");</span>
<span class="source-line-no">3442</span><span id="line-3442">  }</span>
<span class="source-line-no">3443</span><span id="line-3443"></span>
<span class="source-line-no">3444</span><span id="line-3444">  /**</span>
<span class="source-line-no">3445</span><span id="line-3445">   * Do a small get/scan against one store. This is required because store has no actual methods of</span>
<span class="source-line-no">3446</span><span id="line-3446">   * querying itself, and relies on StoreScanner.</span>
<span class="source-line-no">3447</span><span id="line-3447">   */</span>
<span class="source-line-no">3448</span><span id="line-3448">  public static List&lt;Cell&gt; getFromStoreFile(HStore store, Get get) throws IOException {</span>
<span class="source-line-no">3449</span><span id="line-3449">    Scan scan = new Scan(get);</span>
<span class="source-line-no">3450</span><span id="line-3450">    InternalScanner scanner = (InternalScanner) store.getScanner(scan,</span>
<span class="source-line-no">3451</span><span id="line-3451">      scan.getFamilyMap().get(store.getColumnFamilyDescriptor().getName()),</span>
<span class="source-line-no">3452</span><span id="line-3452">      // originally MultiVersionConcurrencyControl.resetThreadReadPoint() was called to set</span>
<span class="source-line-no">3453</span><span id="line-3453">      // readpoint 0.</span>
<span class="source-line-no">3454</span><span id="line-3454">      0);</span>
<span class="source-line-no">3455</span><span id="line-3455"></span>
<span class="source-line-no">3456</span><span id="line-3456">    List&lt;Cell&gt; result = new ArrayList&lt;&gt;();</span>
<span class="source-line-no">3457</span><span id="line-3457">    scanner.next(result);</span>
<span class="source-line-no">3458</span><span id="line-3458">    if (!result.isEmpty()) {</span>
<span class="source-line-no">3459</span><span id="line-3459">      // verify that we are on the row we want:</span>
<span class="source-line-no">3460</span><span id="line-3460">      Cell kv = result.get(0);</span>
<span class="source-line-no">3461</span><span id="line-3461">      if (!CellUtil.matchingRows(kv, get.getRow())) {</span>
<span class="source-line-no">3462</span><span id="line-3462">        result.clear();</span>
<span class="source-line-no">3463</span><span id="line-3463">      }</span>
<span class="source-line-no">3464</span><span id="line-3464">    }</span>
<span class="source-line-no">3465</span><span id="line-3465">    scanner.close();</span>
<span class="source-line-no">3466</span><span id="line-3466">    return result;</span>
<span class="source-line-no">3467</span><span id="line-3467">  }</span>
<span class="source-line-no">3468</span><span id="line-3468"></span>
<span class="source-line-no">3469</span><span id="line-3469">  /**</span>
<span class="source-line-no">3470</span><span id="line-3470">   * Create region split keys between startkey and endKey</span>
<span class="source-line-no">3471</span><span id="line-3471">   * @param numRegions the number of regions to be created. it has to be greater than 3.</span>
<span class="source-line-no">3472</span><span id="line-3472">   * @return resulting split keys</span>
<span class="source-line-no">3473</span><span id="line-3473">   */</span>
<span class="source-line-no">3474</span><span id="line-3474">  public byte[][] getRegionSplitStartKeys(byte[] startKey, byte[] endKey, int numRegions) {</span>
<span class="source-line-no">3475</span><span id="line-3475">    if (numRegions &lt;= 3) {</span>
<span class="source-line-no">3476</span><span id="line-3476">      throw new AssertionError();</span>
<span class="source-line-no">3477</span><span id="line-3477">    }</span>
<span class="source-line-no">3478</span><span id="line-3478">    byte[][] tmpSplitKeys = Bytes.split(startKey, endKey, numRegions - 3);</span>
<span class="source-line-no">3479</span><span id="line-3479">    byte[][] result = new byte[tmpSplitKeys.length + 1][];</span>
<span class="source-line-no">3480</span><span id="line-3480">    System.arraycopy(tmpSplitKeys, 0, result, 1, tmpSplitKeys.length);</span>
<span class="source-line-no">3481</span><span id="line-3481">    result[0] = HConstants.EMPTY_BYTE_ARRAY;</span>
<span class="source-line-no">3482</span><span id="line-3482">    return result;</span>
<span class="source-line-no">3483</span><span id="line-3483">  }</span>
<span class="source-line-no">3484</span><span id="line-3484"></span>
<span class="source-line-no">3485</span><span id="line-3485">  /**</span>
<span class="source-line-no">3486</span><span id="line-3486">   * Do a small get/scan against one store. This is required because store has no actual methods of</span>
<span class="source-line-no">3487</span><span id="line-3487">   * querying itself, and relies on StoreScanner.</span>
<span class="source-line-no">3488</span><span id="line-3488">   */</span>
<span class="source-line-no">3489</span><span id="line-3489">  public static List&lt;Cell&gt; getFromStoreFile(HStore store, byte[] row, NavigableSet&lt;byte[]&gt; columns)</span>
<span class="source-line-no">3490</span><span id="line-3490">    throws IOException {</span>
<span class="source-line-no">3491</span><span id="line-3491">    Get get = new Get(row);</span>
<span class="source-line-no">3492</span><span id="line-3492">    Map&lt;byte[], NavigableSet&lt;byte[]&gt;&gt; s = get.getFamilyMap();</span>
<span class="source-line-no">3493</span><span id="line-3493">    s.put(store.getColumnFamilyDescriptor().getName(), columns);</span>
<span class="source-line-no">3494</span><span id="line-3494"></span>
<span class="source-line-no">3495</span><span id="line-3495">    return getFromStoreFile(store, get);</span>
<span class="source-line-no">3496</span><span id="line-3496">  }</span>
<span class="source-line-no">3497</span><span id="line-3497"></span>
<span class="source-line-no">3498</span><span id="line-3498">  public static void assertKVListsEqual(String additionalMsg, final List&lt;? extends Cell&gt; expected,</span>
<span class="source-line-no">3499</span><span id="line-3499">    final List&lt;? extends Cell&gt; actual) {</span>
<span class="source-line-no">3500</span><span id="line-3500">    final int eLen = expected.size();</span>
<span class="source-line-no">3501</span><span id="line-3501">    final int aLen = actual.size();</span>
<span class="source-line-no">3502</span><span id="line-3502">    final int minLen = Math.min(eLen, aLen);</span>
<span class="source-line-no">3503</span><span id="line-3503"></span>
<span class="source-line-no">3504</span><span id="line-3504">    int i;</span>
<span class="source-line-no">3505</span><span id="line-3505">    for (i = 0; i &lt; minLen</span>
<span class="source-line-no">3506</span><span id="line-3506">      &amp;&amp; CellComparator.getInstance().compare(expected.get(i), actual.get(i)) == 0; ++i) {</span>
<span class="source-line-no">3507</span><span id="line-3507">    }</span>
<span class="source-line-no">3508</span><span id="line-3508"></span>
<span class="source-line-no">3509</span><span id="line-3509">    if (additionalMsg == null) {</span>
<span class="source-line-no">3510</span><span id="line-3510">      additionalMsg = "";</span>
<span class="source-line-no">3511</span><span id="line-3511">    }</span>
<span class="source-line-no">3512</span><span id="line-3512">    if (!additionalMsg.isEmpty()) {</span>
<span class="source-line-no">3513</span><span id="line-3513">      additionalMsg = ". " + additionalMsg;</span>
<span class="source-line-no">3514</span><span id="line-3514">    }</span>
<span class="source-line-no">3515</span><span id="line-3515"></span>
<span class="source-line-no">3516</span><span id="line-3516">    if (eLen != aLen || i != minLen) {</span>
<span class="source-line-no">3517</span><span id="line-3517">      throw new AssertionError("Expected and actual KV arrays differ at position " + i + ": "</span>
<span class="source-line-no">3518</span><span id="line-3518">        + safeGetAsStr(expected, i) + " (length " + eLen + ") vs. " + safeGetAsStr(actual, i)</span>
<span class="source-line-no">3519</span><span id="line-3519">        + " (length " + aLen + ")" + additionalMsg);</span>
<span class="source-line-no">3520</span><span id="line-3520">    }</span>
<span class="source-line-no">3521</span><span id="line-3521">  }</span>
<span class="source-line-no">3522</span><span id="line-3522"></span>
<span class="source-line-no">3523</span><span id="line-3523">  public static &lt;T&gt; String safeGetAsStr(List&lt;T&gt; lst, int i) {</span>
<span class="source-line-no">3524</span><span id="line-3524">    if (0 &lt;= i &amp;&amp; i &lt; lst.size()) {</span>
<span class="source-line-no">3525</span><span id="line-3525">      return lst.get(i).toString();</span>
<span class="source-line-no">3526</span><span id="line-3526">    } else {</span>
<span class="source-line-no">3527</span><span id="line-3527">      return "&lt;out_of_range&gt;";</span>
<span class="source-line-no">3528</span><span id="line-3528">    }</span>
<span class="source-line-no">3529</span><span id="line-3529">  }</span>
<span class="source-line-no">3530</span><span id="line-3530"></span>
<span class="source-line-no">3531</span><span id="line-3531">  public String getRpcConnnectionURI() throws UnknownHostException {</span>
<span class="source-line-no">3532</span><span id="line-3532">    return "hbase+rpc://" + MasterRegistry.getMasterAddr(conf);</span>
<span class="source-line-no">3533</span><span id="line-3533">  }</span>
<span class="source-line-no">3534</span><span id="line-3534"></span>
<span class="source-line-no">3535</span><span id="line-3535">  public String getZkConnectionURI() {</span>
<span class="source-line-no">3536</span><span id="line-3536">    return "hbase+zk://" + conf.get(HConstants.ZOOKEEPER_QUORUM) + ":"</span>
<span class="source-line-no">3537</span><span id="line-3537">      + conf.get(HConstants.ZOOKEEPER_CLIENT_PORT)</span>
<span class="source-line-no">3538</span><span id="line-3538">      + conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT, HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);</span>
<span class="source-line-no">3539</span><span id="line-3539">  }</span>
<span class="source-line-no">3540</span><span id="line-3540"></span>
<span class="source-line-no">3541</span><span id="line-3541">  /**</span>
<span class="source-line-no">3542</span><span id="line-3542">   * Get the zk based cluster key for this cluster.</span>
<span class="source-line-no">3543</span><span id="line-3543">   * @deprecated since 2.7.0, will be removed in 4.0.0. Now we use connection uri to specify the</span>
<span class="source-line-no">3544</span><span id="line-3544">   *             connection info of a cluster. Keep here only for compatibility.</span>
<span class="source-line-no">3545</span><span id="line-3545">   * @see #getRpcConnnectionURI()</span>
<span class="source-line-no">3546</span><span id="line-3546">   * @see #getZkConnectionURI()</span>
<span class="source-line-no">3547</span><span id="line-3547">   */</span>
<span class="source-line-no">3548</span><span id="line-3548">  @Deprecated</span>
<span class="source-line-no">3549</span><span id="line-3549">  public String getClusterKey() {</span>
<span class="source-line-no">3550</span><span id="line-3550">    return conf.get(HConstants.ZOOKEEPER_QUORUM) + ":" + conf.get(HConstants.ZOOKEEPER_CLIENT_PORT)</span>
<span class="source-line-no">3551</span><span id="line-3551">      + ":"</span>
<span class="source-line-no">3552</span><span id="line-3552">      + conf.get(HConstants.ZOOKEEPER_ZNODE_PARENT, HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT);</span>
<span class="source-line-no">3553</span><span id="line-3553">  }</span>
<span class="source-line-no">3554</span><span id="line-3554"></span>
<span class="source-line-no">3555</span><span id="line-3555">  /** Creates a random table with the given parameters */</span>
<span class="source-line-no">3556</span><span id="line-3556">  public Table createRandomTable(TableName tableName, final Collection&lt;String&gt; families,</span>
<span class="source-line-no">3557</span><span id="line-3557">    final int maxVersions, final int numColsPerRow, final int numFlushes, final int numRegions,</span>
<span class="source-line-no">3558</span><span id="line-3558">    final int numRowsPerFlush) throws IOException, InterruptedException {</span>
<span class="source-line-no">3559</span><span id="line-3559"></span>
<span class="source-line-no">3560</span><span id="line-3560">    LOG.info("\n\nCreating random table " + tableName + " with " + numRegions + " regions, "</span>
<span class="source-line-no">3561</span><span id="line-3561">      + numFlushes + " storefiles per region, " + numRowsPerFlush + " rows per flush, maxVersions="</span>
<span class="source-line-no">3562</span><span id="line-3562">      + maxVersions + "\n");</span>
<span class="source-line-no">3563</span><span id="line-3563"></span>
<span class="source-line-no">3564</span><span id="line-3564">    final int numCF = families.size();</span>
<span class="source-line-no">3565</span><span id="line-3565">    final byte[][] cfBytes = new byte[numCF][];</span>
<span class="source-line-no">3566</span><span id="line-3566">    {</span>
<span class="source-line-no">3567</span><span id="line-3567">      int cfIndex = 0;</span>
<span class="source-line-no">3568</span><span id="line-3568">      for (String cf : families) {</span>
<span class="source-line-no">3569</span><span id="line-3569">        cfBytes[cfIndex++] = Bytes.toBytes(cf);</span>
<span class="source-line-no">3570</span><span id="line-3570">      }</span>
<span class="source-line-no">3571</span><span id="line-3571">    }</span>
<span class="source-line-no">3572</span><span id="line-3572"></span>
<span class="source-line-no">3573</span><span id="line-3573">    final int actualStartKey = 0;</span>
<span class="source-line-no">3574</span><span id="line-3574">    final int actualEndKey = Integer.MAX_VALUE;</span>
<span class="source-line-no">3575</span><span id="line-3575">    final int keysPerRegion = (actualEndKey - actualStartKey) / numRegions;</span>
<span class="source-line-no">3576</span><span id="line-3576">    final int splitStartKey = actualStartKey + keysPerRegion;</span>
<span class="source-line-no">3577</span><span id="line-3577">    final int splitEndKey = actualEndKey - keysPerRegion;</span>
<span class="source-line-no">3578</span><span id="line-3578">    final String keyFormat = "%08x";</span>
<span class="source-line-no">3579</span><span id="line-3579">    final Table table = createTable(tableName, cfBytes, maxVersions,</span>
<span class="source-line-no">3580</span><span id="line-3580">      Bytes.toBytes(String.format(keyFormat, splitStartKey)),</span>
<span class="source-line-no">3581</span><span id="line-3581">      Bytes.toBytes(String.format(keyFormat, splitEndKey)), numRegions);</span>
<span class="source-line-no">3582</span><span id="line-3582"></span>
<span class="source-line-no">3583</span><span id="line-3583">    if (hbaseCluster != null) {</span>
<span class="source-line-no">3584</span><span id="line-3584">      getMiniHBaseCluster().flushcache(TableName.META_TABLE_NAME);</span>
<span class="source-line-no">3585</span><span id="line-3585">    }</span>
<span class="source-line-no">3586</span><span id="line-3586"></span>
<span class="source-line-no">3587</span><span id="line-3587">    BufferedMutator mutator = getConnection().getBufferedMutator(tableName);</span>
<span class="source-line-no">3588</span><span id="line-3588"></span>
<span class="source-line-no">3589</span><span id="line-3589">    final Random rand = ThreadLocalRandom.current();</span>
<span class="source-line-no">3590</span><span id="line-3590">    for (int iFlush = 0; iFlush &lt; numFlushes; ++iFlush) {</span>
<span class="source-line-no">3591</span><span id="line-3591">      for (int iRow = 0; iRow &lt; numRowsPerFlush; ++iRow) {</span>
<span class="source-line-no">3592</span><span id="line-3592">        final byte[] row = Bytes.toBytes(</span>
<span class="source-line-no">3593</span><span id="line-3593">          String.format(keyFormat, actualStartKey + rand.nextInt(actualEndKey - actualStartKey)));</span>
<span class="source-line-no">3594</span><span id="line-3594"></span>
<span class="source-line-no">3595</span><span id="line-3595">        Put put = new Put(row);</span>
<span class="source-line-no">3596</span><span id="line-3596">        Delete del = new Delete(row);</span>
<span class="source-line-no">3597</span><span id="line-3597">        for (int iCol = 0; iCol &lt; numColsPerRow; ++iCol) {</span>
<span class="source-line-no">3598</span><span id="line-3598">          final byte[] cf = cfBytes[rand.nextInt(numCF)];</span>
<span class="source-line-no">3599</span><span id="line-3599">          final long ts = rand.nextInt();</span>
<span class="source-line-no">3600</span><span id="line-3600">          final byte[] qual = Bytes.toBytes("col" + iCol);</span>
<span class="source-line-no">3601</span><span id="line-3601">          if (rand.nextBoolean()) {</span>
<span class="source-line-no">3602</span><span id="line-3602">            final byte[] value =</span>
<span class="source-line-no">3603</span><span id="line-3603">              Bytes.toBytes("value_for_row_" + iRow + "_cf_" + Bytes.toStringBinary(cf) + "_col_"</span>
<span class="source-line-no">3604</span><span id="line-3604">                + iCol + "_ts_" + ts + "_random_" + rand.nextLong());</span>
<span class="source-line-no">3605</span><span id="line-3605">            put.addColumn(cf, qual, ts, value);</span>
<span class="source-line-no">3606</span><span id="line-3606">          } else if (rand.nextDouble() &lt; 0.8) {</span>
<span class="source-line-no">3607</span><span id="line-3607">            del.addColumn(cf, qual, ts);</span>
<span class="source-line-no">3608</span><span id="line-3608">          } else {</span>
<span class="source-line-no">3609</span><span id="line-3609">            del.addColumns(cf, qual, ts);</span>
<span class="source-line-no">3610</span><span id="line-3610">          }</span>
<span class="source-line-no">3611</span><span id="line-3611">        }</span>
<span class="source-line-no">3612</span><span id="line-3612"></span>
<span class="source-line-no">3613</span><span id="line-3613">        if (!put.isEmpty()) {</span>
<span class="source-line-no">3614</span><span id="line-3614">          mutator.mutate(put);</span>
<span class="source-line-no">3615</span><span id="line-3615">        }</span>
<span class="source-line-no">3616</span><span id="line-3616"></span>
<span class="source-line-no">3617</span><span id="line-3617">        if (!del.isEmpty()) {</span>
<span class="source-line-no">3618</span><span id="line-3618">          mutator.mutate(del);</span>
<span class="source-line-no">3619</span><span id="line-3619">        }</span>
<span class="source-line-no">3620</span><span id="line-3620">      }</span>
<span class="source-line-no">3621</span><span id="line-3621">      LOG.info("Initiating flush #" + iFlush + " for table " + tableName);</span>
<span class="source-line-no">3622</span><span id="line-3622">      mutator.flush();</span>
<span class="source-line-no">3623</span><span id="line-3623">      if (hbaseCluster != null) {</span>
<span class="source-line-no">3624</span><span id="line-3624">        getMiniHBaseCluster().flushcache(table.getName());</span>
<span class="source-line-no">3625</span><span id="line-3625">      }</span>
<span class="source-line-no">3626</span><span id="line-3626">    }</span>
<span class="source-line-no">3627</span><span id="line-3627">    mutator.close();</span>
<span class="source-line-no">3628</span><span id="line-3628"></span>
<span class="source-line-no">3629</span><span id="line-3629">    return table;</span>
<span class="source-line-no">3630</span><span id="line-3630">  }</span>
<span class="source-line-no">3631</span><span id="line-3631"></span>
<span class="source-line-no">3632</span><span id="line-3632">  public static int randomFreePort() {</span>
<span class="source-line-no">3633</span><span id="line-3633">    return HBaseCommonTestingUtility.randomFreePort();</span>
<span class="source-line-no">3634</span><span id="line-3634">  }</span>
<span class="source-line-no">3635</span><span id="line-3635"></span>
<span class="source-line-no">3636</span><span id="line-3636">  public static String randomMultiCastAddress() {</span>
<span class="source-line-no">3637</span><span id="line-3637">    return "226.1.1." + ThreadLocalRandom.current().nextInt(254);</span>
<span class="source-line-no">3638</span><span id="line-3638">  }</span>
<span class="source-line-no">3639</span><span id="line-3639"></span>
<span class="source-line-no">3640</span><span id="line-3640">  public static void waitForHostPort(String host, int port) throws IOException {</span>
<span class="source-line-no">3641</span><span id="line-3641">    final int maxTimeMs = 10000;</span>
<span class="source-line-no">3642</span><span id="line-3642">    final int maxNumAttempts = maxTimeMs / HConstants.SOCKET_RETRY_WAIT_MS;</span>
<span class="source-line-no">3643</span><span id="line-3643">    IOException savedException = null;</span>
<span class="source-line-no">3644</span><span id="line-3644">    LOG.info("Waiting for server at " + host + ":" + port);</span>
<span class="source-line-no">3645</span><span id="line-3645">    for (int attempt = 0; attempt &lt; maxNumAttempts; ++attempt) {</span>
<span class="source-line-no">3646</span><span id="line-3646">      try {</span>
<span class="source-line-no">3647</span><span id="line-3647">        Socket sock = new Socket(InetAddress.getByName(host), port);</span>
<span class="source-line-no">3648</span><span id="line-3648">        sock.close();</span>
<span class="source-line-no">3649</span><span id="line-3649">        savedException = null;</span>
<span class="source-line-no">3650</span><span id="line-3650">        LOG.info("Server at " + host + ":" + port + " is available");</span>
<span class="source-line-no">3651</span><span id="line-3651">        break;</span>
<span class="source-line-no">3652</span><span id="line-3652">      } catch (UnknownHostException e) {</span>
<span class="source-line-no">3653</span><span id="line-3653">        throw new IOException("Failed to look up " + host, e);</span>
<span class="source-line-no">3654</span><span id="line-3654">      } catch (IOException e) {</span>
<span class="source-line-no">3655</span><span id="line-3655">        savedException = e;</span>
<span class="source-line-no">3656</span><span id="line-3656">      }</span>
<span class="source-line-no">3657</span><span id="line-3657">      Threads.sleepWithoutInterrupt(HConstants.SOCKET_RETRY_WAIT_MS);</span>
<span class="source-line-no">3658</span><span id="line-3658">    }</span>
<span class="source-line-no">3659</span><span id="line-3659"></span>
<span class="source-line-no">3660</span><span id="line-3660">    if (savedException != null) {</span>
<span class="source-line-no">3661</span><span id="line-3661">      throw savedException;</span>
<span class="source-line-no">3662</span><span id="line-3662">    }</span>
<span class="source-line-no">3663</span><span id="line-3663">  }</span>
<span class="source-line-no">3664</span><span id="line-3664"></span>
<span class="source-line-no">3665</span><span id="line-3665">  /**</span>
<span class="source-line-no">3666</span><span id="line-3666">   * Creates a pre-split table for load testing. If the table already exists, logs a warning and</span>
<span class="source-line-no">3667</span><span id="line-3667">   * continues.</span>
<span class="source-line-no">3668</span><span id="line-3668">   * @return the number of regions the table was split into</span>
<span class="source-line-no">3669</span><span id="line-3669">   */</span>
<span class="source-line-no">3670</span><span id="line-3670">  public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,</span>
<span class="source-line-no">3671</span><span id="line-3671">    byte[] columnFamily, Algorithm compression, DataBlockEncoding dataBlockEncoding)</span>
<span class="source-line-no">3672</span><span id="line-3672">    throws IOException {</span>
<span class="source-line-no">3673</span><span id="line-3673">    return createPreSplitLoadTestTable(conf, tableName, columnFamily, compression,</span>
<span class="source-line-no">3674</span><span id="line-3674">      dataBlockEncoding, DEFAULT_REGIONS_PER_SERVER, 1, Durability.USE_DEFAULT);</span>
<span class="source-line-no">3675</span><span id="line-3675">  }</span>
<span class="source-line-no">3676</span><span id="line-3676"></span>
<span class="source-line-no">3677</span><span id="line-3677">  /**</span>
<span class="source-line-no">3678</span><span id="line-3678">   * Creates a pre-split table for load testing. If the table already exists, logs a warning and</span>
<span class="source-line-no">3679</span><span id="line-3679">   * continues.</span>
<span class="source-line-no">3680</span><span id="line-3680">   * @return the number of regions the table was split into</span>
<span class="source-line-no">3681</span><span id="line-3681">   */</span>
<span class="source-line-no">3682</span><span id="line-3682">  public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,</span>
<span class="source-line-no">3683</span><span id="line-3683">    byte[] columnFamily, Algorithm compression, DataBlockEncoding dataBlockEncoding,</span>
<span class="source-line-no">3684</span><span id="line-3684">    int numRegionsPerServer, int regionReplication, Durability durability) throws IOException {</span>
<span class="source-line-no">3685</span><span id="line-3685">    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);</span>
<span class="source-line-no">3686</span><span id="line-3686">    builder.setDurability(durability);</span>
<span class="source-line-no">3687</span><span id="line-3687">    builder.setRegionReplication(regionReplication);</span>
<span class="source-line-no">3688</span><span id="line-3688">    ColumnFamilyDescriptorBuilder cfBuilder =</span>
<span class="source-line-no">3689</span><span id="line-3689">      ColumnFamilyDescriptorBuilder.newBuilder(columnFamily);</span>
<span class="source-line-no">3690</span><span id="line-3690">    cfBuilder.setDataBlockEncoding(dataBlockEncoding);</span>
<span class="source-line-no">3691</span><span id="line-3691">    cfBuilder.setCompressionType(compression);</span>
<span class="source-line-no">3692</span><span id="line-3692">    return createPreSplitLoadTestTable(conf, builder.build(), cfBuilder.build(),</span>
<span class="source-line-no">3693</span><span id="line-3693">      numRegionsPerServer);</span>
<span class="source-line-no">3694</span><span id="line-3694">  }</span>
<span class="source-line-no">3695</span><span id="line-3695"></span>
<span class="source-line-no">3696</span><span id="line-3696">  /**</span>
<span class="source-line-no">3697</span><span id="line-3697">   * Creates a pre-split table for load testing. If the table already exists, logs a warning and</span>
<span class="source-line-no">3698</span><span id="line-3698">   * continues.</span>
<span class="source-line-no">3699</span><span id="line-3699">   * @return the number of regions the table was split into</span>
<span class="source-line-no">3700</span><span id="line-3700">   */</span>
<span class="source-line-no">3701</span><span id="line-3701">  public static int createPreSplitLoadTestTable(Configuration conf, TableName tableName,</span>
<span class="source-line-no">3702</span><span id="line-3702">    byte[][] columnFamilies, Algorithm compression, DataBlockEncoding dataBlockEncoding,</span>
<span class="source-line-no">3703</span><span id="line-3703">    int numRegionsPerServer, int regionReplication, Durability durability) throws IOException {</span>
<span class="source-line-no">3704</span><span id="line-3704">    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);</span>
<span class="source-line-no">3705</span><span id="line-3705">    builder.setDurability(durability);</span>
<span class="source-line-no">3706</span><span id="line-3706">    builder.setRegionReplication(regionReplication);</span>
<span class="source-line-no">3707</span><span id="line-3707">    ColumnFamilyDescriptor[] hcds = new ColumnFamilyDescriptor[columnFamilies.length];</span>
<span class="source-line-no">3708</span><span id="line-3708">    for (int i = 0; i &lt; columnFamilies.length; i++) {</span>
<span class="source-line-no">3709</span><span id="line-3709">      ColumnFamilyDescriptorBuilder cfBuilder =</span>
<span class="source-line-no">3710</span><span id="line-3710">        ColumnFamilyDescriptorBuilder.newBuilder(columnFamilies[i]);</span>
<span class="source-line-no">3711</span><span id="line-3711">      cfBuilder.setDataBlockEncoding(dataBlockEncoding);</span>
<span class="source-line-no">3712</span><span id="line-3712">      cfBuilder.setCompressionType(compression);</span>
<span class="source-line-no">3713</span><span id="line-3713">      hcds[i] = cfBuilder.build();</span>
<span class="source-line-no">3714</span><span id="line-3714">    }</span>
<span class="source-line-no">3715</span><span id="line-3715">    return createPreSplitLoadTestTable(conf, builder.build(), hcds, numRegionsPerServer);</span>
<span class="source-line-no">3716</span><span id="line-3716">  }</span>
<span class="source-line-no">3717</span><span id="line-3717"></span>
<span class="source-line-no">3718</span><span id="line-3718">  /**</span>
<span class="source-line-no">3719</span><span id="line-3719">   * Creates a pre-split table for load testing. If the table already exists, logs a warning and</span>
<span class="source-line-no">3720</span><span id="line-3720">   * continues.</span>
<span class="source-line-no">3721</span><span id="line-3721">   * @return the number of regions the table was split into</span>
<span class="source-line-no">3722</span><span id="line-3722">   */</span>
<span class="source-line-no">3723</span><span id="line-3723">  public static int createPreSplitLoadTestTable(Configuration conf, TableDescriptor desc,</span>
<span class="source-line-no">3724</span><span id="line-3724">    ColumnFamilyDescriptor hcd) throws IOException {</span>
<span class="source-line-no">3725</span><span id="line-3725">    return createPreSplitLoadTestTable(conf, desc, hcd, DEFAULT_REGIONS_PER_SERVER);</span>
<span class="source-line-no">3726</span><span id="line-3726">  }</span>
<span class="source-line-no">3727</span><span id="line-3727"></span>
<span class="source-line-no">3728</span><span id="line-3728">  /**</span>
<span class="source-line-no">3729</span><span id="line-3729">   * Creates a pre-split table for load testing. If the table already exists, logs a warning and</span>
<span class="source-line-no">3730</span><span id="line-3730">   * continues.</span>
<span class="source-line-no">3731</span><span id="line-3731">   * @return the number of regions the table was split into</span>
<span class="source-line-no">3732</span><span id="line-3732">   */</span>
<span class="source-line-no">3733</span><span id="line-3733">  public static int createPreSplitLoadTestTable(Configuration conf, TableDescriptor desc,</span>
<span class="source-line-no">3734</span><span id="line-3734">    ColumnFamilyDescriptor hcd, int numRegionsPerServer) throws IOException {</span>
<span class="source-line-no">3735</span><span id="line-3735">    return createPreSplitLoadTestTable(conf, desc, new ColumnFamilyDescriptor[] { hcd },</span>
<span class="source-line-no">3736</span><span id="line-3736">      numRegionsPerServer);</span>
<span class="source-line-no">3737</span><span id="line-3737">  }</span>
<span class="source-line-no">3738</span><span id="line-3738"></span>
<span class="source-line-no">3739</span><span id="line-3739">  /**</span>
<span class="source-line-no">3740</span><span id="line-3740">   * Creates a pre-split table for load testing. If the table already exists, logs a warning and</span>
<span class="source-line-no">3741</span><span id="line-3741">   * continues.</span>
<span class="source-line-no">3742</span><span id="line-3742">   * @return the number of regions the table was split into</span>
<span class="source-line-no">3743</span><span id="line-3743">   */</span>
<span class="source-line-no">3744</span><span id="line-3744">  public static int createPreSplitLoadTestTable(Configuration conf, TableDescriptor desc,</span>
<span class="source-line-no">3745</span><span id="line-3745">    ColumnFamilyDescriptor[] hcds, int numRegionsPerServer) throws IOException {</span>
<span class="source-line-no">3746</span><span id="line-3746">    return createPreSplitLoadTestTable(conf, desc, hcds, new RegionSplitter.HexStringSplit(),</span>
<span class="source-line-no">3747</span><span id="line-3747">      numRegionsPerServer);</span>
<span class="source-line-no">3748</span><span id="line-3748">  }</span>
<span class="source-line-no">3749</span><span id="line-3749"></span>
<span class="source-line-no">3750</span><span id="line-3750">  /**</span>
<span class="source-line-no">3751</span><span id="line-3751">   * Creates a pre-split table for load testing. If the table already exists, logs a warning and</span>
<span class="source-line-no">3752</span><span id="line-3752">   * continues.</span>
<span class="source-line-no">3753</span><span id="line-3753">   * @return the number of regions the table was split into</span>
<span class="source-line-no">3754</span><span id="line-3754">   */</span>
<span class="source-line-no">3755</span><span id="line-3755">  public static int createPreSplitLoadTestTable(Configuration conf, TableDescriptor td,</span>
<span class="source-line-no">3756</span><span id="line-3756">    ColumnFamilyDescriptor[] cds, SplitAlgorithm splitter, int numRegionsPerServer)</span>
<span class="source-line-no">3757</span><span id="line-3757">    throws IOException {</span>
<span class="source-line-no">3758</span><span id="line-3758">    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(td);</span>
<span class="source-line-no">3759</span><span id="line-3759">    for (ColumnFamilyDescriptor cd : cds) {</span>
<span class="source-line-no">3760</span><span id="line-3760">      if (!td.hasColumnFamily(cd.getName())) {</span>
<span class="source-line-no">3761</span><span id="line-3761">        builder.setColumnFamily(cd);</span>
<span class="source-line-no">3762</span><span id="line-3762">      }</span>
<span class="source-line-no">3763</span><span id="line-3763">    }</span>
<span class="source-line-no">3764</span><span id="line-3764">    td = builder.build();</span>
<span class="source-line-no">3765</span><span id="line-3765">    int totalNumberOfRegions = 0;</span>
<span class="source-line-no">3766</span><span id="line-3766">    Connection unmanagedConnection = ConnectionFactory.createConnection(conf);</span>
<span class="source-line-no">3767</span><span id="line-3767">    Admin admin = unmanagedConnection.getAdmin();</span>
<span class="source-line-no">3768</span><span id="line-3768"></span>
<span class="source-line-no">3769</span><span id="line-3769">    try {</span>
<span class="source-line-no">3770</span><span id="line-3770">      // create a table a pre-splits regions.</span>
<span class="source-line-no">3771</span><span id="line-3771">      // The number of splits is set as:</span>
<span class="source-line-no">3772</span><span id="line-3772">      // region servers * regions per region server).</span>
<span class="source-line-no">3773</span><span id="line-3773">      int numberOfServers = admin.getRegionServers().size();</span>
<span class="source-line-no">3774</span><span id="line-3774">      if (numberOfServers == 0) {</span>
<span class="source-line-no">3775</span><span id="line-3775">        throw new IllegalStateException("No live regionservers");</span>
<span class="source-line-no">3776</span><span id="line-3776">      }</span>
<span class="source-line-no">3777</span><span id="line-3777"></span>
<span class="source-line-no">3778</span><span id="line-3778">      totalNumberOfRegions = numberOfServers * numRegionsPerServer;</span>
<span class="source-line-no">3779</span><span id="line-3779">      LOG.info("Number of live regionservers: " + numberOfServers + ", "</span>
<span class="source-line-no">3780</span><span id="line-3780">        + "pre-splitting table into " + totalNumberOfRegions + " regions " + "(regions per server: "</span>
<span class="source-line-no">3781</span><span id="line-3781">        + numRegionsPerServer + ")");</span>
<span class="source-line-no">3782</span><span id="line-3782"></span>
<span class="source-line-no">3783</span><span id="line-3783">      byte[][] splits = splitter.split(totalNumberOfRegions);</span>
<span class="source-line-no">3784</span><span id="line-3784"></span>
<span class="source-line-no">3785</span><span id="line-3785">      admin.createTable(td, splits);</span>
<span class="source-line-no">3786</span><span id="line-3786">    } catch (MasterNotRunningException e) {</span>
<span class="source-line-no">3787</span><span id="line-3787">      LOG.error("Master not running", e);</span>
<span class="source-line-no">3788</span><span id="line-3788">      throw new IOException(e);</span>
<span class="source-line-no">3789</span><span id="line-3789">    } catch (TableExistsException e) {</span>
<span class="source-line-no">3790</span><span id="line-3790">      LOG.warn("Table " + td.getTableName() + " already exists, continuing");</span>
<span class="source-line-no">3791</span><span id="line-3791">    } finally {</span>
<span class="source-line-no">3792</span><span id="line-3792">      admin.close();</span>
<span class="source-line-no">3793</span><span id="line-3793">      unmanagedConnection.close();</span>
<span class="source-line-no">3794</span><span id="line-3794">    }</span>
<span class="source-line-no">3795</span><span id="line-3795">    return totalNumberOfRegions;</span>
<span class="source-line-no">3796</span><span id="line-3796">  }</span>
<span class="source-line-no">3797</span><span id="line-3797"></span>
<span class="source-line-no">3798</span><span id="line-3798">  public static int getMetaRSPort(Connection connection) throws IOException {</span>
<span class="source-line-no">3799</span><span id="line-3799">    try (RegionLocator locator = connection.getRegionLocator(TableName.META_TABLE_NAME)) {</span>
<span class="source-line-no">3800</span><span id="line-3800">      return locator.getRegionLocation(Bytes.toBytes("")).getPort();</span>
<span class="source-line-no">3801</span><span id="line-3801">    }</span>
<span class="source-line-no">3802</span><span id="line-3802">  }</span>
<span class="source-line-no">3803</span><span id="line-3803"></span>
<span class="source-line-no">3804</span><span id="line-3804">  /**</span>
<span class="source-line-no">3805</span><span id="line-3805">   * Due to async racing issue, a region may not be in the online region list of a region server</span>
<span class="source-line-no">3806</span><span id="line-3806">   * yet, after the assignment znode is deleted and the new assignment is recorded in master.</span>
<span class="source-line-no">3807</span><span id="line-3807">   */</span>
<span class="source-line-no">3808</span><span id="line-3808">  public void assertRegionOnServer(final RegionInfo hri, final ServerName server,</span>
<span class="source-line-no">3809</span><span id="line-3809">    final long timeout) throws IOException, InterruptedException {</span>
<span class="source-line-no">3810</span><span id="line-3810">    long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;</span>
<span class="source-line-no">3811</span><span id="line-3811">    while (true) {</span>
<span class="source-line-no">3812</span><span id="line-3812">      List&lt;RegionInfo&gt; regions = getAdmin().getRegions(server);</span>
<span class="source-line-no">3813</span><span id="line-3813">      if (regions.stream().anyMatch(r -&gt; RegionInfo.COMPARATOR.compare(r, hri) == 0)) return;</span>
<span class="source-line-no">3814</span><span id="line-3814">      long now = EnvironmentEdgeManager.currentTime();</span>
<span class="source-line-no">3815</span><span id="line-3815">      if (now &gt; timeoutTime) break;</span>
<span class="source-line-no">3816</span><span id="line-3816">      Thread.sleep(10);</span>
<span class="source-line-no">3817</span><span id="line-3817">    }</span>
<span class="source-line-no">3818</span><span id="line-3818">    throw new AssertionError(</span>
<span class="source-line-no">3819</span><span id="line-3819">      "Could not find region " + hri.getRegionNameAsString() + " on server " + server);</span>
<span class="source-line-no">3820</span><span id="line-3820">  }</span>
<span class="source-line-no">3821</span><span id="line-3821"></span>
<span class="source-line-no">3822</span><span id="line-3822">  /**</span>
<span class="source-line-no">3823</span><span id="line-3823">   * Check to make sure the region is open on the specified region server, but not on any other one.</span>
<span class="source-line-no">3824</span><span id="line-3824">   */</span>
<span class="source-line-no">3825</span><span id="line-3825">  public void assertRegionOnlyOnServer(final RegionInfo hri, final ServerName server,</span>
<span class="source-line-no">3826</span><span id="line-3826">    final long timeout) throws IOException, InterruptedException {</span>
<span class="source-line-no">3827</span><span id="line-3827">    long timeoutTime = EnvironmentEdgeManager.currentTime() + timeout;</span>
<span class="source-line-no">3828</span><span id="line-3828">    while (true) {</span>
<span class="source-line-no">3829</span><span id="line-3829">      List&lt;RegionInfo&gt; regions = getAdmin().getRegions(server);</span>
<span class="source-line-no">3830</span><span id="line-3830">      if (regions.stream().anyMatch(r -&gt; RegionInfo.COMPARATOR.compare(r, hri) == 0)) {</span>
<span class="source-line-no">3831</span><span id="line-3831">        List&lt;JVMClusterUtil.RegionServerThread&gt; rsThreads =</span>
<span class="source-line-no">3832</span><span id="line-3832">          getHBaseCluster().getLiveRegionServerThreads();</span>
<span class="source-line-no">3833</span><span id="line-3833">        for (JVMClusterUtil.RegionServerThread rsThread : rsThreads) {</span>
<span class="source-line-no">3834</span><span id="line-3834">          HRegionServer rs = rsThread.getRegionServer();</span>
<span class="source-line-no">3835</span><span id="line-3835">          if (server.equals(rs.getServerName())) {</span>
<span class="source-line-no">3836</span><span id="line-3836">            continue;</span>
<span class="source-line-no">3837</span><span id="line-3837">          }</span>
<span class="source-line-no">3838</span><span id="line-3838">          Collection&lt;HRegion&gt; hrs = rs.getOnlineRegionsLocalContext();</span>
<span class="source-line-no">3839</span><span id="line-3839">          for (HRegion r : hrs) {</span>
<span class="source-line-no">3840</span><span id="line-3840">            if (r.getRegionInfo().getRegionId() == hri.getRegionId()) {</span>
<span class="source-line-no">3841</span><span id="line-3841">              throw new AssertionError("Region should not be double assigned");</span>
<span class="source-line-no">3842</span><span id="line-3842">            }</span>
<span class="source-line-no">3843</span><span id="line-3843">          }</span>
<span class="source-line-no">3844</span><span id="line-3844">        }</span>
<span class="source-line-no">3845</span><span id="line-3845">        return; // good, we are happy</span>
<span class="source-line-no">3846</span><span id="line-3846">      }</span>
<span class="source-line-no">3847</span><span id="line-3847">      long now = EnvironmentEdgeManager.currentTime();</span>
<span class="source-line-no">3848</span><span id="line-3848">      if (now &gt; timeoutTime) break;</span>
<span class="source-line-no">3849</span><span id="line-3849">      Thread.sleep(10);</span>
<span class="source-line-no">3850</span><span id="line-3850">    }</span>
<span class="source-line-no">3851</span><span id="line-3851">    throw new AssertionError(</span>
<span class="source-line-no">3852</span><span id="line-3852">      "Could not find region " + hri.getRegionNameAsString() + " on server " + server);</span>
<span class="source-line-no">3853</span><span id="line-3853">  }</span>
<span class="source-line-no">3854</span><span id="line-3854"></span>
<span class="source-line-no">3855</span><span id="line-3855">  public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd) throws IOException {</span>
<span class="source-line-no">3856</span><span id="line-3856">    TableDescriptor td =</span>
<span class="source-line-no">3857</span><span id="line-3857">      TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();</span>
<span class="source-line-no">3858</span><span id="line-3858">    RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();</span>
<span class="source-line-no">3859</span><span id="line-3859">    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td);</span>
<span class="source-line-no">3860</span><span id="line-3860">  }</span>
<span class="source-line-no">3861</span><span id="line-3861"></span>
<span class="source-line-no">3862</span><span id="line-3862">  public HRegion createTestRegion(String tableName, ColumnFamilyDescriptor cd,</span>
<span class="source-line-no">3863</span><span id="line-3863">    BlockCache blockCache) throws IOException {</span>
<span class="source-line-no">3864</span><span id="line-3864">    TableDescriptor td =</span>
<span class="source-line-no">3865</span><span id="line-3865">      TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName)).setColumnFamily(cd).build();</span>
<span class="source-line-no">3866</span><span id="line-3866">    RegionInfo info = RegionInfoBuilder.newBuilder(TableName.valueOf(tableName)).build();</span>
<span class="source-line-no">3867</span><span id="line-3867">    return createRegionAndWAL(info, getDataTestDir(), getConfiguration(), td, blockCache);</span>
<span class="source-line-no">3868</span><span id="line-3868">  }</span>
<span class="source-line-no">3869</span><span id="line-3869"></span>
<span class="source-line-no">3870</span><span id="line-3870">  public static void setFileSystemURI(String fsURI) {</span>
<span class="source-line-no">3871</span><span id="line-3871">    FS_URI = fsURI;</span>
<span class="source-line-no">3872</span><span id="line-3872">  }</span>
<span class="source-line-no">3873</span><span id="line-3873"></span>
<span class="source-line-no">3874</span><span id="line-3874">  /**</span>
<span class="source-line-no">3875</span><span id="line-3875">   * Returns a {@link Predicate} for checking that there are no regions in transition in master</span>
<span class="source-line-no">3876</span><span id="line-3876">   */</span>
<span class="source-line-no">3877</span><span id="line-3877">  public ExplainingPredicate&lt;IOException&gt; predicateNoRegionsInTransition() {</span>
<span class="source-line-no">3878</span><span id="line-3878">    return new ExplainingPredicate&lt;IOException&gt;() {</span>
<span class="source-line-no">3879</span><span id="line-3879">      @Override</span>
<span class="source-line-no">3880</span><span id="line-3880">      public String explainFailure() throws IOException {</span>
<span class="source-line-no">3881</span><span id="line-3881">        final RegionStates regionStates =</span>
<span class="source-line-no">3882</span><span id="line-3882">          getMiniHBaseCluster().getMaster().getAssignmentManager().getRegionStates();</span>
<span class="source-line-no">3883</span><span id="line-3883">        return "found in transition: " + regionStates.getRegionsInTransition().toString();</span>
<span class="source-line-no">3884</span><span id="line-3884">      }</span>
<span class="source-line-no">3885</span><span id="line-3885"></span>
<span class="source-line-no">3886</span><span id="line-3886">      @Override</span>
<span class="source-line-no">3887</span><span id="line-3887">      public boolean evaluate() throws IOException {</span>
<span class="source-line-no">3888</span><span id="line-3888">        HMaster master = getMiniHBaseCluster().getMaster();</span>
<span class="source-line-no">3889</span><span id="line-3889">        if (master == null) return false;</span>
<span class="source-line-no">3890</span><span id="line-3890">        AssignmentManager am = master.getAssignmentManager();</span>
<span class="source-line-no">3891</span><span id="line-3891">        if (am == null) return false;</span>
<span class="source-line-no">3892</span><span id="line-3892">        return !am.hasRegionsInTransition();</span>
<span class="source-line-no">3893</span><span id="line-3893">      }</span>
<span class="source-line-no">3894</span><span id="line-3894">    };</span>
<span class="source-line-no">3895</span><span id="line-3895">  }</span>
<span class="source-line-no">3896</span><span id="line-3896"></span>
<span class="source-line-no">3897</span><span id="line-3897">  /**</span>
<span class="source-line-no">3898</span><span id="line-3898">   * Returns a {@link Predicate} for checking that table is enabled</span>
<span class="source-line-no">3899</span><span id="line-3899">   */</span>
<span class="source-line-no">3900</span><span id="line-3900">  public Waiter.Predicate&lt;IOException&gt; predicateTableEnabled(final TableName tableName) {</span>
<span class="source-line-no">3901</span><span id="line-3901">    return new ExplainingPredicate&lt;IOException&gt;() {</span>
<span class="source-line-no">3902</span><span id="line-3902">      @Override</span>
<span class="source-line-no">3903</span><span id="line-3903">      public String explainFailure() throws IOException {</span>
<span class="source-line-no">3904</span><span id="line-3904">        return explainTableState(tableName, TableState.State.ENABLED);</span>
<span class="source-line-no">3905</span><span id="line-3905">      }</span>
<span class="source-line-no">3906</span><span id="line-3906"></span>
<span class="source-line-no">3907</span><span id="line-3907">      @Override</span>
<span class="source-line-no">3908</span><span id="line-3908">      public boolean evaluate() throws IOException {</span>
<span class="source-line-no">3909</span><span id="line-3909">        return getAdmin().tableExists(tableName) &amp;&amp; getAdmin().isTableEnabled(tableName);</span>
<span class="source-line-no">3910</span><span id="line-3910">      }</span>
<span class="source-line-no">3911</span><span id="line-3911">    };</span>
<span class="source-line-no">3912</span><span id="line-3912">  }</span>
<span class="source-line-no">3913</span><span id="line-3913"></span>
<span class="source-line-no">3914</span><span id="line-3914">  /**</span>
<span class="source-line-no">3915</span><span id="line-3915">   * Returns a {@link Predicate} for checking that table is enabled</span>
<span class="source-line-no">3916</span><span id="line-3916">   */</span>
<span class="source-line-no">3917</span><span id="line-3917">  public Waiter.Predicate&lt;IOException&gt; predicateTableDisabled(final TableName tableName) {</span>
<span class="source-line-no">3918</span><span id="line-3918">    return new ExplainingPredicate&lt;IOException&gt;() {</span>
<span class="source-line-no">3919</span><span id="line-3919">      @Override</span>
<span class="source-line-no">3920</span><span id="line-3920">      public String explainFailure() throws IOException {</span>
<span class="source-line-no">3921</span><span id="line-3921">        return explainTableState(tableName, TableState.State.DISABLED);</span>
<span class="source-line-no">3922</span><span id="line-3922">      }</span>
<span class="source-line-no">3923</span><span id="line-3923"></span>
<span class="source-line-no">3924</span><span id="line-3924">      @Override</span>
<span class="source-line-no">3925</span><span id="line-3925">      public boolean evaluate() throws IOException {</span>
<span class="source-line-no">3926</span><span id="line-3926">        return getAdmin().isTableDisabled(tableName);</span>
<span class="source-line-no">3927</span><span id="line-3927">      }</span>
<span class="source-line-no">3928</span><span id="line-3928">    };</span>
<span class="source-line-no">3929</span><span id="line-3929">  }</span>
<span class="source-line-no">3930</span><span id="line-3930"></span>
<span class="source-line-no">3931</span><span id="line-3931">  /**</span>
<span class="source-line-no">3932</span><span id="line-3932">   * Returns a {@link Predicate} for checking that table is enabled</span>
<span class="source-line-no">3933</span><span id="line-3933">   */</span>
<span class="source-line-no">3934</span><span id="line-3934">  public Waiter.Predicate&lt;IOException&gt; predicateTableAvailable(final TableName tableName) {</span>
<span class="source-line-no">3935</span><span id="line-3935">    return new ExplainingPredicate&lt;IOException&gt;() {</span>
<span class="source-line-no">3936</span><span id="line-3936">      @Override</span>
<span class="source-line-no">3937</span><span id="line-3937">      public String explainFailure() throws IOException {</span>
<span class="source-line-no">3938</span><span id="line-3938">        return explainTableAvailability(tableName);</span>
<span class="source-line-no">3939</span><span id="line-3939">      }</span>
<span class="source-line-no">3940</span><span id="line-3940"></span>
<span class="source-line-no">3941</span><span id="line-3941">      @Override</span>
<span class="source-line-no">3942</span><span id="line-3942">      public boolean evaluate() throws IOException {</span>
<span class="source-line-no">3943</span><span id="line-3943">        boolean tableAvailable = getAdmin().isTableAvailable(tableName);</span>
<span class="source-line-no">3944</span><span id="line-3944">        if (tableAvailable) {</span>
<span class="source-line-no">3945</span><span id="line-3945">          try (Table table = getConnection().getTable(tableName)) {</span>
<span class="source-line-no">3946</span><span id="line-3946">            TableDescriptor htd = table.getDescriptor();</span>
<span class="source-line-no">3947</span><span id="line-3947">            for (HRegionLocation loc : getConnection().getRegionLocator(tableName)</span>
<span class="source-line-no">3948</span><span id="line-3948">              .getAllRegionLocations()) {</span>
<span class="source-line-no">3949</span><span id="line-3949">              Scan scan = new Scan().withStartRow(loc.getRegion().getStartKey())</span>
<span class="source-line-no">3950</span><span id="line-3950">                .withStopRow(loc.getRegion().getEndKey()).setOneRowLimit()</span>
<span class="source-line-no">3951</span><span id="line-3951">                .setMaxResultsPerColumnFamily(1).setCacheBlocks(false);</span>
<span class="source-line-no">3952</span><span id="line-3952">              for (byte[] family : htd.getColumnFamilyNames()) {</span>
<span class="source-line-no">3953</span><span id="line-3953">                scan.addFamily(family);</span>
<span class="source-line-no">3954</span><span id="line-3954">              }</span>
<span class="source-line-no">3955</span><span id="line-3955">              try (ResultScanner scanner = table.getScanner(scan)) {</span>
<span class="source-line-no">3956</span><span id="line-3956">                scanner.next();</span>
<span class="source-line-no">3957</span><span id="line-3957">              }</span>
<span class="source-line-no">3958</span><span id="line-3958">            }</span>
<span class="source-line-no">3959</span><span id="line-3959">          }</span>
<span class="source-line-no">3960</span><span id="line-3960">        }</span>
<span class="source-line-no">3961</span><span id="line-3961">        return tableAvailable;</span>
<span class="source-line-no">3962</span><span id="line-3962">      }</span>
<span class="source-line-no">3963</span><span id="line-3963">    };</span>
<span class="source-line-no">3964</span><span id="line-3964">  }</span>
<span class="source-line-no">3965</span><span id="line-3965"></span>
<span class="source-line-no">3966</span><span id="line-3966">  /**</span>
<span class="source-line-no">3967</span><span id="line-3967">   * Wait until no regions in transition.</span>
<span class="source-line-no">3968</span><span id="line-3968">   * @param timeout How long to wait.</span>
<span class="source-line-no">3969</span><span id="line-3969">   */</span>
<span class="source-line-no">3970</span><span id="line-3970">  public void waitUntilNoRegionsInTransition(final long timeout) throws IOException {</span>
<span class="source-line-no">3971</span><span id="line-3971">    waitFor(timeout, predicateNoRegionsInTransition());</span>
<span class="source-line-no">3972</span><span id="line-3972">  }</span>
<span class="source-line-no">3973</span><span id="line-3973"></span>
<span class="source-line-no">3974</span><span id="line-3974">  /**</span>
<span class="source-line-no">3975</span><span id="line-3975">   * Wait until no regions in transition. (time limit 15min)</span>
<span class="source-line-no">3976</span><span id="line-3976">   */</span>
<span class="source-line-no">3977</span><span id="line-3977">  public void waitUntilNoRegionsInTransition() throws IOException {</span>
<span class="source-line-no">3978</span><span id="line-3978">    waitUntilNoRegionsInTransition(15 * 60000);</span>
<span class="source-line-no">3979</span><span id="line-3979">  }</span>
<span class="source-line-no">3980</span><span id="line-3980"></span>
<span class="source-line-no">3981</span><span id="line-3981">  /**</span>
<span class="source-line-no">3982</span><span id="line-3982">   * Wait until labels is ready in VisibilityLabelsCache.</span>
<span class="source-line-no">3983</span><span id="line-3983">   */</span>
<span class="source-line-no">3984</span><span id="line-3984">  public void waitLabelAvailable(long timeoutMillis, final String... labels) {</span>
<span class="source-line-no">3985</span><span id="line-3985">    final VisibilityLabelsCache labelsCache = VisibilityLabelsCache.get();</span>
<span class="source-line-no">3986</span><span id="line-3986">    waitFor(timeoutMillis, new Waiter.ExplainingPredicate&lt;RuntimeException&gt;() {</span>
<span class="source-line-no">3987</span><span id="line-3987"></span>
<span class="source-line-no">3988</span><span id="line-3988">      @Override</span>
<span class="source-line-no">3989</span><span id="line-3989">      public boolean evaluate() {</span>
<span class="source-line-no">3990</span><span id="line-3990">        for (String label : labels) {</span>
<span class="source-line-no">3991</span><span id="line-3991">          if (labelsCache.getLabelOrdinal(label) == 0) {</span>
<span class="source-line-no">3992</span><span id="line-3992">            return false;</span>
<span class="source-line-no">3993</span><span id="line-3993">          }</span>
<span class="source-line-no">3994</span><span id="line-3994">        }</span>
<span class="source-line-no">3995</span><span id="line-3995">        return true;</span>
<span class="source-line-no">3996</span><span id="line-3996">      }</span>
<span class="source-line-no">3997</span><span id="line-3997"></span>
<span class="source-line-no">3998</span><span id="line-3998">      @Override</span>
<span class="source-line-no">3999</span><span id="line-3999">      public String explainFailure() {</span>
<span class="source-line-no">4000</span><span id="line-4000">        for (String label : labels) {</span>
<span class="source-line-no">4001</span><span id="line-4001">          if (labelsCache.getLabelOrdinal(label) == 0) {</span>
<span class="source-line-no">4002</span><span id="line-4002">            return label + " is not available yet";</span>
<span class="source-line-no">4003</span><span id="line-4003">          }</span>
<span class="source-line-no">4004</span><span id="line-4004">        }</span>
<span class="source-line-no">4005</span><span id="line-4005">        return "";</span>
<span class="source-line-no">4006</span><span id="line-4006">      }</span>
<span class="source-line-no">4007</span><span id="line-4007">    });</span>
<span class="source-line-no">4008</span><span id="line-4008">  }</span>
<span class="source-line-no">4009</span><span id="line-4009"></span>
<span class="source-line-no">4010</span><span id="line-4010">  /**</span>
<span class="source-line-no">4011</span><span id="line-4011">   * Create a set of column descriptors with the combination of compression, encoding, bloom codecs</span>
<span class="source-line-no">4012</span><span id="line-4012">   * available.</span>
<span class="source-line-no">4013</span><span id="line-4013">   * @return the list of column descriptors</span>
<span class="source-line-no">4014</span><span id="line-4014">   */</span>
<span class="source-line-no">4015</span><span id="line-4015">  public static List&lt;ColumnFamilyDescriptor&gt; generateColumnDescriptors() {</span>
<span class="source-line-no">4016</span><span id="line-4016">    return generateColumnDescriptors("");</span>
<span class="source-line-no">4017</span><span id="line-4017">  }</span>
<span class="source-line-no">4018</span><span id="line-4018"></span>
<span class="source-line-no">4019</span><span id="line-4019">  /**</span>
<span class="source-line-no">4020</span><span id="line-4020">   * Create a set of column descriptors with the combination of compression, encoding, bloom codecs</span>
<span class="source-line-no">4021</span><span id="line-4021">   * available.</span>
<span class="source-line-no">4022</span><span id="line-4022">   * @param prefix family names prefix</span>
<span class="source-line-no">4023</span><span id="line-4023">   * @return the list of column descriptors</span>
<span class="source-line-no">4024</span><span id="line-4024">   */</span>
<span class="source-line-no">4025</span><span id="line-4025">  public static List&lt;ColumnFamilyDescriptor&gt; generateColumnDescriptors(final String prefix) {</span>
<span class="source-line-no">4026</span><span id="line-4026">    List&lt;ColumnFamilyDescriptor&gt; columnFamilyDescriptors = new ArrayList&lt;&gt;();</span>
<span class="source-line-no">4027</span><span id="line-4027">    long familyId = 0;</span>
<span class="source-line-no">4028</span><span id="line-4028">    for (Compression.Algorithm compressionType : getSupportedCompressionAlgorithms()) {</span>
<span class="source-line-no">4029</span><span id="line-4029">      for (DataBlockEncoding encodingType : DataBlockEncoding.values()) {</span>
<span class="source-line-no">4030</span><span id="line-4030">        for (BloomType bloomType : BloomType.values()) {</span>
<span class="source-line-no">4031</span><span id="line-4031">          String name = String.format("%s-cf-!@#&amp;-%d!@#", prefix, familyId);</span>
<span class="source-line-no">4032</span><span id="line-4032">          ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder =</span>
<span class="source-line-no">4033</span><span id="line-4033">            ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(name));</span>
<span class="source-line-no">4034</span><span id="line-4034">          columnFamilyDescriptorBuilder.setCompressionType(compressionType);</span>
<span class="source-line-no">4035</span><span id="line-4035">          columnFamilyDescriptorBuilder.setDataBlockEncoding(encodingType);</span>
<span class="source-line-no">4036</span><span id="line-4036">          columnFamilyDescriptorBuilder.setBloomFilterType(bloomType);</span>
<span class="source-line-no">4037</span><span id="line-4037">          columnFamilyDescriptors.add(columnFamilyDescriptorBuilder.build());</span>
<span class="source-line-no">4038</span><span id="line-4038">          familyId++;</span>
<span class="source-line-no">4039</span><span id="line-4039">        }</span>
<span class="source-line-no">4040</span><span id="line-4040">      }</span>
<span class="source-line-no">4041</span><span id="line-4041">    }</span>
<span class="source-line-no">4042</span><span id="line-4042">    return columnFamilyDescriptors;</span>
<span class="source-line-no">4043</span><span id="line-4043">  }</span>
<span class="source-line-no">4044</span><span id="line-4044"></span>
<span class="source-line-no">4045</span><span id="line-4045">  /**</span>
<span class="source-line-no">4046</span><span id="line-4046">   * Get supported compression algorithms.</span>
<span class="source-line-no">4047</span><span id="line-4047">   * @return supported compression algorithms.</span>
<span class="source-line-no">4048</span><span id="line-4048">   */</span>
<span class="source-line-no">4049</span><span id="line-4049">  public static Compression.Algorithm[] getSupportedCompressionAlgorithms() {</span>
<span class="source-line-no">4050</span><span id="line-4050">    String[] allAlgos = HFile.getSupportedCompressionAlgorithms();</span>
<span class="source-line-no">4051</span><span id="line-4051">    List&lt;Compression.Algorithm&gt; supportedAlgos = new ArrayList&lt;&gt;();</span>
<span class="source-line-no">4052</span><span id="line-4052">    for (String algoName : allAlgos) {</span>
<span class="source-line-no">4053</span><span id="line-4053">      try {</span>
<span class="source-line-no">4054</span><span id="line-4054">        Compression.Algorithm algo = Compression.getCompressionAlgorithmByName(algoName);</span>
<span class="source-line-no">4055</span><span id="line-4055">        algo.getCompressor();</span>
<span class="source-line-no">4056</span><span id="line-4056">        supportedAlgos.add(algo);</span>
<span class="source-line-no">4057</span><span id="line-4057">      } catch (Throwable t) {</span>
<span class="source-line-no">4058</span><span id="line-4058">        // this algo is not available</span>
<span class="source-line-no">4059</span><span id="line-4059">      }</span>
<span class="source-line-no">4060</span><span id="line-4060">    }</span>
<span class="source-line-no">4061</span><span id="line-4061">    return supportedAlgos.toArray(new Algorithm[supportedAlgos.size()]);</span>
<span class="source-line-no">4062</span><span id="line-4062">  }</span>
<span class="source-line-no">4063</span><span id="line-4063"></span>
<span class="source-line-no">4064</span><span id="line-4064">  public Result getClosestRowBefore(Region r, byte[] row, byte[] family) throws IOException {</span>
<span class="source-line-no">4065</span><span id="line-4065">    Scan scan = new Scan().withStartRow(row);</span>
<span class="source-line-no">4066</span><span id="line-4066">    scan.setReadType(ReadType.PREAD);</span>
<span class="source-line-no">4067</span><span id="line-4067">    scan.setCaching(1);</span>
<span class="source-line-no">4068</span><span id="line-4068">    scan.setReversed(true);</span>
<span class="source-line-no">4069</span><span id="line-4069">    scan.addFamily(family);</span>
<span class="source-line-no">4070</span><span id="line-4070">    try (RegionScanner scanner = r.getScanner(scan)) {</span>
<span class="source-line-no">4071</span><span id="line-4071">      List&lt;Cell&gt; cells = new ArrayList&lt;&gt;(1);</span>
<span class="source-line-no">4072</span><span id="line-4072">      scanner.next(cells);</span>
<span class="source-line-no">4073</span><span id="line-4073">      if (r.getRegionInfo().isMetaRegion() &amp;&amp; !isTargetTable(row, cells.get(0))) {</span>
<span class="source-line-no">4074</span><span id="line-4074">        return null;</span>
<span class="source-line-no">4075</span><span id="line-4075">      }</span>
<span class="source-line-no">4076</span><span id="line-4076">      return Result.create(cells);</span>
<span class="source-line-no">4077</span><span id="line-4077">    }</span>
<span class="source-line-no">4078</span><span id="line-4078">  }</span>
<span class="source-line-no">4079</span><span id="line-4079"></span>
<span class="source-line-no">4080</span><span id="line-4080">  private boolean isTargetTable(final byte[] inRow, Cell c) {</span>
<span class="source-line-no">4081</span><span id="line-4081">    String inputRowString = Bytes.toString(inRow);</span>
<span class="source-line-no">4082</span><span id="line-4082">    int i = inputRowString.indexOf(HConstants.DELIMITER);</span>
<span class="source-line-no">4083</span><span id="line-4083">    String outputRowString = Bytes.toString(c.getRowArray(), c.getRowOffset(), c.getRowLength());</span>
<span class="source-line-no">4084</span><span id="line-4084">    int o = outputRowString.indexOf(HConstants.DELIMITER);</span>
<span class="source-line-no">4085</span><span id="line-4085">    return inputRowString.substring(0, i).equals(outputRowString.substring(0, o));</span>
<span class="source-line-no">4086</span><span id="line-4086">  }</span>
<span class="source-line-no">4087</span><span id="line-4087"></span>
<span class="source-line-no">4088</span><span id="line-4088">  /**</span>
<span class="source-line-no">4089</span><span id="line-4089">   * Sets up {@link MiniKdc} for testing security. Uses {@link HBaseKerberosUtils} to set the given</span>
<span class="source-line-no">4090</span><span id="line-4090">   * keytab file as {@link HBaseKerberosUtils#KRB_KEYTAB_FILE}. FYI, there is also the easier-to-use</span>
<span class="source-line-no">4091</span><span id="line-4091">   * kerby KDC server and utility for using it,</span>
<span class="source-line-no">4092</span><span id="line-4092">   * {@link org.apache.hadoop.hbase.util.SimpleKdcServerUtil}. The kerby KDC server is preferred;</span>
<span class="source-line-no">4093</span><span id="line-4093">   * less baggage. It came in in HBASE-5291.</span>
<span class="source-line-no">4094</span><span id="line-4094">   */</span>
<span class="source-line-no">4095</span><span id="line-4095">  public MiniKdc setupMiniKdc(File keytabFile) throws Exception {</span>
<span class="source-line-no">4096</span><span id="line-4096">    Properties conf = MiniKdc.createConf();</span>
<span class="source-line-no">4097</span><span id="line-4097">    conf.put(MiniKdc.DEBUG, true);</span>
<span class="source-line-no">4098</span><span id="line-4098">    MiniKdc kdc = null;</span>
<span class="source-line-no">4099</span><span id="line-4099">    File dir = null;</span>
<span class="source-line-no">4100</span><span id="line-4100">    // There is time lag between selecting a port and trying to bind with it. It's possible that</span>
<span class="source-line-no">4101</span><span id="line-4101">    // another service captures the port in between which'll result in BindException.</span>
<span class="source-line-no">4102</span><span id="line-4102">    boolean bindException;</span>
<span class="source-line-no">4103</span><span id="line-4103">    int numTries = 0;</span>
<span class="source-line-no">4104</span><span id="line-4104">    do {</span>
<span class="source-line-no">4105</span><span id="line-4105">      try {</span>
<span class="source-line-no">4106</span><span id="line-4106">        bindException = false;</span>
<span class="source-line-no">4107</span><span id="line-4107">        dir = new File(getDataTestDir("kdc").toUri().getPath());</span>
<span class="source-line-no">4108</span><span id="line-4108">        kdc = new MiniKdc(conf, dir);</span>
<span class="source-line-no">4109</span><span id="line-4109">        kdc.start();</span>
<span class="source-line-no">4110</span><span id="line-4110">      } catch (BindException e) {</span>
<span class="source-line-no">4111</span><span id="line-4111">        FileUtils.deleteDirectory(dir); // clean directory</span>
<span class="source-line-no">4112</span><span id="line-4112">        numTries++;</span>
<span class="source-line-no">4113</span><span id="line-4113">        if (numTries == 3) {</span>
<span class="source-line-no">4114</span><span id="line-4114">          LOG.error("Failed setting up MiniKDC. Tried " + numTries + " times.");</span>
<span class="source-line-no">4115</span><span id="line-4115">          throw e;</span>
<span class="source-line-no">4116</span><span id="line-4116">        }</span>
<span class="source-line-no">4117</span><span id="line-4117">        LOG.error("BindException encountered when setting up MiniKdc. Trying again.");</span>
<span class="source-line-no">4118</span><span id="line-4118">        bindException = true;</span>
<span class="source-line-no">4119</span><span id="line-4119">      }</span>
<span class="source-line-no">4120</span><span id="line-4120">    } while (bindException);</span>
<span class="source-line-no">4121</span><span id="line-4121">    HBaseKerberosUtils.setKeytabFileForTesting(keytabFile.getAbsolutePath());</span>
<span class="source-line-no">4122</span><span id="line-4122">    return kdc;</span>
<span class="source-line-no">4123</span><span id="line-4123">  }</span>
<span class="source-line-no">4124</span><span id="line-4124"></span>
<span class="source-line-no">4125</span><span id="line-4125">  public int getNumHFiles(final TableName tableName, final byte[] family) {</span>
<span class="source-line-no">4126</span><span id="line-4126">    int numHFiles = 0;</span>
<span class="source-line-no">4127</span><span id="line-4127">    for (RegionServerThread regionServerThread : getMiniHBaseCluster().getRegionServerThreads()) {</span>
<span class="source-line-no">4128</span><span id="line-4128">      numHFiles += getNumHFilesForRS(regionServerThread.getRegionServer(), tableName, family);</span>
<span class="source-line-no">4129</span><span id="line-4129">    }</span>
<span class="source-line-no">4130</span><span id="line-4130">    return numHFiles;</span>
<span class="source-line-no">4131</span><span id="line-4131">  }</span>
<span class="source-line-no">4132</span><span id="line-4132"></span>
<span class="source-line-no">4133</span><span id="line-4133">  public int getNumHFilesForRS(final HRegionServer rs, final TableName tableName,</span>
<span class="source-line-no">4134</span><span id="line-4134">    final byte[] family) {</span>
<span class="source-line-no">4135</span><span id="line-4135">    int numHFiles = 0;</span>
<span class="source-line-no">4136</span><span id="line-4136">    for (Region region : rs.getRegions(tableName)) {</span>
<span class="source-line-no">4137</span><span id="line-4137">      numHFiles += region.getStore(family).getStorefilesCount();</span>
<span class="source-line-no">4138</span><span id="line-4138">    }</span>
<span class="source-line-no">4139</span><span id="line-4139">    return numHFiles;</span>
<span class="source-line-no">4140</span><span id="line-4140">  }</span>
<span class="source-line-no">4141</span><span id="line-4141"></span>
<span class="source-line-no">4142</span><span id="line-4142">  private void assertEquals(String message, int expected, int actual) {</span>
<span class="source-line-no">4143</span><span id="line-4143">    if (expected == actual) {</span>
<span class="source-line-no">4144</span><span id="line-4144">      return;</span>
<span class="source-line-no">4145</span><span id="line-4145">    }</span>
<span class="source-line-no">4146</span><span id="line-4146">    String formatted = "";</span>
<span class="source-line-no">4147</span><span id="line-4147">    if (message != null &amp;&amp; !"".equals(message)) {</span>
<span class="source-line-no">4148</span><span id="line-4148">      formatted = message + " ";</span>
<span class="source-line-no">4149</span><span id="line-4149">    }</span>
<span class="source-line-no">4150</span><span id="line-4150">    throw new AssertionError(formatted + "expected:&lt;" + expected + "&gt; but was:&lt;" + actual + "&gt;");</span>
<span class="source-line-no">4151</span><span id="line-4151">  }</span>
<span class="source-line-no">4152</span><span id="line-4152"></span>
<span class="source-line-no">4153</span><span id="line-4153">  public void verifyTableDescriptorIgnoreTableName(TableDescriptor ltd, TableDescriptor rtd) {</span>
<span class="source-line-no">4154</span><span id="line-4154">    if (ltd.getValues().hashCode() != rtd.getValues().hashCode()) {</span>
<span class="source-line-no">4155</span><span id="line-4155">      throw new AssertionError();</span>
<span class="source-line-no">4156</span><span id="line-4156">    }</span>
<span class="source-line-no">4157</span><span id="line-4157">    assertEquals("", ltd.getValues().hashCode(), rtd.getValues().hashCode());</span>
<span class="source-line-no">4158</span><span id="line-4158">    Collection&lt;ColumnFamilyDescriptor&gt; ltdFamilies = Arrays.asList(ltd.getColumnFamilies());</span>
<span class="source-line-no">4159</span><span id="line-4159">    Collection&lt;ColumnFamilyDescriptor&gt; rtdFamilies = Arrays.asList(rtd.getColumnFamilies());</span>
<span class="source-line-no">4160</span><span id="line-4160">    assertEquals("", ltdFamilies.size(), rtdFamilies.size());</span>
<span class="source-line-no">4161</span><span id="line-4161">    for (Iterator&lt;ColumnFamilyDescriptor&gt; it = ltdFamilies.iterator(),</span>
<span class="source-line-no">4162</span><span id="line-4162">        it2 = rtdFamilies.iterator(); it.hasNext();) {</span>
<span class="source-line-no">4163</span><span id="line-4163">      assertEquals("", 0, ColumnFamilyDescriptor.COMPARATOR.compare(it.next(), it2.next()));</span>
<span class="source-line-no">4164</span><span id="line-4164">    }</span>
<span class="source-line-no">4165</span><span id="line-4165">  }</span>
<span class="source-line-no">4166</span><span id="line-4166"></span>
<span class="source-line-no">4167</span><span id="line-4167">  /**</span>
<span class="source-line-no">4168</span><span id="line-4168">   * Await the successful return of {@code condition}, sleeping {@code sleepMillis} between</span>
<span class="source-line-no">4169</span><span id="line-4169">   * invocations.</span>
<span class="source-line-no">4170</span><span id="line-4170">   */</span>
<span class="source-line-no">4171</span><span id="line-4171">  public static void await(final long sleepMillis, final BooleanSupplier condition)</span>
<span class="source-line-no">4172</span><span id="line-4172">    throws InterruptedException {</span>
<span class="source-line-no">4173</span><span id="line-4173">    try {</span>
<span class="source-line-no">4174</span><span id="line-4174">      while (!condition.getAsBoolean()) {</span>
<span class="source-line-no">4175</span><span id="line-4175">        Thread.sleep(sleepMillis);</span>
<span class="source-line-no">4176</span><span id="line-4176">      }</span>
<span class="source-line-no">4177</span><span id="line-4177">    } catch (RuntimeException e) {</span>
<span class="source-line-no">4178</span><span id="line-4178">      if (e.getCause() instanceof AssertionError) {</span>
<span class="source-line-no">4179</span><span id="line-4179">        throw (AssertionError) e.getCause();</span>
<span class="source-line-no">4180</span><span id="line-4180">      }</span>
<span class="source-line-no">4181</span><span id="line-4181">      throw e;</span>
<span class="source-line-no">4182</span><span id="line-4182">    }</span>
<span class="source-line-no">4183</span><span id="line-4183">  }</span>
<span class="source-line-no">4184</span><span id="line-4184">}</span>




























































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