<!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: IntegrationTestDDLMasterFailover, class: TableAction">
<meta name="generator" content="javadoc/SourceToHTMLConverter">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body class="source-page">
<main role="main">
<div class="source-container">
<pre><span class="source-line-no">001</span><span id="line-1">/*</span>
<span class="source-line-no">002</span><span id="line-2"> * Licensed to the Apache Software Foundation (ASF) under one</span>
<span class="source-line-no">003</span><span id="line-3"> * or more contributor license agreements.  See the NOTICE file</span>
<span class="source-line-no">004</span><span id="line-4"> * distributed with this work for additional information</span>
<span class="source-line-no">005</span><span id="line-5"> * regarding copyright ownership.  The ASF licenses this file</span>
<span class="source-line-no">006</span><span id="line-6"> * to you under the Apache License, Version 2.0 (the</span>
<span class="source-line-no">007</span><span id="line-7"> * "License"); you may not use this file except in compliance</span>
<span class="source-line-no">008</span><span id="line-8"> * with the License.  You may obtain a copy of the License at</span>
<span class="source-line-no">009</span><span id="line-9"> *</span>
<span class="source-line-no">010</span><span id="line-10"> *     http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="source-line-no">011</span><span id="line-11"> *</span>
<span class="source-line-no">012</span><span id="line-12"> * Unless required by applicable law or agreed to in writing, software</span>
<span class="source-line-no">013</span><span id="line-13"> * distributed under the License is distributed on an "AS IS" BASIS,</span>
<span class="source-line-no">014</span><span id="line-14"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="source-line-no">015</span><span id="line-15"> * See the License for the specific language governing permissions and</span>
<span class="source-line-no">016</span><span id="line-16"> * limitations under the License.</span>
<span class="source-line-no">017</span><span id="line-17"> */</span>
<span class="source-line-no">018</span><span id="line-18">package org.apache.hadoop.hbase;</span>
<span class="source-line-no">019</span><span id="line-19"></span>
<span class="source-line-no">020</span><span id="line-20">import java.io.IOException;</span>
<span class="source-line-no">021</span><span id="line-21">import java.util.ArrayList;</span>
<span class="source-line-no">022</span><span id="line-22">import java.util.List;</span>
<span class="source-line-no">023</span><span id="line-23">import java.util.Set;</span>
<span class="source-line-no">024</span><span id="line-24">import java.util.concurrent.ConcurrentHashMap;</span>
<span class="source-line-no">025</span><span id="line-25">import java.util.concurrent.ThreadLocalRandom;</span>
<span class="source-line-no">026</span><span id="line-26">import java.util.concurrent.atomic.AtomicBoolean;</span>
<span class="source-line-no">027</span><span id="line-27">import java.util.regex.Pattern;</span>
<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.conf.Configuration;</span>
<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.client.Admin;</span>
<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;</span>
<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;</span>
<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.client.Connection;</span>
<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.client.ConnectionFactory;</span>
<span class="source-line-no">034</span><span id="line-34">import org.apache.hadoop.hbase.client.Put;</span>
<span class="source-line-no">035</span><span id="line-35">import org.apache.hadoop.hbase.client.RegionInfo;</span>
<span class="source-line-no">036</span><span id="line-36">import org.apache.hadoop.hbase.client.Table;</span>
<span class="source-line-no">037</span><span id="line-37">import org.apache.hadoop.hbase.client.TableDescriptor;</span>
<span class="source-line-no">038</span><span id="line-38">import org.apache.hadoop.hbase.client.TableDescriptorBuilder;</span>
<span class="source-line-no">039</span><span id="line-39">import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;</span>
<span class="source-line-no">040</span><span id="line-40">import org.apache.hadoop.hbase.log.HBaseMarkers;</span>
<span class="source-line-no">041</span><span id="line-41">import org.apache.hadoop.hbase.testclassification.IntegrationTests;</span>
<span class="source-line-no">042</span><span id="line-42">import org.apache.hadoop.hbase.util.Bytes;</span>
<span class="source-line-no">043</span><span id="line-43">import org.apache.hadoop.hbase.util.HBaseFsck;</span>
<span class="source-line-no">044</span><span id="line-44">import org.apache.hadoop.hbase.util.Threads;</span>
<span class="source-line-no">045</span><span id="line-45">import org.apache.hadoop.hbase.util.hbck.HbckTestingUtil;</span>
<span class="source-line-no">046</span><span id="line-46">import org.apache.hadoop.util.ToolRunner;</span>
<span class="source-line-no">047</span><span id="line-47">import org.junit.Assert;</span>
<span class="source-line-no">048</span><span id="line-48">import org.junit.Test;</span>
<span class="source-line-no">049</span><span id="line-49">import org.junit.experimental.categories.Category;</span>
<span class="source-line-no">050</span><span id="line-50">import org.slf4j.Logger;</span>
<span class="source-line-no">051</span><span id="line-51">import org.slf4j.LoggerFactory;</span>
<span class="source-line-no">052</span><span id="line-52"></span>
<span class="source-line-no">053</span><span id="line-53">/**</span>
<span class="source-line-no">054</span><span id="line-54"> * Integration test that verifies Procedure V2. DDL operations should go through (rollforward or</span>
<span class="source-line-no">055</span><span id="line-55"> * rollback) when primary master is killed by ChaosMonkey (default MASTER_KILLING).</span>
<span class="source-line-no">056</span><span id="line-56"> * &lt;p&gt;</span>
<span class="source-line-no">057</span><span id="line-57"> * &lt;/p&gt;</span>
<span class="source-line-no">058</span><span id="line-58"> * Multiple Worker threads are started to randomly do the following Actions in loops: Actions</span>
<span class="source-line-no">059</span><span id="line-59"> * generating and populating tables:</span>
<span class="source-line-no">060</span><span id="line-60"> * &lt;ul&gt;</span>
<span class="source-line-no">061</span><span id="line-61"> * &lt;li&gt;CreateTableAction&lt;/li&gt;</span>
<span class="source-line-no">062</span><span id="line-62"> * &lt;li&gt;DisableTableAction&lt;/li&gt;</span>
<span class="source-line-no">063</span><span id="line-63"> * &lt;li&gt;EnableTableAction&lt;/li&gt;</span>
<span class="source-line-no">064</span><span id="line-64"> * &lt;li&gt;DeleteTableAction&lt;/li&gt;</span>
<span class="source-line-no">065</span><span id="line-65"> * &lt;li&gt;AddRowAction&lt;/li&gt;</span>
<span class="source-line-no">066</span><span id="line-66"> * &lt;/ul&gt;</span>
<span class="source-line-no">067</span><span id="line-67"> * Actions performing column family DDL operations:</span>
<span class="source-line-no">068</span><span id="line-68"> * &lt;ul&gt;</span>
<span class="source-line-no">069</span><span id="line-69"> * &lt;li&gt;AddColumnFamilyAction&lt;/li&gt;</span>
<span class="source-line-no">070</span><span id="line-70"> * &lt;li&gt;AlterColumnFamilyVersionsAction&lt;/li&gt;</span>
<span class="source-line-no">071</span><span id="line-71"> * &lt;li&gt;AlterColumnFamilyEncodingAction&lt;/li&gt;</span>
<span class="source-line-no">072</span><span id="line-72"> * &lt;li&gt;DeleteColumnFamilyAction&lt;/li&gt;</span>
<span class="source-line-no">073</span><span id="line-73"> * &lt;/ul&gt;</span>
<span class="source-line-no">074</span><span id="line-74"> * Actions performing namespace DDL operations:</span>
<span class="source-line-no">075</span><span id="line-75"> * &lt;ul&gt;</span>
<span class="source-line-no">076</span><span id="line-76"> * &lt;li&gt;AddNamespaceAction&lt;/li&gt;</span>
<span class="source-line-no">077</span><span id="line-77"> * &lt;li&gt;AlterNamespaceAction&lt;/li&gt;</span>
<span class="source-line-no">078</span><span id="line-78"> * &lt;li&gt;DeleteNamespaceAction&lt;/li&gt;</span>
<span class="source-line-no">079</span><span id="line-79"> * &lt;/ul&gt;</span>
<span class="source-line-no">080</span><span id="line-80"> * &lt;br/&gt;</span>
<span class="source-line-no">081</span><span id="line-81"> * The threads run for a period of time (default 20 minutes) then are stopped at the end of runtime.</span>
<span class="source-line-no">082</span><span id="line-82"> * Verification is performed towards those checkpoints:</span>
<span class="source-line-no">083</span><span id="line-83"> * &lt;ol&gt;</span>
<span class="source-line-no">084</span><span id="line-84"> * &lt;li&gt;No Actions throw Exceptions.&lt;/li&gt;</span>
<span class="source-line-no">085</span><span id="line-85"> * &lt;li&gt;No inconsistencies are detected in hbck.&lt;/li&gt;</span>
<span class="source-line-no">086</span><span id="line-86"> * &lt;/ol&gt;</span>
<span class="source-line-no">087</span><span id="line-87"> * &lt;p&gt;</span>
<span class="source-line-no">088</span><span id="line-88"> * This test should be run by the hbase user since it invokes hbck at the end</span>
<span class="source-line-no">089</span><span id="line-89"> * &lt;/p&gt;</span>
<span class="source-line-no">090</span><span id="line-90"> * &lt;p&gt;</span>
<span class="source-line-no">091</span><span id="line-91"> * Usage: hbase org.apache.hadoop.hbase.IntegrationTestDDLMasterFailover</span>
<span class="source-line-no">092</span><span id="line-92"> * -Dhbase.IntegrationTestDDLMasterFailover.runtime=1200000</span>
<span class="source-line-no">093</span><span id="line-93"> * -Dhbase.IntegrationTestDDLMasterFailover.numThreads=20</span>
<span class="source-line-no">094</span><span id="line-94"> * -Dhbase.IntegrationTestDDLMasterFailover.numRegions=50 --monkey masterKilling</span>
<span class="source-line-no">095</span><span id="line-95"> */</span>
<span class="source-line-no">096</span><span id="line-96"></span>
<span class="source-line-no">097</span><span id="line-97">@Category(IntegrationTests.class)</span>
<span class="source-line-no">098</span><span id="line-98">public class IntegrationTestDDLMasterFailover extends IntegrationTestBase {</span>
<span class="source-line-no">099</span><span id="line-99"></span>
<span class="source-line-no">100</span><span id="line-100">  private static final Logger LOG = LoggerFactory.getLogger(IntegrationTestDDLMasterFailover.class);</span>
<span class="source-line-no">101</span><span id="line-101"></span>
<span class="source-line-no">102</span><span id="line-102">  private static final int SERVER_COUNT = 1; // number of slaves for the smallest cluster</span>
<span class="source-line-no">103</span><span id="line-103"></span>
<span class="source-line-no">104</span><span id="line-104">  protected static final long DEFAULT_RUN_TIME = 20 * 60 * 1000;</span>
<span class="source-line-no">105</span><span id="line-105"></span>
<span class="source-line-no">106</span><span id="line-106">  protected static final int DEFAULT_NUM_THREADS = 20;</span>
<span class="source-line-no">107</span><span id="line-107"></span>
<span class="source-line-no">108</span><span id="line-108">  protected static final int DEFAULT_NUM_REGIONS = 50; // number of regions in pre-split tables</span>
<span class="source-line-no">109</span><span id="line-109"></span>
<span class="source-line-no">110</span><span id="line-110">  private boolean keepObjectsAtTheEnd = false;</span>
<span class="source-line-no">111</span><span id="line-111">  protected HBaseClusterInterface cluster;</span>
<span class="source-line-no">112</span><span id="line-112"></span>
<span class="source-line-no">113</span><span id="line-113">  protected Connection connection;</span>
<span class="source-line-no">114</span><span id="line-114"></span>
<span class="source-line-no">115</span><span id="line-115">  /**</span>
<span class="source-line-no">116</span><span id="line-116">   * A soft limit on how long we should run</span>
<span class="source-line-no">117</span><span id="line-117">   */</span>
<span class="source-line-no">118</span><span id="line-118">  protected static final String RUN_TIME_KEY = "hbase.%s.runtime";</span>
<span class="source-line-no">119</span><span id="line-119">  protected static final String NUM_THREADS_KEY = "hbase.%s.numThreads";</span>
<span class="source-line-no">120</span><span id="line-120">  protected static final String NUM_REGIONS_KEY = "hbase.%s.numRegions";</span>
<span class="source-line-no">121</span><span id="line-121"></span>
<span class="source-line-no">122</span><span id="line-122">  protected AtomicBoolean running = new AtomicBoolean(true);</span>
<span class="source-line-no">123</span><span id="line-123"></span>
<span class="source-line-no">124</span><span id="line-124">  protected AtomicBoolean create_table = new AtomicBoolean(true);</span>
<span class="source-line-no">125</span><span id="line-125"></span>
<span class="source-line-no">126</span><span id="line-126">  protected int numThreads, numRegions;</span>
<span class="source-line-no">127</span><span id="line-127"></span>
<span class="source-line-no">128</span><span id="line-128">  ConcurrentHashMap&lt;String, NamespaceDescriptor&gt; namespaceMap = new ConcurrentHashMap&lt;&gt;();</span>
<span class="source-line-no">129</span><span id="line-129"></span>
<span class="source-line-no">130</span><span id="line-130">  ConcurrentHashMap&lt;TableName, TableDescriptor&gt; enabledTables = new ConcurrentHashMap&lt;&gt;();</span>
<span class="source-line-no">131</span><span id="line-131"></span>
<span class="source-line-no">132</span><span id="line-132">  ConcurrentHashMap&lt;TableName, TableDescriptor&gt; disabledTables = new ConcurrentHashMap&lt;&gt;();</span>
<span class="source-line-no">133</span><span id="line-133"></span>
<span class="source-line-no">134</span><span id="line-134">  ConcurrentHashMap&lt;TableName, TableDescriptor&gt; deletedTables = new ConcurrentHashMap&lt;&gt;();</span>
<span class="source-line-no">135</span><span id="line-135"></span>
<span class="source-line-no">136</span><span id="line-136">  @Override</span>
<span class="source-line-no">137</span><span id="line-137">  public void setUpCluster() throws Exception {</span>
<span class="source-line-no">138</span><span id="line-138">    util = getTestingUtil(getConf());</span>
<span class="source-line-no">139</span><span id="line-139">    LOG.debug("Initializing/checking cluster has " + SERVER_COUNT + " servers");</span>
<span class="source-line-no">140</span><span id="line-140">    util.initializeCluster(getMinServerCount());</span>
<span class="source-line-no">141</span><span id="line-141">    LOG.debug("Done initializing/checking cluster");</span>
<span class="source-line-no">142</span><span id="line-142">    cluster = util.getHBaseClusterInterface();</span>
<span class="source-line-no">143</span><span id="line-143">  }</span>
<span class="source-line-no">144</span><span id="line-144"></span>
<span class="source-line-no">145</span><span id="line-145">  @Override</span>
<span class="source-line-no">146</span><span id="line-146">  public void cleanUpCluster() throws Exception {</span>
<span class="source-line-no">147</span><span id="line-147">    if (!keepObjectsAtTheEnd) {</span>
<span class="source-line-no">148</span><span id="line-148">      Admin admin = util.getAdmin();</span>
<span class="source-line-no">149</span><span id="line-149">      for (TableName tableName : admin.listTableNames(Pattern.compile("ittable-\\d+"))) {</span>
<span class="source-line-no">150</span><span id="line-150">        admin.disableTable(tableName);</span>
<span class="source-line-no">151</span><span id="line-151">        admin.deleteTable(tableName);</span>
<span class="source-line-no">152</span><span id="line-152">      }</span>
<span class="source-line-no">153</span><span id="line-153">      NamespaceDescriptor[] nsds = admin.listNamespaceDescriptors();</span>
<span class="source-line-no">154</span><span id="line-154">      for (NamespaceDescriptor nsd : nsds) {</span>
<span class="source-line-no">155</span><span id="line-155">        if (nsd.getName().matches("itnamespace\\d+")) {</span>
<span class="source-line-no">156</span><span id="line-156">          LOG.info("Removing namespace=" + nsd.getName());</span>
<span class="source-line-no">157</span><span id="line-157">          admin.deleteNamespace(nsd.getName());</span>
<span class="source-line-no">158</span><span id="line-158">        }</span>
<span class="source-line-no">159</span><span id="line-159">      }</span>
<span class="source-line-no">160</span><span id="line-160">    }</span>
<span class="source-line-no">161</span><span id="line-161"></span>
<span class="source-line-no">162</span><span id="line-162">    enabledTables.clear();</span>
<span class="source-line-no">163</span><span id="line-163">    disabledTables.clear();</span>
<span class="source-line-no">164</span><span id="line-164">    deletedTables.clear();</span>
<span class="source-line-no">165</span><span id="line-165">    namespaceMap.clear();</span>
<span class="source-line-no">166</span><span id="line-166"></span>
<span class="source-line-no">167</span><span id="line-167">    Connection connection = getConnection();</span>
<span class="source-line-no">168</span><span id="line-168">    connection.close();</span>
<span class="source-line-no">169</span><span id="line-169">    super.cleanUpCluster();</span>
<span class="source-line-no">170</span><span id="line-170">  }</span>
<span class="source-line-no">171</span><span id="line-171"></span>
<span class="source-line-no">172</span><span id="line-172">  protected int getMinServerCount() {</span>
<span class="source-line-no">173</span><span id="line-173">    return SERVER_COUNT;</span>
<span class="source-line-no">174</span><span id="line-174">  }</span>
<span class="source-line-no">175</span><span id="line-175"></span>
<span class="source-line-no">176</span><span id="line-176">  protected synchronized void setConnection(Connection connection) {</span>
<span class="source-line-no">177</span><span id="line-177">    this.connection = connection;</span>
<span class="source-line-no">178</span><span id="line-178">  }</span>
<span class="source-line-no">179</span><span id="line-179"></span>
<span class="source-line-no">180</span><span id="line-180">  protected synchronized Connection getConnection() {</span>
<span class="source-line-no">181</span><span id="line-181">    if (this.connection == null) {</span>
<span class="source-line-no">182</span><span id="line-182">      try {</span>
<span class="source-line-no">183</span><span id="line-183">        Connection connection = ConnectionFactory.createConnection(getConf());</span>
<span class="source-line-no">184</span><span id="line-184">        setConnection(connection);</span>
<span class="source-line-no">185</span><span id="line-185">      } catch (IOException e) {</span>
<span class="source-line-no">186</span><span id="line-186">        LOG.error(HBaseMarkers.FATAL, "Failed to establish connection.", e);</span>
<span class="source-line-no">187</span><span id="line-187">      }</span>
<span class="source-line-no">188</span><span id="line-188">    }</span>
<span class="source-line-no">189</span><span id="line-189">    return connection;</span>
<span class="source-line-no">190</span><span id="line-190">  }</span>
<span class="source-line-no">191</span><span id="line-191"></span>
<span class="source-line-no">192</span><span id="line-192">  protected void verifyNamespaces() throws IOException {</span>
<span class="source-line-no">193</span><span id="line-193">    Connection connection = getConnection();</span>
<span class="source-line-no">194</span><span id="line-194">    Admin admin = connection.getAdmin();</span>
<span class="source-line-no">195</span><span id="line-195">    // iterating concurrent map</span>
<span class="source-line-no">196</span><span id="line-196">    for (String nsName : namespaceMap.keySet()) {</span>
<span class="source-line-no">197</span><span id="line-197">      try {</span>
<span class="source-line-no">198</span><span id="line-198">        Assert.assertTrue("Namespace: " + nsName + " in namespaceMap does not exist",</span>
<span class="source-line-no">199</span><span id="line-199">          admin.getNamespaceDescriptor(nsName) != null);</span>
<span class="source-line-no">200</span><span id="line-200">      } catch (NamespaceNotFoundException nsnfe) {</span>
<span class="source-line-no">201</span><span id="line-201">        Assert</span>
<span class="source-line-no">202</span><span id="line-202">          .fail("Namespace: " + nsName + " in namespaceMap does not exist: " + nsnfe.getMessage());</span>
<span class="source-line-no">203</span><span id="line-203">      }</span>
<span class="source-line-no">204</span><span id="line-204">    }</span>
<span class="source-line-no">205</span><span id="line-205">    admin.close();</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">  protected void verifyTables() throws IOException {</span>
<span class="source-line-no">209</span><span id="line-209">    Connection connection = getConnection();</span>
<span class="source-line-no">210</span><span id="line-210">    Admin admin = connection.getAdmin();</span>
<span class="source-line-no">211</span><span id="line-211">    // iterating concurrent map</span>
<span class="source-line-no">212</span><span id="line-212">    for (TableName tableName : enabledTables.keySet()) {</span>
<span class="source-line-no">213</span><span id="line-213">      Assert.assertTrue("Table: " + tableName + " in enabledTables is not enabled",</span>
<span class="source-line-no">214</span><span id="line-214">        admin.isTableEnabled(tableName));</span>
<span class="source-line-no">215</span><span id="line-215">    }</span>
<span class="source-line-no">216</span><span id="line-216">    for (TableName tableName : disabledTables.keySet()) {</span>
<span class="source-line-no">217</span><span id="line-217">      Assert.assertTrue("Table: " + tableName + " in disabledTables is not disabled",</span>
<span class="source-line-no">218</span><span id="line-218">        admin.isTableDisabled(tableName));</span>
<span class="source-line-no">219</span><span id="line-219">    }</span>
<span class="source-line-no">220</span><span id="line-220">    for (TableName tableName : deletedTables.keySet()) {</span>
<span class="source-line-no">221</span><span id="line-221">      Assert.assertFalse("Table: " + tableName + " in deletedTables is not deleted",</span>
<span class="source-line-no">222</span><span id="line-222">        admin.tableExists(tableName));</span>
<span class="source-line-no">223</span><span id="line-223">    }</span>
<span class="source-line-no">224</span><span id="line-224">    admin.close();</span>
<span class="source-line-no">225</span><span id="line-225">  }</span>
<span class="source-line-no">226</span><span id="line-226"></span>
<span class="source-line-no">227</span><span id="line-227">  @Test</span>
<span class="source-line-no">228</span><span id="line-228">  public void testAsUnitTest() throws Exception {</span>
<span class="source-line-no">229</span><span id="line-229">    runTest();</span>
<span class="source-line-no">230</span><span id="line-230">  }</span>
<span class="source-line-no">231</span><span id="line-231"></span>
<span class="source-line-no">232</span><span id="line-232">  @Override</span>
<span class="source-line-no">233</span><span id="line-233">  public int runTestFromCommandLine() throws Exception {</span>
<span class="source-line-no">234</span><span id="line-234">    int ret = runTest();</span>
<span class="source-line-no">235</span><span id="line-235">    return ret;</span>
<span class="source-line-no">236</span><span id="line-236">  }</span>
<span class="source-line-no">237</span><span id="line-237"></span>
<span class="source-line-no">238</span><span id="line-238">  private abstract class MasterAction {</span>
<span class="source-line-no">239</span><span id="line-239">    Connection connection = getConnection();</span>
<span class="source-line-no">240</span><span id="line-240"></span>
<span class="source-line-no">241</span><span id="line-241">    abstract void perform() throws IOException;</span>
<span class="source-line-no">242</span><span id="line-242">  }</span>
<span class="source-line-no">243</span><span id="line-243"></span>
<span class="source-line-no">244</span><span id="line-244">  private abstract class NamespaceAction extends MasterAction {</span>
<span class="source-line-no">245</span><span id="line-245">    final String nsTestConfigKey = "hbase.namespace.testKey";</span>
<span class="source-line-no">246</span><span id="line-246"></span>
<span class="source-line-no">247</span><span id="line-247">    // NamespaceAction has implemented selectNamespace() shared by multiple namespace Actions</span>
<span class="source-line-no">248</span><span id="line-248">    protected NamespaceDescriptor</span>
<span class="source-line-no">249</span><span id="line-249">      selectNamespace(ConcurrentHashMap&lt;String, NamespaceDescriptor&gt; namespaceMap) {</span>
<span class="source-line-no">250</span><span id="line-250">      // synchronization to prevent removal from multiple threads</span>
<span class="source-line-no">251</span><span id="line-251">      synchronized (namespaceMap) {</span>
<span class="source-line-no">252</span><span id="line-252">        // randomly select namespace from namespaceMap</span>
<span class="source-line-no">253</span><span id="line-253">        if (namespaceMap.isEmpty()) {</span>
<span class="source-line-no">254</span><span id="line-254">          return null;</span>
<span class="source-line-no">255</span><span id="line-255">        }</span>
<span class="source-line-no">256</span><span id="line-256">        ArrayList&lt;String&gt; namespaceList = new ArrayList&lt;&gt;(namespaceMap.keySet());</span>
<span class="source-line-no">257</span><span id="line-257">        String randomKey =</span>
<span class="source-line-no">258</span><span id="line-258">          namespaceList.get(ThreadLocalRandom.current().nextInt(namespaceList.size()));</span>
<span class="source-line-no">259</span><span id="line-259">        NamespaceDescriptor randomNsd = namespaceMap.get(randomKey);</span>
<span class="source-line-no">260</span><span id="line-260">        // remove from namespaceMap</span>
<span class="source-line-no">261</span><span id="line-261">        namespaceMap.remove(randomKey);</span>
<span class="source-line-no">262</span><span id="line-262">        return randomNsd;</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">  }</span>
<span class="source-line-no">266</span><span id="line-266"></span>
<span class="source-line-no">267</span><span id="line-267">  private class CreateNamespaceAction extends NamespaceAction {</span>
<span class="source-line-no">268</span><span id="line-268">    @Override</span>
<span class="source-line-no">269</span><span id="line-269">    void perform() throws IOException {</span>
<span class="source-line-no">270</span><span id="line-270">      Admin admin = connection.getAdmin();</span>
<span class="source-line-no">271</span><span id="line-271">      try {</span>
<span class="source-line-no">272</span><span id="line-272">        NamespaceDescriptor nsd;</span>
<span class="source-line-no">273</span><span id="line-273">        while (true) {</span>
<span class="source-line-no">274</span><span id="line-274">          nsd = createNamespaceDesc();</span>
<span class="source-line-no">275</span><span id="line-275">          try {</span>
<span class="source-line-no">276</span><span id="line-276">            if (admin.getNamespaceDescriptor(nsd.getName()) != null) {</span>
<span class="source-line-no">277</span><span id="line-277">              // the namespace has already existed.</span>
<span class="source-line-no">278</span><span id="line-278">              continue;</span>
<span class="source-line-no">279</span><span id="line-279">            } else {</span>
<span class="source-line-no">280</span><span id="line-280">              // currently, the code never return null - always throws exception if</span>
<span class="source-line-no">281</span><span id="line-281">              // namespace is not found - this just a defensive programming to make</span>
<span class="source-line-no">282</span><span id="line-282">              // sure null situation is handled in case the method changes in the</span>
<span class="source-line-no">283</span><span id="line-283">              // future.</span>
<span class="source-line-no">284</span><span id="line-284">              break;</span>
<span class="source-line-no">285</span><span id="line-285">            }</span>
<span class="source-line-no">286</span><span id="line-286">          } catch (NamespaceNotFoundException nsnfe) {</span>
<span class="source-line-no">287</span><span id="line-287">            // This is expected for a random generated NamespaceDescriptor</span>
<span class="source-line-no">288</span><span id="line-288">            break;</span>
<span class="source-line-no">289</span><span id="line-289">          }</span>
<span class="source-line-no">290</span><span id="line-290">        }</span>
<span class="source-line-no">291</span><span id="line-291">        LOG.info("Creating namespace:" + nsd);</span>
<span class="source-line-no">292</span><span id="line-292">        admin.createNamespace(nsd);</span>
<span class="source-line-no">293</span><span id="line-293">        NamespaceDescriptor freshNamespaceDesc = admin.getNamespaceDescriptor(nsd.getName());</span>
<span class="source-line-no">294</span><span id="line-294">        Assert.assertTrue("Namespace: " + nsd + " was not created", freshNamespaceDesc != null);</span>
<span class="source-line-no">295</span><span id="line-295">        namespaceMap.put(nsd.getName(), freshNamespaceDesc);</span>
<span class="source-line-no">296</span><span id="line-296">        LOG.info("Created namespace:" + freshNamespaceDesc);</span>
<span class="source-line-no">297</span><span id="line-297">      } catch (Exception e) {</span>
<span class="source-line-no">298</span><span id="line-298">        LOG.warn("Caught exception in action: " + this.getClass());</span>
<span class="source-line-no">299</span><span id="line-299">        throw e;</span>
<span class="source-line-no">300</span><span id="line-300">      } finally {</span>
<span class="source-line-no">301</span><span id="line-301">        admin.close();</span>
<span class="source-line-no">302</span><span id="line-302">      }</span>
<span class="source-line-no">303</span><span id="line-303">    }</span>
<span class="source-line-no">304</span><span id="line-304"></span>
<span class="source-line-no">305</span><span id="line-305">    private NamespaceDescriptor createNamespaceDesc() {</span>
<span class="source-line-no">306</span><span id="line-306">      String namespaceName =</span>
<span class="source-line-no">307</span><span id="line-307">        "itnamespace" + String.format("%010d", ThreadLocalRandom.current().nextInt());</span>
<span class="source-line-no">308</span><span id="line-308">      NamespaceDescriptor nsd = NamespaceDescriptor.create(namespaceName).build();</span>
<span class="source-line-no">309</span><span id="line-309"></span>
<span class="source-line-no">310</span><span id="line-310">      nsd.setConfiguration(nsTestConfigKey,</span>
<span class="source-line-no">311</span><span id="line-311">        String.format("%010d", ThreadLocalRandom.current().nextInt()));</span>
<span class="source-line-no">312</span><span id="line-312">      return nsd;</span>
<span class="source-line-no">313</span><span id="line-313">    }</span>
<span class="source-line-no">314</span><span id="line-314">  }</span>
<span class="source-line-no">315</span><span id="line-315"></span>
<span class="source-line-no">316</span><span id="line-316">  private class ModifyNamespaceAction extends NamespaceAction {</span>
<span class="source-line-no">317</span><span id="line-317">    @Override</span>
<span class="source-line-no">318</span><span id="line-318">    void perform() throws IOException {</span>
<span class="source-line-no">319</span><span id="line-319">      NamespaceDescriptor selected = selectNamespace(namespaceMap);</span>
<span class="source-line-no">320</span><span id="line-320">      if (selected == null) {</span>
<span class="source-line-no">321</span><span id="line-321">        return;</span>
<span class="source-line-no">322</span><span id="line-322">      }</span>
<span class="source-line-no">323</span><span id="line-323"></span>
<span class="source-line-no">324</span><span id="line-324">      Admin admin = connection.getAdmin();</span>
<span class="source-line-no">325</span><span id="line-325">      try {</span>
<span class="source-line-no">326</span><span id="line-326">        String namespaceName = selected.getName();</span>
<span class="source-line-no">327</span><span id="line-327">        LOG.info("Modifying namespace :" + selected);</span>
<span class="source-line-no">328</span><span id="line-328">        NamespaceDescriptor modifiedNsd = NamespaceDescriptor.create(namespaceName).build();</span>
<span class="source-line-no">329</span><span id="line-329">        String nsValueNew;</span>
<span class="source-line-no">330</span><span id="line-330">        do {</span>
<span class="source-line-no">331</span><span id="line-331">          nsValueNew = String.format("%010d", ThreadLocalRandom.current().nextInt());</span>
<span class="source-line-no">332</span><span id="line-332">        } while (selected.getConfigurationValue(nsTestConfigKey).equals(nsValueNew));</span>
<span class="source-line-no">333</span><span id="line-333">        modifiedNsd.setConfiguration(nsTestConfigKey, nsValueNew);</span>
<span class="source-line-no">334</span><span id="line-334">        admin.modifyNamespace(modifiedNsd);</span>
<span class="source-line-no">335</span><span id="line-335">        NamespaceDescriptor freshNamespaceDesc = admin.getNamespaceDescriptor(namespaceName);</span>
<span class="source-line-no">336</span><span id="line-336">        Assert.assertTrue("Namespace: " + selected + " was not modified",</span>
<span class="source-line-no">337</span><span id="line-337">          freshNamespaceDesc.getConfigurationValue(nsTestConfigKey).equals(nsValueNew));</span>
<span class="source-line-no">338</span><span id="line-338">        Assert.assertTrue("Namespace: " + namespaceName + " does not exist",</span>
<span class="source-line-no">339</span><span id="line-339">          admin.getNamespaceDescriptor(namespaceName) != null);</span>
<span class="source-line-no">340</span><span id="line-340">        namespaceMap.put(namespaceName, freshNamespaceDesc);</span>
<span class="source-line-no">341</span><span id="line-341">        LOG.info("Modified namespace :" + freshNamespaceDesc);</span>
<span class="source-line-no">342</span><span id="line-342">      } catch (Exception e) {</span>
<span class="source-line-no">343</span><span id="line-343">        LOG.warn("Caught exception in action: " + this.getClass());</span>
<span class="source-line-no">344</span><span id="line-344">        throw e;</span>
<span class="source-line-no">345</span><span id="line-345">      } finally {</span>
<span class="source-line-no">346</span><span id="line-346">        admin.close();</span>
<span class="source-line-no">347</span><span id="line-347">      }</span>
<span class="source-line-no">348</span><span id="line-348">    }</span>
<span class="source-line-no">349</span><span id="line-349">  }</span>
<span class="source-line-no">350</span><span id="line-350"></span>
<span class="source-line-no">351</span><span id="line-351">  private class DeleteNamespaceAction extends NamespaceAction {</span>
<span class="source-line-no">352</span><span id="line-352">    @Override</span>
<span class="source-line-no">353</span><span id="line-353">    void perform() throws IOException {</span>
<span class="source-line-no">354</span><span id="line-354">      NamespaceDescriptor selected = selectNamespace(namespaceMap);</span>
<span class="source-line-no">355</span><span id="line-355">      if (selected == null) {</span>
<span class="source-line-no">356</span><span id="line-356">        return;</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">      Admin admin = connection.getAdmin();</span>
<span class="source-line-no">360</span><span id="line-360">      try {</span>
<span class="source-line-no">361</span><span id="line-361">        String namespaceName = selected.getName();</span>
<span class="source-line-no">362</span><span id="line-362">        LOG.info("Deleting namespace :" + selected);</span>
<span class="source-line-no">363</span><span id="line-363">        admin.deleteNamespace(namespaceName);</span>
<span class="source-line-no">364</span><span id="line-364">        try {</span>
<span class="source-line-no">365</span><span id="line-365">          if (admin.getNamespaceDescriptor(namespaceName) != null) {</span>
<span class="source-line-no">366</span><span id="line-366">            // the namespace still exists.</span>
<span class="source-line-no">367</span><span id="line-367">            Assert.assertTrue("Namespace: " + selected + " was not deleted", false);</span>
<span class="source-line-no">368</span><span id="line-368">          } else {</span>
<span class="source-line-no">369</span><span id="line-369">            LOG.info("Deleted namespace :" + selected);</span>
<span class="source-line-no">370</span><span id="line-370">          }</span>
<span class="source-line-no">371</span><span id="line-371">        } catch (NamespaceNotFoundException nsnfe) {</span>
<span class="source-line-no">372</span><span id="line-372">          // This is expected result</span>
<span class="source-line-no">373</span><span id="line-373">          LOG.info("Deleted namespace :" + selected);</span>
<span class="source-line-no">374</span><span id="line-374">        }</span>
<span class="source-line-no">375</span><span id="line-375">      } catch (Exception e) {</span>
<span class="source-line-no">376</span><span id="line-376">        LOG.warn("Caught exception in action: " + this.getClass());</span>
<span class="source-line-no">377</span><span id="line-377">        throw e;</span>
<span class="source-line-no">378</span><span id="line-378">      } finally {</span>
<span class="source-line-no">379</span><span id="line-379">        admin.close();</span>
<span class="source-line-no">380</span><span id="line-380">      }</span>
<span class="source-line-no">381</span><span id="line-381">    }</span>
<span class="source-line-no">382</span><span id="line-382">  }</span>
<span class="source-line-no">383</span><span id="line-383"></span>
<span class="source-line-no">384</span><span id="line-384">  private abstract class TableAction extends MasterAction {</span>
<span class="source-line-no">385</span><span id="line-385">    // TableAction has implemented selectTable() shared by multiple table Actions</span>
<span class="source-line-no">386</span><span id="line-386">    protected TableDescriptor selectTable(ConcurrentHashMap&lt;TableName, TableDescriptor&gt; tableMap) {</span>
<span class="source-line-no">387</span><span id="line-387">      // synchronization to prevent removal from multiple threads</span>
<span class="source-line-no">388</span><span id="line-388">      synchronized (tableMap) {</span>
<span class="source-line-no">389</span><span id="line-389">        // randomly select table from tableMap</span>
<span class="source-line-no">390</span><span id="line-390">        if (tableMap.isEmpty()) {</span>
<span class="source-line-no">391</span><span id="line-391">          return null;</span>
<span class="source-line-no">392</span><span id="line-392">        }</span>
<span class="source-line-no">393</span><span id="line-393">        ArrayList&lt;TableName&gt; tableList = new ArrayList&lt;&gt;(tableMap.keySet());</span>
<span class="source-line-no">394</span><span id="line-394">        TableName key = tableList.get(ThreadLocalRandom.current().nextInt(tableList.size()));</span>
<span class="source-line-no">395</span><span id="line-395">        TableDescriptor randomTd = tableMap.remove(key);</span>
<span class="source-line-no">396</span><span id="line-396">        return randomTd;</span>
<span class="source-line-no">397</span><span id="line-397">      }</span>
<span class="source-line-no">398</span><span id="line-398">    }</span>
<span class="source-line-no">399</span><span id="line-399">  }</span>
<span class="source-line-no">400</span><span id="line-400"></span>
<span class="source-line-no">401</span><span id="line-401">  private class CreateTableAction extends TableAction {</span>
<span class="source-line-no">402</span><span id="line-402"></span>
<span class="source-line-no">403</span><span id="line-403">    @Override</span>
<span class="source-line-no">404</span><span id="line-404">    void perform() throws IOException {</span>
<span class="source-line-no">405</span><span id="line-405">      Admin admin = connection.getAdmin();</span>
<span class="source-line-no">406</span><span id="line-406">      try {</span>
<span class="source-line-no">407</span><span id="line-407">        TableDescriptor td = createTableDesc();</span>
<span class="source-line-no">408</span><span id="line-408">        TableName tableName = td.getTableName();</span>
<span class="source-line-no">409</span><span id="line-409">        if (admin.tableExists(tableName)) {</span>
<span class="source-line-no">410</span><span id="line-410">          return;</span>
<span class="source-line-no">411</span><span id="line-411">        }</span>
<span class="source-line-no">412</span><span id="line-412">        String numRegionKey = String.format(NUM_REGIONS_KEY, this.getClass().getSimpleName());</span>
<span class="source-line-no">413</span><span id="line-413">        numRegions = getConf().getInt(numRegionKey, DEFAULT_NUM_REGIONS);</span>
<span class="source-line-no">414</span><span id="line-414">        byte[] startKey = Bytes.toBytes("row-0000000000");</span>
<span class="source-line-no">415</span><span id="line-415">        byte[] endKey = Bytes.toBytes("row-" + Integer.MAX_VALUE);</span>
<span class="source-line-no">416</span><span id="line-416">        LOG.info("Creating table:" + td);</span>
<span class="source-line-no">417</span><span id="line-417">        admin.createTable(td, startKey, endKey, numRegions);</span>
<span class="source-line-no">418</span><span id="line-418">        Assert.assertTrue("Table: " + td + " was not created", admin.tableExists(tableName));</span>
<span class="source-line-no">419</span><span id="line-419">        TableDescriptor freshTableDesc = admin.getDescriptor(tableName);</span>
<span class="source-line-no">420</span><span id="line-420">        Assert.assertTrue("After create, Table: " + tableName + " in not enabled",</span>
<span class="source-line-no">421</span><span id="line-421">          admin.isTableEnabled(tableName));</span>
<span class="source-line-no">422</span><span id="line-422">        enabledTables.put(tableName, freshTableDesc);</span>
<span class="source-line-no">423</span><span id="line-423">        LOG.info("Created table:" + freshTableDesc);</span>
<span class="source-line-no">424</span><span id="line-424">      } catch (Exception e) {</span>
<span class="source-line-no">425</span><span id="line-425">        LOG.warn("Caught exception in action: " + this.getClass());</span>
<span class="source-line-no">426</span><span id="line-426">        throw e;</span>
<span class="source-line-no">427</span><span id="line-427">      } finally {</span>
<span class="source-line-no">428</span><span id="line-428">        admin.close();</span>
<span class="source-line-no">429</span><span id="line-429">      }</span>
<span class="source-line-no">430</span><span id="line-430">    }</span>
<span class="source-line-no">431</span><span id="line-431"></span>
<span class="source-line-no">432</span><span id="line-432">    private TableDescriptor createTableDesc() {</span>
<span class="source-line-no">433</span><span id="line-433">      String tableName =</span>
<span class="source-line-no">434</span><span id="line-434">        String.format("ittable-%010d", ThreadLocalRandom.current().nextInt(Integer.MAX_VALUE));</span>
<span class="source-line-no">435</span><span id="line-435">      String familyName = "cf-" + ThreadLocalRandom.current().nextInt(Integer.MAX_VALUE);</span>
<span class="source-line-no">436</span><span id="line-436">      return TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName))</span>
<span class="source-line-no">437</span><span id="line-437">        .setColumnFamily(ColumnFamilyDescriptorBuilder.of(familyName)).build();</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"></span>
<span class="source-line-no">441</span><span id="line-441">  private class DisableTableAction extends TableAction {</span>
<span class="source-line-no">442</span><span id="line-442"></span>
<span class="source-line-no">443</span><span id="line-443">    @Override</span>
<span class="source-line-no">444</span><span id="line-444">    void perform() throws IOException {</span>
<span class="source-line-no">445</span><span id="line-445"></span>
<span class="source-line-no">446</span><span id="line-446">      TableDescriptor selected = selectTable(enabledTables);</span>
<span class="source-line-no">447</span><span id="line-447">      if (selected == null) {</span>
<span class="source-line-no">448</span><span id="line-448">        return;</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">      Admin admin = connection.getAdmin();</span>
<span class="source-line-no">452</span><span id="line-452">      try {</span>
<span class="source-line-no">453</span><span id="line-453">        TableName tableName = selected.getTableName();</span>
<span class="source-line-no">454</span><span id="line-454">        LOG.info("Disabling table :" + selected);</span>
<span class="source-line-no">455</span><span id="line-455">        admin.disableTable(tableName);</span>
<span class="source-line-no">456</span><span id="line-456">        Assert.assertTrue("Table: " + selected + " was not disabled",</span>
<span class="source-line-no">457</span><span id="line-457">          admin.isTableDisabled(tableName));</span>
<span class="source-line-no">458</span><span id="line-458">        TableDescriptor freshTableDesc = admin.getDescriptor(tableName);</span>
<span class="source-line-no">459</span><span id="line-459">        Assert.assertTrue("After disable, Table: " + tableName + " is not disabled",</span>
<span class="source-line-no">460</span><span id="line-460">          admin.isTableDisabled(tableName));</span>
<span class="source-line-no">461</span><span id="line-461">        disabledTables.put(tableName, freshTableDesc);</span>
<span class="source-line-no">462</span><span id="line-462">        LOG.info("Disabled table :" + freshTableDesc);</span>
<span class="source-line-no">463</span><span id="line-463">      } catch (Exception e) {</span>
<span class="source-line-no">464</span><span id="line-464">        LOG.warn("Caught exception in action: " + this.getClass());</span>
<span class="source-line-no">465</span><span id="line-465">        // TODO workaround</span>
<span class="source-line-no">466</span><span id="line-466">        // loose restriction for TableNotDisabledException/TableNotEnabledException thrown in sync</span>
<span class="source-line-no">467</span><span id="line-467">        // operations</span>
<span class="source-line-no">468</span><span id="line-468">        // 1) when enable/disable starts, the table state is changed to ENABLING/DISABLING (ZK node</span>
<span class="source-line-no">469</span><span id="line-469">        // in 1.x), which will be further changed to ENABLED/DISABLED once the operation completes</span>
<span class="source-line-no">470</span><span id="line-470">        // 2) if master failover happens in the middle of the enable/disable operation, the new</span>
<span class="source-line-no">471</span><span id="line-471">        // master will try to recover the tables in ENABLING/DISABLING state, as programmed in</span>
<span class="source-line-no">472</span><span id="line-472">        // AssignmentManager#recoverTableInEnablingState() and</span>
<span class="source-line-no">473</span><span id="line-473">        // AssignmentManager#recoverTableInDisablingState()</span>
<span class="source-line-no">474</span><span id="line-474">        // 3) after the new master initialization completes, the procedure tries to re-do the</span>
<span class="source-line-no">475</span><span id="line-475">        // enable/disable operation, which was already done. Ignore those exceptions before change</span>
<span class="source-line-no">476</span><span id="line-476">        // of behaviors of AssignmentManager in presence of PV2</span>
<span class="source-line-no">477</span><span id="line-477">        if (e instanceof TableNotEnabledException) {</span>
<span class="source-line-no">478</span><span id="line-478">          LOG.warn("Caught TableNotEnabledException in action: " + this.getClass());</span>
<span class="source-line-no">479</span><span id="line-479">          e.printStackTrace();</span>
<span class="source-line-no">480</span><span id="line-480">        } else {</span>
<span class="source-line-no">481</span><span id="line-481">          throw e;</span>
<span class="source-line-no">482</span><span id="line-482">        }</span>
<span class="source-line-no">483</span><span id="line-483">      } finally {</span>
<span class="source-line-no">484</span><span id="line-484">        admin.close();</span>
<span class="source-line-no">485</span><span id="line-485">      }</span>
<span class="source-line-no">486</span><span id="line-486">    }</span>
<span class="source-line-no">487</span><span id="line-487">  }</span>
<span class="source-line-no">488</span><span id="line-488"></span>
<span class="source-line-no">489</span><span id="line-489">  private class EnableTableAction extends TableAction {</span>
<span class="source-line-no">490</span><span id="line-490"></span>
<span class="source-line-no">491</span><span id="line-491">    @Override</span>
<span class="source-line-no">492</span><span id="line-492">    void perform() throws IOException {</span>
<span class="source-line-no">493</span><span id="line-493"></span>
<span class="source-line-no">494</span><span id="line-494">      TableDescriptor selected = selectTable(disabledTables);</span>
<span class="source-line-no">495</span><span id="line-495">      if (selected == null) {</span>
<span class="source-line-no">496</span><span id="line-496">        return;</span>
<span class="source-line-no">497</span><span id="line-497">      }</span>
<span class="source-line-no">498</span><span id="line-498"></span>
<span class="source-line-no">499</span><span id="line-499">      Admin admin = connection.getAdmin();</span>
<span class="source-line-no">500</span><span id="line-500">      try {</span>
<span class="source-line-no">501</span><span id="line-501">        TableName tableName = selected.getTableName();</span>
<span class="source-line-no">502</span><span id="line-502">        LOG.info("Enabling table :" + selected);</span>
<span class="source-line-no">503</span><span id="line-503">        admin.enableTable(tableName);</span>
<span class="source-line-no">504</span><span id="line-504">        Assert.assertTrue("Table: " + selected + " was not enabled",</span>
<span class="source-line-no">505</span><span id="line-505">          admin.isTableEnabled(tableName));</span>
<span class="source-line-no">506</span><span id="line-506">        TableDescriptor freshTableDesc = admin.getDescriptor(tableName);</span>
<span class="source-line-no">507</span><span id="line-507">        Assert.assertTrue("After enable, Table: " + tableName + " in not enabled",</span>
<span class="source-line-no">508</span><span id="line-508">          admin.isTableEnabled(tableName));</span>
<span class="source-line-no">509</span><span id="line-509">        enabledTables.put(tableName, freshTableDesc);</span>
<span class="source-line-no">510</span><span id="line-510">        LOG.info("Enabled table :" + freshTableDesc);</span>
<span class="source-line-no">511</span><span id="line-511">      } catch (Exception e) {</span>
<span class="source-line-no">512</span><span id="line-512">        LOG.warn("Caught exception in action: " + this.getClass());</span>
<span class="source-line-no">513</span><span id="line-513">        // TODO workaround</span>
<span class="source-line-no">514</span><span id="line-514">        // loose restriction for TableNotDisabledException/TableNotEnabledException thrown in sync</span>
<span class="source-line-no">515</span><span id="line-515">        // operations 1) when enable/disable starts, the table state is changed to</span>
<span class="source-line-no">516</span><span id="line-516">        // ENABLING/DISABLING (ZK node in 1.x), which will be further changed to ENABLED/DISABLED</span>
<span class="source-line-no">517</span><span id="line-517">        // once the operation completes 2) if master failover happens in the middle of the</span>
<span class="source-line-no">518</span><span id="line-518">        // enable/disable operation, the new master will try to recover the tables in</span>
<span class="source-line-no">519</span><span id="line-519">        // ENABLING/DISABLING state, as programmed in</span>
<span class="source-line-no">520</span><span id="line-520">        // AssignmentManager#recoverTableInEnablingState() and</span>
<span class="source-line-no">521</span><span id="line-521">        // AssignmentManager#recoverTableInDisablingState()</span>
<span class="source-line-no">522</span><span id="line-522">        // 3) after the new master initialization completes, the procedure tries to re-do the</span>
<span class="source-line-no">523</span><span id="line-523">        // enable/disable operation, which was already done. Ignore those exceptions before</span>
<span class="source-line-no">524</span><span id="line-524">        // change of behaviors of AssignmentManager in presence of PV2</span>
<span class="source-line-no">525</span><span id="line-525">        if (e instanceof TableNotDisabledException) {</span>
<span class="source-line-no">526</span><span id="line-526">          LOG.warn("Caught TableNotDisabledException in action: " + this.getClass());</span>
<span class="source-line-no">527</span><span id="line-527">          e.printStackTrace();</span>
<span class="source-line-no">528</span><span id="line-528">        } else {</span>
<span class="source-line-no">529</span><span id="line-529">          throw e;</span>
<span class="source-line-no">530</span><span id="line-530">        }</span>
<span class="source-line-no">531</span><span id="line-531">      } finally {</span>
<span class="source-line-no">532</span><span id="line-532">        admin.close();</span>
<span class="source-line-no">533</span><span id="line-533">      }</span>
<span class="source-line-no">534</span><span id="line-534">    }</span>
<span class="source-line-no">535</span><span id="line-535">  }</span>
<span class="source-line-no">536</span><span id="line-536"></span>
<span class="source-line-no">537</span><span id="line-537">  private class DeleteTableAction extends TableAction {</span>
<span class="source-line-no">538</span><span id="line-538"></span>
<span class="source-line-no">539</span><span id="line-539">    @Override</span>
<span class="source-line-no">540</span><span id="line-540">    void perform() throws IOException {</span>
<span class="source-line-no">541</span><span id="line-541"></span>
<span class="source-line-no">542</span><span id="line-542">      TableDescriptor selected = selectTable(disabledTables);</span>
<span class="source-line-no">543</span><span id="line-543">      if (selected == null) {</span>
<span class="source-line-no">544</span><span id="line-544">        return;</span>
<span class="source-line-no">545</span><span id="line-545">      }</span>
<span class="source-line-no">546</span><span id="line-546"></span>
<span class="source-line-no">547</span><span id="line-547">      Admin admin = connection.getAdmin();</span>
<span class="source-line-no">548</span><span id="line-548">      try {</span>
<span class="source-line-no">549</span><span id="line-549">        TableName tableName = selected.getTableName();</span>
<span class="source-line-no">550</span><span id="line-550">        LOG.info("Deleting table :" + selected);</span>
<span class="source-line-no">551</span><span id="line-551">        admin.deleteTable(tableName);</span>
<span class="source-line-no">552</span><span id="line-552">        Assert.assertFalse("Table: " + selected + " was not deleted", admin.tableExists(tableName));</span>
<span class="source-line-no">553</span><span id="line-553">        deletedTables.put(tableName, selected);</span>
<span class="source-line-no">554</span><span id="line-554">        LOG.info("Deleted table :" + selected);</span>
<span class="source-line-no">555</span><span id="line-555">      } catch (Exception e) {</span>
<span class="source-line-no">556</span><span id="line-556">        LOG.warn("Caught exception in action: " + this.getClass());</span>
<span class="source-line-no">557</span><span id="line-557">        throw e;</span>
<span class="source-line-no">558</span><span id="line-558">      } finally {</span>
<span class="source-line-no">559</span><span id="line-559">        admin.close();</span>
<span class="source-line-no">560</span><span id="line-560">      }</span>
<span class="source-line-no">561</span><span id="line-561">    }</span>
<span class="source-line-no">562</span><span id="line-562">  }</span>
<span class="source-line-no">563</span><span id="line-563"></span>
<span class="source-line-no">564</span><span id="line-564">  private abstract class ColumnAction extends TableAction {</span>
<span class="source-line-no">565</span><span id="line-565">    // ColumnAction has implemented selectFamily() shared by multiple family Actions</span>
<span class="source-line-no">566</span><span id="line-566">    protected ColumnFamilyDescriptor selectFamily(TableDescriptor td) {</span>
<span class="source-line-no">567</span><span id="line-567">      if (td == null) {</span>
<span class="source-line-no">568</span><span id="line-568">        return null;</span>
<span class="source-line-no">569</span><span id="line-569">      }</span>
<span class="source-line-no">570</span><span id="line-570">      ColumnFamilyDescriptor[] families = td.getColumnFamilies();</span>
<span class="source-line-no">571</span><span id="line-571">      if (families.length == 0) {</span>
<span class="source-line-no">572</span><span id="line-572">        LOG.info("No column families in table: " + td);</span>
<span class="source-line-no">573</span><span id="line-573">        return null;</span>
<span class="source-line-no">574</span><span id="line-574">      }</span>
<span class="source-line-no">575</span><span id="line-575">      return families[ThreadLocalRandom.current().nextInt(families.length)];</span>
<span class="source-line-no">576</span><span id="line-576">    }</span>
<span class="source-line-no">577</span><span id="line-577">  }</span>
<span class="source-line-no">578</span><span id="line-578"></span>
<span class="source-line-no">579</span><span id="line-579">  private class AddColumnFamilyAction extends ColumnAction {</span>
<span class="source-line-no">580</span><span id="line-580"></span>
<span class="source-line-no">581</span><span id="line-581">    @Override</span>
<span class="source-line-no">582</span><span id="line-582">    void perform() throws IOException {</span>
<span class="source-line-no">583</span><span id="line-583">      TableDescriptor selected = selectTable(disabledTables);</span>
<span class="source-line-no">584</span><span id="line-584">      if (selected == null) {</span>
<span class="source-line-no">585</span><span id="line-585">        return;</span>
<span class="source-line-no">586</span><span id="line-586">      }</span>
<span class="source-line-no">587</span><span id="line-587"></span>
<span class="source-line-no">588</span><span id="line-588">      Admin admin = connection.getAdmin();</span>
<span class="source-line-no">589</span><span id="line-589">      try {</span>
<span class="source-line-no">590</span><span id="line-590">        ColumnFamilyDescriptor cfd = createFamilyDesc();</span>
<span class="source-line-no">591</span><span id="line-591">        if (selected.hasColumnFamily(cfd.getName())) {</span>
<span class="source-line-no">592</span><span id="line-592">          LOG.info(</span>
<span class="source-line-no">593</span><span id="line-593">            Bytes.toString(cfd.getName()) + " already exists in table " + selected.getTableName());</span>
<span class="source-line-no">594</span><span id="line-594">          return;</span>
<span class="source-line-no">595</span><span id="line-595">        }</span>
<span class="source-line-no">596</span><span id="line-596">        TableName tableName = selected.getTableName();</span>
<span class="source-line-no">597</span><span id="line-597">        LOG.info("Adding column family: " + cfd + " to table: " + tableName);</span>
<span class="source-line-no">598</span><span id="line-598">        admin.addColumnFamily(tableName, cfd);</span>
<span class="source-line-no">599</span><span id="line-599">        // assertion</span>
<span class="source-line-no">600</span><span id="line-600">        TableDescriptor freshTableDesc = admin.getDescriptor(tableName);</span>
<span class="source-line-no">601</span><span id="line-601">        Assert.assertTrue("Column family: " + cfd + " was not added",</span>
<span class="source-line-no">602</span><span id="line-602">          freshTableDesc.hasColumnFamily(cfd.getName()));</span>
<span class="source-line-no">603</span><span id="line-603">        Assert.assertTrue("After add column family, Table: " + tableName + " is not disabled",</span>
<span class="source-line-no">604</span><span id="line-604">          admin.isTableDisabled(tableName));</span>
<span class="source-line-no">605</span><span id="line-605">        disabledTables.put(tableName, freshTableDesc);</span>
<span class="source-line-no">606</span><span id="line-606">        LOG.info("Added column family: " + cfd + " to table: " + tableName);</span>
<span class="source-line-no">607</span><span id="line-607">      } catch (Exception e) {</span>
<span class="source-line-no">608</span><span id="line-608">        LOG.warn("Caught exception in action: " + this.getClass());</span>
<span class="source-line-no">609</span><span id="line-609">        throw e;</span>
<span class="source-line-no">610</span><span id="line-610">      } finally {</span>
<span class="source-line-no">611</span><span id="line-611">        admin.close();</span>
<span class="source-line-no">612</span><span id="line-612">      }</span>
<span class="source-line-no">613</span><span id="line-613">    }</span>
<span class="source-line-no">614</span><span id="line-614"></span>
<span class="source-line-no">615</span><span id="line-615">    private ColumnFamilyDescriptor createFamilyDesc() {</span>
<span class="source-line-no">616</span><span id="line-616">      String familyName = String.format("cf-%010d", ThreadLocalRandom.current().nextInt());</span>
<span class="source-line-no">617</span><span id="line-617">      return ColumnFamilyDescriptorBuilder.of(familyName);</span>
<span class="source-line-no">618</span><span id="line-618">    }</span>
<span class="source-line-no">619</span><span id="line-619">  }</span>
<span class="source-line-no">620</span><span id="line-620"></span>
<span class="source-line-no">621</span><span id="line-621">  private class AlterFamilyVersionsAction extends ColumnAction {</span>
<span class="source-line-no">622</span><span id="line-622"></span>
<span class="source-line-no">623</span><span id="line-623">    @Override</span>
<span class="source-line-no">624</span><span id="line-624">    void perform() throws IOException {</span>
<span class="source-line-no">625</span><span id="line-625">      TableDescriptor selected = selectTable(disabledTables);</span>
<span class="source-line-no">626</span><span id="line-626">      if (selected == null) {</span>
<span class="source-line-no">627</span><span id="line-627">        return;</span>
<span class="source-line-no">628</span><span id="line-628">      }</span>
<span class="source-line-no">629</span><span id="line-629">      ColumnFamilyDescriptor columnDesc = selectFamily(selected);</span>
<span class="source-line-no">630</span><span id="line-630">      if (columnDesc == null) {</span>
<span class="source-line-no">631</span><span id="line-631">        return;</span>
<span class="source-line-no">632</span><span id="line-632">      }</span>
<span class="source-line-no">633</span><span id="line-633"></span>
<span class="source-line-no">634</span><span id="line-634">      Admin admin = connection.getAdmin();</span>
<span class="source-line-no">635</span><span id="line-635">      int versions = ThreadLocalRandom.current().nextInt(10) + 3;</span>
<span class="source-line-no">636</span><span id="line-636">      try {</span>
<span class="source-line-no">637</span><span id="line-637">        TableName tableName = selected.getTableName();</span>
<span class="source-line-no">638</span><span id="line-638">        LOG.info("Altering versions of column family: " + columnDesc + " to: " + versions</span>
<span class="source-line-no">639</span><span id="line-639">          + " in table: " + tableName);</span>
<span class="source-line-no">640</span><span id="line-640"></span>
<span class="source-line-no">641</span><span id="line-641">        ColumnFamilyDescriptor cfd = ColumnFamilyDescriptorBuilder.newBuilder(columnDesc)</span>
<span class="source-line-no">642</span><span id="line-642">          .setMinVersions(versions).setMaxVersions(versions).build();</span>
<span class="source-line-no">643</span><span id="line-643">        TableDescriptor td =</span>
<span class="source-line-no">644</span><span id="line-644">          TableDescriptorBuilder.newBuilder(selected).modifyColumnFamily(cfd).build();</span>
<span class="source-line-no">645</span><span id="line-645">        admin.modifyTable(td);</span>
<span class="source-line-no">646</span><span id="line-646"></span>
<span class="source-line-no">647</span><span id="line-647">        // assertion</span>
<span class="source-line-no">648</span><span id="line-648">        TableDescriptor freshTableDesc = admin.getDescriptor(tableName);</span>
<span class="source-line-no">649</span><span id="line-649">        ColumnFamilyDescriptor freshColumnDesc =</span>
<span class="source-line-no">650</span><span id="line-650">          freshTableDesc.getColumnFamily(columnDesc.getName());</span>
<span class="source-line-no">651</span><span id="line-651">        Assert.assertEquals("Column family: " + columnDesc + " was not altered",</span>
<span class="source-line-no">652</span><span id="line-652">          freshColumnDesc.getMaxVersions(), versions);</span>
<span class="source-line-no">653</span><span id="line-653">        Assert.assertEquals("Column family: " + freshColumnDesc + " was not altered",</span>
<span class="source-line-no">654</span><span id="line-654">          freshColumnDesc.getMinVersions(), versions);</span>
<span class="source-line-no">655</span><span id="line-655">        Assert.assertTrue(</span>
<span class="source-line-no">656</span><span id="line-656">          "After alter versions of column family, Table: " + tableName + " is not disabled",</span>
<span class="source-line-no">657</span><span id="line-657">          admin.isTableDisabled(tableName));</span>
<span class="source-line-no">658</span><span id="line-658">        disabledTables.put(tableName, freshTableDesc);</span>
<span class="source-line-no">659</span><span id="line-659">        LOG.info("Altered versions of column family: " + columnDesc + " to: " + versions</span>
<span class="source-line-no">660</span><span id="line-660">          + " in table: " + tableName);</span>
<span class="source-line-no">661</span><span id="line-661">      } catch (Exception e) {</span>
<span class="source-line-no">662</span><span id="line-662">        LOG.warn("Caught exception in action: " + this.getClass());</span>
<span class="source-line-no">663</span><span id="line-663">        throw e;</span>
<span class="source-line-no">664</span><span id="line-664">      } finally {</span>
<span class="source-line-no">665</span><span id="line-665">        admin.close();</span>
<span class="source-line-no">666</span><span id="line-666">      }</span>
<span class="source-line-no">667</span><span id="line-667">    }</span>
<span class="source-line-no">668</span><span id="line-668">  }</span>
<span class="source-line-no">669</span><span id="line-669"></span>
<span class="source-line-no">670</span><span id="line-670">  private class AlterFamilyEncodingAction extends ColumnAction {</span>
<span class="source-line-no">671</span><span id="line-671"></span>
<span class="source-line-no">672</span><span id="line-672">    @Override</span>
<span class="source-line-no">673</span><span id="line-673">    void perform() throws IOException {</span>
<span class="source-line-no">674</span><span id="line-674">      TableDescriptor selected = selectTable(disabledTables);</span>
<span class="source-line-no">675</span><span id="line-675">      if (selected == null) {</span>
<span class="source-line-no">676</span><span id="line-676">        return;</span>
<span class="source-line-no">677</span><span id="line-677">      }</span>
<span class="source-line-no">678</span><span id="line-678">      ColumnFamilyDescriptor columnDesc = selectFamily(selected);</span>
<span class="source-line-no">679</span><span id="line-679">      if (columnDesc == null) {</span>
<span class="source-line-no">680</span><span id="line-680">        return;</span>
<span class="source-line-no">681</span><span id="line-681">      }</span>
<span class="source-line-no">682</span><span id="line-682"></span>
<span class="source-line-no">683</span><span id="line-683">      Admin admin = connection.getAdmin();</span>
<span class="source-line-no">684</span><span id="line-684">      try {</span>
<span class="source-line-no">685</span><span id="line-685">        TableName tableName = selected.getTableName();</span>
<span class="source-line-no">686</span><span id="line-686">        // possible DataBlockEncoding ids</span>
<span class="source-line-no">687</span><span id="line-687">        DataBlockEncoding[] possibleIds = { DataBlockEncoding.NONE, DataBlockEncoding.PREFIX,</span>
<span class="source-line-no">688</span><span id="line-688">          DataBlockEncoding.DIFF, DataBlockEncoding.FAST_DIFF, DataBlockEncoding.ROW_INDEX_V1 };</span>
<span class="source-line-no">689</span><span id="line-689">        short id = possibleIds[ThreadLocalRandom.current().nextInt(possibleIds.length)].getId();</span>
<span class="source-line-no">690</span><span id="line-690">        LOG.info("Altering encoding of column family: " + columnDesc + " to: " + id + " in table: "</span>
<span class="source-line-no">691</span><span id="line-691">          + tableName);</span>
<span class="source-line-no">692</span><span id="line-692"></span>
<span class="source-line-no">693</span><span id="line-693">        ColumnFamilyDescriptor cfd = ColumnFamilyDescriptorBuilder.newBuilder(columnDesc)</span>
<span class="source-line-no">694</span><span id="line-694">          .setDataBlockEncoding(DataBlockEncoding.getEncodingById(id)).build();</span>
<span class="source-line-no">695</span><span id="line-695">        TableDescriptor td =</span>
<span class="source-line-no">696</span><span id="line-696">          TableDescriptorBuilder.newBuilder(selected).modifyColumnFamily(cfd).build();</span>
<span class="source-line-no">697</span><span id="line-697">        admin.modifyTable(td);</span>
<span class="source-line-no">698</span><span id="line-698"></span>
<span class="source-line-no">699</span><span id="line-699">        // assertion</span>
<span class="source-line-no">700</span><span id="line-700">        TableDescriptor freshTableDesc = admin.getDescriptor(tableName);</span>
<span class="source-line-no">701</span><span id="line-701">        ColumnFamilyDescriptor freshColumnDesc =</span>
<span class="source-line-no">702</span><span id="line-702">          freshTableDesc.getColumnFamily(columnDesc.getName());</span>
<span class="source-line-no">703</span><span id="line-703">        Assert.assertEquals("Encoding of column family: " + columnDesc + " was not altered",</span>
<span class="source-line-no">704</span><span id="line-704">          freshColumnDesc.getDataBlockEncoding().getId(), id);</span>
<span class="source-line-no">705</span><span id="line-705">        Assert.assertTrue(</span>
<span class="source-line-no">706</span><span id="line-706">          "After alter encoding of column family, Table: " + tableName + " is not disabled",</span>
<span class="source-line-no">707</span><span id="line-707">          admin.isTableDisabled(tableName));</span>
<span class="source-line-no">708</span><span id="line-708">        disabledTables.put(tableName, freshTableDesc);</span>
<span class="source-line-no">709</span><span id="line-709">        LOG.info("Altered encoding of column family: " + freshColumnDesc + " to: " + id</span>
<span class="source-line-no">710</span><span id="line-710">          + " in table: " + tableName);</span>
<span class="source-line-no">711</span><span id="line-711">      } catch (Exception e) {</span>
<span class="source-line-no">712</span><span id="line-712">        LOG.warn("Caught exception in action: " + this.getClass());</span>
<span class="source-line-no">713</span><span id="line-713">        throw e;</span>
<span class="source-line-no">714</span><span id="line-714">      } finally {</span>
<span class="source-line-no">715</span><span id="line-715">        admin.close();</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"></span>
<span class="source-line-no">720</span><span id="line-720">  private class DeleteColumnFamilyAction extends ColumnAction {</span>
<span class="source-line-no">721</span><span id="line-721"></span>
<span class="source-line-no">722</span><span id="line-722">    @Override</span>
<span class="source-line-no">723</span><span id="line-723">    void perform() throws IOException {</span>
<span class="source-line-no">724</span><span id="line-724">      TableDescriptor selected = selectTable(disabledTables);</span>
<span class="source-line-no">725</span><span id="line-725">      ColumnFamilyDescriptor cfd = selectFamily(selected);</span>
<span class="source-line-no">726</span><span id="line-726">      if (selected == null || cfd == null) {</span>
<span class="source-line-no">727</span><span id="line-727">        return;</span>
<span class="source-line-no">728</span><span id="line-728">      }</span>
<span class="source-line-no">729</span><span id="line-729"></span>
<span class="source-line-no">730</span><span id="line-730">      Admin admin = connection.getAdmin();</span>
<span class="source-line-no">731</span><span id="line-731">      try {</span>
<span class="source-line-no">732</span><span id="line-732">        if (selected.getColumnFamilyCount() &lt; 2) {</span>
<span class="source-line-no">733</span><span id="line-733">          LOG.info("No enough column families to delete in table " + selected.getTableName());</span>
<span class="source-line-no">734</span><span id="line-734">          return;</span>
<span class="source-line-no">735</span><span id="line-735">        }</span>
<span class="source-line-no">736</span><span id="line-736">        TableName tableName = selected.getTableName();</span>
<span class="source-line-no">737</span><span id="line-737">        LOG.info("Deleting column family: " + cfd + " from table: " + tableName);</span>
<span class="source-line-no">738</span><span id="line-738">        admin.deleteColumnFamily(tableName, cfd.getName());</span>
<span class="source-line-no">739</span><span id="line-739">        // assertion</span>
<span class="source-line-no">740</span><span id="line-740">        TableDescriptor freshTableDesc = admin.getDescriptor(tableName);</span>
<span class="source-line-no">741</span><span id="line-741">        Assert.assertFalse("Column family: " + cfd + " was not added",</span>
<span class="source-line-no">742</span><span id="line-742">          freshTableDesc.hasColumnFamily(cfd.getName()));</span>
<span class="source-line-no">743</span><span id="line-743">        Assert.assertTrue("After delete column family, Table: " + tableName + " is not disabled",</span>
<span class="source-line-no">744</span><span id="line-744">          admin.isTableDisabled(tableName));</span>
<span class="source-line-no">745</span><span id="line-745">        disabledTables.put(tableName, freshTableDesc);</span>
<span class="source-line-no">746</span><span id="line-746">        LOG.info("Deleted column family: " + cfd + " from table: " + tableName);</span>
<span class="source-line-no">747</span><span id="line-747">      } catch (Exception e) {</span>
<span class="source-line-no">748</span><span id="line-748">        LOG.warn("Caught exception in action: " + this.getClass());</span>
<span class="source-line-no">749</span><span id="line-749">        throw e;</span>
<span class="source-line-no">750</span><span id="line-750">      } finally {</span>
<span class="source-line-no">751</span><span id="line-751">        admin.close();</span>
<span class="source-line-no">752</span><span id="line-752">      }</span>
<span class="source-line-no">753</span><span id="line-753">    }</span>
<span class="source-line-no">754</span><span id="line-754">  }</span>
<span class="source-line-no">755</span><span id="line-755"></span>
<span class="source-line-no">756</span><span id="line-756">  private class AddRowAction extends ColumnAction {</span>
<span class="source-line-no">757</span><span id="line-757">    // populate tables</span>
<span class="source-line-no">758</span><span id="line-758">    @Override</span>
<span class="source-line-no">759</span><span id="line-759">    void perform() throws IOException {</span>
<span class="source-line-no">760</span><span id="line-760">      TableDescriptor selected = selectTable(enabledTables);</span>
<span class="source-line-no">761</span><span id="line-761">      if (selected == null) {</span>
<span class="source-line-no">762</span><span id="line-762">        return;</span>
<span class="source-line-no">763</span><span id="line-763">      }</span>
<span class="source-line-no">764</span><span id="line-764"></span>
<span class="source-line-no">765</span><span id="line-765">      Admin admin = connection.getAdmin();</span>
<span class="source-line-no">766</span><span id="line-766">      TableName tableName = selected.getTableName();</span>
<span class="source-line-no">767</span><span id="line-767">      try (Table table = connection.getTable(tableName)) {</span>
<span class="source-line-no">768</span><span id="line-768">        ArrayList&lt;RegionInfo&gt; regionInfos =</span>
<span class="source-line-no">769</span><span id="line-769">          new ArrayList&lt;&gt;(admin.getRegions(selected.getTableName()));</span>
<span class="source-line-no">770</span><span id="line-770">        int numRegions = regionInfos.size();</span>
<span class="source-line-no">771</span><span id="line-771">        // average number of rows to be added per action to each region</span>
<span class="source-line-no">772</span><span id="line-772">        int average_rows = 1;</span>
<span class="source-line-no">773</span><span id="line-773">        int numRows = average_rows * numRegions;</span>
<span class="source-line-no">774</span><span id="line-774">        LOG.info("Adding " + numRows + " rows to table: " + selected);</span>
<span class="source-line-no">775</span><span id="line-775">        byte[] value = new byte[10];</span>
<span class="source-line-no">776</span><span id="line-776">        for (int i = 0; i &lt; numRows; i++) {</span>
<span class="source-line-no">777</span><span id="line-777">          // nextInt(Integer.MAX_VALUE)) to return positive numbers only</span>
<span class="source-line-no">778</span><span id="line-778">          byte[] rowKey =</span>
<span class="source-line-no">779</span><span id="line-779">            Bytes.toBytes("row-" + String.format("%010d", ThreadLocalRandom.current().nextInt()));</span>
<span class="source-line-no">780</span><span id="line-780">          ColumnFamilyDescriptor cfd = selectFamily(selected);</span>
<span class="source-line-no">781</span><span id="line-781">          if (cfd == null) {</span>
<span class="source-line-no">782</span><span id="line-782">            return;</span>
<span class="source-line-no">783</span><span id="line-783">          }</span>
<span class="source-line-no">784</span><span id="line-784">          byte[] family = cfd.getName();</span>
<span class="source-line-no">785</span><span id="line-785">          byte[] qualifier = Bytes.toBytes("col-" + ThreadLocalRandom.current().nextInt(10));</span>
<span class="source-line-no">786</span><span id="line-786">          Bytes.random(value);</span>
<span class="source-line-no">787</span><span id="line-787">          Put put = new Put(rowKey);</span>
<span class="source-line-no">788</span><span id="line-788">          put.addColumn(family, qualifier, value);</span>
<span class="source-line-no">789</span><span id="line-789">          table.put(put);</span>
<span class="source-line-no">790</span><span id="line-790">        }</span>
<span class="source-line-no">791</span><span id="line-791">        TableDescriptor freshTableDesc = admin.getDescriptor(tableName);</span>
<span class="source-line-no">792</span><span id="line-792">        Assert.assertTrue("After insert, Table: " + tableName + " in not enabled",</span>
<span class="source-line-no">793</span><span id="line-793">          admin.isTableEnabled(tableName));</span>
<span class="source-line-no">794</span><span id="line-794">        enabledTables.put(tableName, freshTableDesc);</span>
<span class="source-line-no">795</span><span id="line-795">        LOG.info("Added " + numRows + " rows to table: " + selected);</span>
<span class="source-line-no">796</span><span id="line-796">      } catch (Exception e) {</span>
<span class="source-line-no">797</span><span id="line-797">        LOG.warn("Caught exception in action: " + this.getClass());</span>
<span class="source-line-no">798</span><span id="line-798">        throw e;</span>
<span class="source-line-no">799</span><span id="line-799">      } finally {</span>
<span class="source-line-no">800</span><span id="line-800">        admin.close();</span>
<span class="source-line-no">801</span><span id="line-801">      }</span>
<span class="source-line-no">802</span><span id="line-802">    }</span>
<span class="source-line-no">803</span><span id="line-803">  }</span>
<span class="source-line-no">804</span><span id="line-804"></span>
<span class="source-line-no">805</span><span id="line-805">  private enum ACTION {</span>
<span class="source-line-no">806</span><span id="line-806">    CREATE_NAMESPACE,</span>
<span class="source-line-no">807</span><span id="line-807">    MODIFY_NAMESPACE,</span>
<span class="source-line-no">808</span><span id="line-808">    DELETE_NAMESPACE,</span>
<span class="source-line-no">809</span><span id="line-809">    CREATE_TABLE,</span>
<span class="source-line-no">810</span><span id="line-810">    DISABLE_TABLE,</span>
<span class="source-line-no">811</span><span id="line-811">    ENABLE_TABLE,</span>
<span class="source-line-no">812</span><span id="line-812">    DELETE_TABLE,</span>
<span class="source-line-no">813</span><span id="line-813">    ADD_COLUMNFAMILY,</span>
<span class="source-line-no">814</span><span id="line-814">    DELETE_COLUMNFAMILY,</span>
<span class="source-line-no">815</span><span id="line-815">    ALTER_FAMILYVERSIONS,</span>
<span class="source-line-no">816</span><span id="line-816">    ALTER_FAMILYENCODING,</span>
<span class="source-line-no">817</span><span id="line-817">    ADD_ROW</span>
<span class="source-line-no">818</span><span id="line-818">  }</span>
<span class="source-line-no">819</span><span id="line-819"></span>
<span class="source-line-no">820</span><span id="line-820">  private class Worker extends Thread {</span>
<span class="source-line-no">821</span><span id="line-821"></span>
<span class="source-line-no">822</span><span id="line-822">    private Exception savedException;</span>
<span class="source-line-no">823</span><span id="line-823"></span>
<span class="source-line-no">824</span><span id="line-824">    private ACTION action;</span>
<span class="source-line-no">825</span><span id="line-825"></span>
<span class="source-line-no">826</span><span id="line-826">    @Override</span>
<span class="source-line-no">827</span><span id="line-827">    public void run() {</span>
<span class="source-line-no">828</span><span id="line-828">      while (running.get()) {</span>
<span class="source-line-no">829</span><span id="line-829">        // select random action</span>
<span class="source-line-no">830</span><span id="line-830">        ACTION selectedAction =</span>
<span class="source-line-no">831</span><span id="line-831">          ACTION.values()[ThreadLocalRandom.current().nextInt(ACTION.values().length)];</span>
<span class="source-line-no">832</span><span id="line-832">        this.action = selectedAction;</span>
<span class="source-line-no">833</span><span id="line-833">        LOG.info("Performing Action: " + selectedAction);</span>
<span class="source-line-no">834</span><span id="line-834"></span>
<span class="source-line-no">835</span><span id="line-835">        try {</span>
<span class="source-line-no">836</span><span id="line-836">          switch (selectedAction) {</span>
<span class="source-line-no">837</span><span id="line-837">            case CREATE_NAMESPACE:</span>
<span class="source-line-no">838</span><span id="line-838">              new CreateNamespaceAction().perform();</span>
<span class="source-line-no">839</span><span id="line-839">              break;</span>
<span class="source-line-no">840</span><span id="line-840">            case MODIFY_NAMESPACE:</span>
<span class="source-line-no">841</span><span id="line-841">              new ModifyNamespaceAction().perform();</span>
<span class="source-line-no">842</span><span id="line-842">              break;</span>
<span class="source-line-no">843</span><span id="line-843">            case DELETE_NAMESPACE:</span>
<span class="source-line-no">844</span><span id="line-844">              new DeleteNamespaceAction().perform();</span>
<span class="source-line-no">845</span><span id="line-845">              break;</span>
<span class="source-line-no">846</span><span id="line-846">            case CREATE_TABLE:</span>
<span class="source-line-no">847</span><span id="line-847">              // stop creating new tables in the later stage of the test to avoid too many empty</span>
<span class="source-line-no">848</span><span id="line-848">              // tables</span>
<span class="source-line-no">849</span><span id="line-849">              if (create_table.get()) {</span>
<span class="source-line-no">850</span><span id="line-850">                new CreateTableAction().perform();</span>
<span class="source-line-no">851</span><span id="line-851">              }</span>
<span class="source-line-no">852</span><span id="line-852">              break;</span>
<span class="source-line-no">853</span><span id="line-853">            case ADD_ROW:</span>
<span class="source-line-no">854</span><span id="line-854">              new AddRowAction().perform();</span>
<span class="source-line-no">855</span><span id="line-855">              break;</span>
<span class="source-line-no">856</span><span id="line-856">            case DISABLE_TABLE:</span>
<span class="source-line-no">857</span><span id="line-857">              new DisableTableAction().perform();</span>
<span class="source-line-no">858</span><span id="line-858">              break;</span>
<span class="source-line-no">859</span><span id="line-859">            case ENABLE_TABLE:</span>
<span class="source-line-no">860</span><span id="line-860">              new EnableTableAction().perform();</span>
<span class="source-line-no">861</span><span id="line-861">              break;</span>
<span class="source-line-no">862</span><span id="line-862">            case DELETE_TABLE:</span>
<span class="source-line-no">863</span><span id="line-863">              // reduce probability of deleting table to 20%</span>
<span class="source-line-no">864</span><span id="line-864">              if (ThreadLocalRandom.current().nextInt(100) &lt; 20) {</span>
<span class="source-line-no">865</span><span id="line-865">                new DeleteTableAction().perform();</span>
<span class="source-line-no">866</span><span id="line-866">              }</span>
<span class="source-line-no">867</span><span id="line-867">              break;</span>
<span class="source-line-no">868</span><span id="line-868">            case ADD_COLUMNFAMILY:</span>
<span class="source-line-no">869</span><span id="line-869">              new AddColumnFamilyAction().perform();</span>
<span class="source-line-no">870</span><span id="line-870">              break;</span>
<span class="source-line-no">871</span><span id="line-871">            case DELETE_COLUMNFAMILY:</span>
<span class="source-line-no">872</span><span id="line-872">              // reduce probability of deleting column family to 20%</span>
<span class="source-line-no">873</span><span id="line-873">              if (ThreadLocalRandom.current().nextInt(100) &lt; 20) {</span>
<span class="source-line-no">874</span><span id="line-874">                new DeleteColumnFamilyAction().perform();</span>
<span class="source-line-no">875</span><span id="line-875">              }</span>
<span class="source-line-no">876</span><span id="line-876">              break;</span>
<span class="source-line-no">877</span><span id="line-877">            case ALTER_FAMILYVERSIONS:</span>
<span class="source-line-no">878</span><span id="line-878">              new AlterFamilyVersionsAction().perform();</span>
<span class="source-line-no">879</span><span id="line-879">              break;</span>
<span class="source-line-no">880</span><span id="line-880">            case ALTER_FAMILYENCODING:</span>
<span class="source-line-no">881</span><span id="line-881">              new AlterFamilyEncodingAction().perform();</span>
<span class="source-line-no">882</span><span id="line-882">              break;</span>
<span class="source-line-no">883</span><span id="line-883">          }</span>
<span class="source-line-no">884</span><span id="line-884">        } catch (Exception ex) {</span>
<span class="source-line-no">885</span><span id="line-885">          this.savedException = ex;</span>
<span class="source-line-no">886</span><span id="line-886">          return;</span>
<span class="source-line-no">887</span><span id="line-887">        }</span>
<span class="source-line-no">888</span><span id="line-888">      }</span>
<span class="source-line-no">889</span><span id="line-889">      LOG.info(this.getName() + " stopped");</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">    public Exception getSavedException() {</span>
<span class="source-line-no">893</span><span id="line-893">      return this.savedException;</span>
<span class="source-line-no">894</span><span id="line-894">    }</span>
<span class="source-line-no">895</span><span id="line-895"></span>
<span class="source-line-no">896</span><span id="line-896">    public ACTION getAction() {</span>
<span class="source-line-no">897</span><span id="line-897">      return this.action;</span>
<span class="source-line-no">898</span><span id="line-898">    }</span>
<span class="source-line-no">899</span><span id="line-899">  }</span>
<span class="source-line-no">900</span><span id="line-900"></span>
<span class="source-line-no">901</span><span id="line-901">  private void checkException(List&lt;Worker&gt; workers) {</span>
<span class="source-line-no">902</span><span id="line-902">    if (workers == null || workers.isEmpty()) return;</span>
<span class="source-line-no">903</span><span id="line-903">    for (Worker worker : workers) {</span>
<span class="source-line-no">904</span><span id="line-904">      Exception e = worker.getSavedException();</span>
<span class="source-line-no">905</span><span id="line-905">      if (e != null) {</span>
<span class="source-line-no">906</span><span id="line-906">        LOG.error("Found exception in thread: " + worker.getName());</span>
<span class="source-line-no">907</span><span id="line-907">        e.printStackTrace();</span>
<span class="source-line-no">908</span><span id="line-908">      }</span>
<span class="source-line-no">909</span><span id="line-909">      Assert.assertNull("Action failed: " + worker.getAction() + " in thread: " + worker.getName(),</span>
<span class="source-line-no">910</span><span id="line-910">        e);</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">  private int runTest() throws Exception {</span>
<span class="source-line-no">915</span><span id="line-915">    LOG.info("Starting the test");</span>
<span class="source-line-no">916</span><span id="line-916"></span>
<span class="source-line-no">917</span><span id="line-917">    String runtimeKey = String.format(RUN_TIME_KEY, this.getClass().getSimpleName());</span>
<span class="source-line-no">918</span><span id="line-918">    long runtime = util.getConfiguration().getLong(runtimeKey, DEFAULT_RUN_TIME);</span>
<span class="source-line-no">919</span><span id="line-919"></span>
<span class="source-line-no">920</span><span id="line-920">    String numThreadKey = String.format(NUM_THREADS_KEY, this.getClass().getSimpleName());</span>
<span class="source-line-no">921</span><span id="line-921">    numThreads = util.getConfiguration().getInt(numThreadKey, DEFAULT_NUM_THREADS);</span>
<span class="source-line-no">922</span><span id="line-922"></span>
<span class="source-line-no">923</span><span id="line-923">    ArrayList&lt;Worker&gt; workers = new ArrayList&lt;&gt;(numThreads);</span>
<span class="source-line-no">924</span><span id="line-924">    for (int i = 0; i &lt; numThreads; i++) {</span>
<span class="source-line-no">925</span><span id="line-925">      checkException(workers);</span>
<span class="source-line-no">926</span><span id="line-926">      Worker worker = new Worker();</span>
<span class="source-line-no">927</span><span id="line-927">      LOG.info("Launching worker thread " + worker.getName());</span>
<span class="source-line-no">928</span><span id="line-928">      workers.add(worker);</span>
<span class="source-line-no">929</span><span id="line-929">      worker.start();</span>
<span class="source-line-no">930</span><span id="line-930">    }</span>
<span class="source-line-no">931</span><span id="line-931"></span>
<span class="source-line-no">932</span><span id="line-932">    Threads.sleep(runtime / 2);</span>
<span class="source-line-no">933</span><span id="line-933">    LOG.info("Stopping creating new tables");</span>
<span class="source-line-no">934</span><span id="line-934">    create_table.set(false);</span>
<span class="source-line-no">935</span><span id="line-935">    Threads.sleep(runtime / 2);</span>
<span class="source-line-no">936</span><span id="line-936">    LOG.info("Runtime is up");</span>
<span class="source-line-no">937</span><span id="line-937">    running.set(false);</span>
<span class="source-line-no">938</span><span id="line-938"></span>
<span class="source-line-no">939</span><span id="line-939">    checkException(workers);</span>
<span class="source-line-no">940</span><span id="line-940"></span>
<span class="source-line-no">941</span><span id="line-941">    for (Worker worker : workers) {</span>
<span class="source-line-no">942</span><span id="line-942">      worker.join();</span>
<span class="source-line-no">943</span><span id="line-943">    }</span>
<span class="source-line-no">944</span><span id="line-944">    LOG.info("All Worker threads stopped");</span>
<span class="source-line-no">945</span><span id="line-945"></span>
<span class="source-line-no">946</span><span id="line-946">    // verify</span>
<span class="source-line-no">947</span><span id="line-947">    LOG.info("Verify actions of all threads succeeded");</span>
<span class="source-line-no">948</span><span id="line-948">    checkException(workers);</span>
<span class="source-line-no">949</span><span id="line-949">    LOG.info("Verify namespaces");</span>
<span class="source-line-no">950</span><span id="line-950">    verifyNamespaces();</span>
<span class="source-line-no">951</span><span id="line-951">    LOG.info("Verify states of all tables");</span>
<span class="source-line-no">952</span><span id="line-952">    verifyTables();</span>
<span class="source-line-no">953</span><span id="line-953"></span>
<span class="source-line-no">954</span><span id="line-954">    // RUN HBCK</span>
<span class="source-line-no">955</span><span id="line-955"></span>
<span class="source-line-no">956</span><span id="line-956">    HBaseFsck hbck = null;</span>
<span class="source-line-no">957</span><span id="line-957">    try {</span>
<span class="source-line-no">958</span><span id="line-958">      LOG.info("Running hbck");</span>
<span class="source-line-no">959</span><span id="line-959">      hbck = HbckTestingUtil.doFsck(util.getConfiguration(), false);</span>
<span class="source-line-no">960</span><span id="line-960">      if (HbckTestingUtil.inconsistencyFound(hbck)) {</span>
<span class="source-line-no">961</span><span id="line-961">        // Find the inconsistency during HBCK. Leave table and namespace undropped so that</span>
<span class="source-line-no">962</span><span id="line-962">        // we can check outside the test.</span>
<span class="source-line-no">963</span><span id="line-963">        keepObjectsAtTheEnd = true;</span>
<span class="source-line-no">964</span><span id="line-964">      }</span>
<span class="source-line-no">965</span><span id="line-965">      HbckTestingUtil.assertNoErrors(hbck);</span>
<span class="source-line-no">966</span><span id="line-966">      LOG.info("Finished hbck");</span>
<span class="source-line-no">967</span><span id="line-967">    } finally {</span>
<span class="source-line-no">968</span><span id="line-968">      if (hbck != null) {</span>
<span class="source-line-no">969</span><span id="line-969">        hbck.close();</span>
<span class="source-line-no">970</span><span id="line-970">      }</span>
<span class="source-line-no">971</span><span id="line-971">    }</span>
<span class="source-line-no">972</span><span id="line-972">    return 0;</span>
<span class="source-line-no">973</span><span id="line-973">  }</span>
<span class="source-line-no">974</span><span id="line-974"></span>
<span class="source-line-no">975</span><span id="line-975">  @Override</span>
<span class="source-line-no">976</span><span id="line-976">  public TableName getTablename() {</span>
<span class="source-line-no">977</span><span id="line-977">    return null; // This test is not inteded to run with stock Chaos Monkey</span>
<span class="source-line-no">978</span><span id="line-978">  }</span>
<span class="source-line-no">979</span><span id="line-979"></span>
<span class="source-line-no">980</span><span id="line-980">  @Override</span>
<span class="source-line-no">981</span><span id="line-981">  protected Set&lt;String&gt; getColumnFamilies() {</span>
<span class="source-line-no">982</span><span id="line-982">    return null; // This test is not inteded to run with stock Chaos Monkey</span>
<span class="source-line-no">983</span><span id="line-983">  }</span>
<span class="source-line-no">984</span><span id="line-984"></span>
<span class="source-line-no">985</span><span id="line-985">  public static void main(String[] args) throws Exception {</span>
<span class="source-line-no">986</span><span id="line-986">    Configuration conf = HBaseConfiguration.create();</span>
<span class="source-line-no">987</span><span id="line-987">    IntegrationTestingUtility.setUseDistributedCluster(conf);</span>
<span class="source-line-no">988</span><span id="line-988">    IntegrationTestDDLMasterFailover masterFailover = new IntegrationTestDDLMasterFailover();</span>
<span class="source-line-no">989</span><span id="line-989">    Connection connection = null;</span>
<span class="source-line-no">990</span><span id="line-990">    int ret = 1;</span>
<span class="source-line-no">991</span><span id="line-991">    try {</span>
<span class="source-line-no">992</span><span id="line-992">      // Initialize connection once, then pass to Actions</span>
<span class="source-line-no">993</span><span id="line-993">      LOG.debug("Setting up connection ...");</span>
<span class="source-line-no">994</span><span id="line-994">      connection = ConnectionFactory.createConnection(conf);</span>
<span class="source-line-no">995</span><span id="line-995">      masterFailover.setConnection(connection);</span>
<span class="source-line-no">996</span><span id="line-996">      ret = ToolRunner.run(conf, masterFailover, args);</span>
<span class="source-line-no">997</span><span id="line-997">    } catch (IOException e) {</span>
<span class="source-line-no">998</span><span id="line-998">      LOG.error(HBaseMarkers.FATAL, "Failed to establish connection. Aborting test ...", e);</span>
<span class="source-line-no">999</span><span id="line-999">    } finally {</span>
<span class="source-line-no">1000</span><span id="line-1000">      connection = masterFailover.getConnection();</span>
<span class="source-line-no">1001</span><span id="line-1001">      if (connection != null) {</span>
<span class="source-line-no">1002</span><span id="line-1002">        connection.close();</span>
<span class="source-line-no">1003</span><span id="line-1003">      }</span>
<span class="source-line-no">1004</span><span id="line-1004">      System.exit(ret);</span>
<span class="source-line-no">1005</span><span id="line-1005">    }</span>
<span class="source-line-no">1006</span><span id="line-1006">  }</span>
<span class="source-line-no">1007</span><span id="line-1007">}</span>




























































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