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




























































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