You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2018/05/04 14:48:00 UTC
[01/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Repository: hbase-site
Updated Branches:
refs/heads/asf-site a1e6bc211 -> de18d4687
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
index 7a938de..43a87b6 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
@@ -33,539 +33,515 @@
<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.util.List;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.util.UUID;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.Cell;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.Waiter;<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.RegionInfo;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.Table;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.junit.AfterClass;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.junit.Assert;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.junit.Before;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.BeforeClass;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.ClassRule;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Test;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.experimental.categories.Category;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.65"></a>
-<span class="sourceLineNo">066</span> */<a name="line.66"></a>
-<span class="sourceLineNo">067</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.67"></a>
-<span class="sourceLineNo">068</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span> @ClassRule<a name="line.70"></a>
-<span class="sourceLineNo">071</span> public static final HBaseClassTestRule CLASS_RULE =<a name="line.71"></a>
-<span class="sourceLineNo">072</span> HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span> private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span> static int numRegionServers;<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span> @BeforeClass<a name="line.78"></a>
-<span class="sourceLineNo">079</span> public static void setUpBeforeClass() throws Exception {<a name="line.79"></a>
-<span class="sourceLineNo">080</span> TestReplicationBase.setUpBeforeClass();<a name="line.80"></a>
-<span class="sourceLineNo">081</span> numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<a name="line.81"></a>
-<span class="sourceLineNo">082</span> }<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span> @AfterClass<a name="line.84"></a>
-<span class="sourceLineNo">085</span> public static void tearDownAfterClass() throws Exception {<a name="line.85"></a>
-<span class="sourceLineNo">086</span> TestReplicationBase.tearDownAfterClass();<a name="line.86"></a>
-<span class="sourceLineNo">087</span> // check stop is called<a name="line.87"></a>
-<span class="sourceLineNo">088</span> Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() > 0);<a name="line.88"></a>
-<span class="sourceLineNo">089</span> }<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> @Before<a name="line.91"></a>
-<span class="sourceLineNo">092</span> public void setup() throws Exception {<a name="line.92"></a>
-<span class="sourceLineNo">093</span> ReplicationEndpointForTest.contructedCount.set(0);<a name="line.93"></a>
-<span class="sourceLineNo">094</span> ReplicationEndpointForTest.startedCount.set(0);<a name="line.94"></a>
-<span class="sourceLineNo">095</span> ReplicationEndpointForTest.replicateCount.set(0);<a name="line.95"></a>
-<span class="sourceLineNo">096</span> ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.96"></a>
-<span class="sourceLineNo">097</span> ReplicationEndpointForTest.lastEntries = null;<a name="line.97"></a>
-<span class="sourceLineNo">098</span> final List<RegionServerThread> rsThreads =<a name="line.98"></a>
-<span class="sourceLineNo">099</span> utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.99"></a>
-<span class="sourceLineNo">100</span> for (RegionServerThread rs : rsThreads) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span> utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.101"></a>
-<span class="sourceLineNo">102</span> }<a name="line.102"></a>
-<span class="sourceLineNo">103</span> // Wait for all log roll to finish<a name="line.103"></a>
-<span class="sourceLineNo">104</span> utility1.waitFor(3000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.104"></a>
-<span class="sourceLineNo">105</span> @Override<a name="line.105"></a>
-<span class="sourceLineNo">106</span> public boolean evaluate() throws Exception {<a name="line.106"></a>
-<span class="sourceLineNo">107</span> for (RegionServerThread rs : rsThreads) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> return false;<a name="line.109"></a>
-<span class="sourceLineNo">110</span> }<a name="line.110"></a>
-<span class="sourceLineNo">111</span> }<a name="line.111"></a>
-<span class="sourceLineNo">112</span> return true;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span> @Override<a name="line.115"></a>
-<span class="sourceLineNo">116</span> public String explainFailure() throws Exception {<a name="line.116"></a>
-<span class="sourceLineNo">117</span> List<String> logRollInProgressRsList = new ArrayList<>();<a name="line.117"></a>
-<span class="sourceLineNo">118</span> for (RegionServerThread rs : rsThreads) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span> logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.120"></a>
-<span class="sourceLineNo">121</span> }<a name="line.121"></a>
-<span class="sourceLineNo">122</span> }<a name="line.122"></a>
-<span class="sourceLineNo">123</span> return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<a name="line.123"></a>
-<span class="sourceLineNo">124</span> }<a name="line.124"></a>
-<span class="sourceLineNo">125</span> });<a name="line.125"></a>
-<span class="sourceLineNo">126</span> }<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span> @Test<a name="line.128"></a>
-<span class="sourceLineNo">129</span> public void testCustomReplicationEndpoint() throws Exception {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> // test installing a custom replication endpoint other than the default one.<a name="line.130"></a>
-<span class="sourceLineNo">131</span> admin.addPeer("testCustomReplicationEndpoint",<a name="line.131"></a>
-<span class="sourceLineNo">132</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.132"></a>
-<span class="sourceLineNo">133</span> .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span> // check whether the class has been constructed and started<a name="line.135"></a>
-<span class="sourceLineNo">136</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> @Override<a name="line.137"></a>
-<span class="sourceLineNo">138</span> public boolean evaluate() throws Exception {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> return ReplicationEndpointForTest.contructedCount.get() >= numRegionServers;<a name="line.139"></a>
-<span class="sourceLineNo">140</span> }<a name="line.140"></a>
-<span class="sourceLineNo">141</span> });<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span> @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span> public boolean evaluate() throws Exception {<a name="line.145"></a>
-<span class="sourceLineNo">146</span> return ReplicationEndpointForTest.startedCount.get() >= numRegionServers;<a name="line.146"></a>
-<span class="sourceLineNo">147</span> }<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> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span> // now replicate some data.<a name="line.152"></a>
-<span class="sourceLineNo">153</span> doPut(Bytes.toBytes("row42"));<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span> public boolean evaluate() throws Exception {<a name="line.157"></a>
-<span class="sourceLineNo">158</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.158"></a>
-<span class="sourceLineNo">159</span> }<a name="line.159"></a>
-<span class="sourceLineNo">160</span> });<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span> doAssert(Bytes.toBytes("row42"));<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span> admin.removePeer("testCustomReplicationEndpoint");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span> @Test<a name="line.167"></a>
-<span class="sourceLineNo">168</span> public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.168"></a>
-<span class="sourceLineNo">169</span> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.169"></a>
-<span class="sourceLineNo">170</span> Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.170"></a>
-<span class="sourceLineNo">171</span> int peerCount = admin.getPeersCount();<a name="line.171"></a>
-<span class="sourceLineNo">172</span> final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.172"></a>
-<span class="sourceLineNo">173</span> admin.addPeer(id,<a name="line.173"></a>
-<span class="sourceLineNo">174</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.174"></a>
-<span class="sourceLineNo">175</span> .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.175"></a>
-<span class="sourceLineNo">176</span> // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.176"></a>
-<span class="sourceLineNo">177</span> // debug. Peer needs to be up for the edit to make it across. This wait on<a name="line.177"></a>
-<span class="sourceLineNo">178</span> // peer count seems to be a hack that has us not progress till peer is up.<a name="line.178"></a>
-<span class="sourceLineNo">179</span> if (admin.getPeersCount() <= peerCount) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> Threads.sleep(100);<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> // now replicate some data<a name="line.183"></a>
-<span class="sourceLineNo">184</span> doPut(row);<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.186"></a>
-<span class="sourceLineNo">187</span> @Override<a name="line.187"></a>
-<span class="sourceLineNo">188</span> public boolean evaluate() throws Exception {<a name="line.188"></a>
-<span class="sourceLineNo">189</span> // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.189"></a>
-<span class="sourceLineNo">190</span> // only send over one edit.<a name="line.190"></a>
-<span class="sourceLineNo">191</span> int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.191"></a>
-<span class="sourceLineNo">192</span> LOG.info("count=" + count);<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return ReplicationEndpointReturningFalse.replicated.get();<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span> });<a name="line.195"></a>
-<span class="sourceLineNo">196</span> if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span> throw ReplicationEndpointReturningFalse.ex.get();<a name="line.197"></a>
-<span class="sourceLineNo">198</span> }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span> admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<a name="line.200"></a>
-<span class="sourceLineNo">201</span> }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span> @Test<a name="line.203"></a>
-<span class="sourceLineNo">204</span> public void testInterClusterReplication() throws Exception {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> final String id = "testInterClusterReplication";<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span> List<HRegion> regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.207"></a>
-<span class="sourceLineNo">208</span> int totEdits = 0;<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> // Make sure edits are spread across regions because we do region based batching<a name="line.210"></a>
-<span class="sourceLineNo">211</span> // before shipping edits.<a name="line.211"></a>
-<span class="sourceLineNo">212</span> for(HRegion region: regions) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span> RegionInfo hri = region.getRegionInfo();<a name="line.213"></a>
-<span class="sourceLineNo">214</span> byte[] row = hri.getStartKey();<a name="line.214"></a>
-<span class="sourceLineNo">215</span> for (int i = 0; i < 100; i++) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span> if (row.length > 0) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span> Put put = new Put(row);<a name="line.217"></a>
-<span class="sourceLineNo">218</span> put.addColumn(famName, row, row);<a name="line.218"></a>
-<span class="sourceLineNo">219</span> region.put(put);<a name="line.219"></a>
-<span class="sourceLineNo">220</span> totEdits++;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> }<a name="line.221"></a>
-<span class="sourceLineNo">222</span> }<a name="line.222"></a>
-<span class="sourceLineNo">223</span> }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> admin.addPeer(id,<a name="line.225"></a>
-<span class="sourceLineNo">226</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.226"></a>
-<span class="sourceLineNo">227</span> .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.227"></a>
-<span class="sourceLineNo">228</span> null);<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span> final int numEdits = totEdits;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.231"></a>
-<span class="sourceLineNo">232</span> @Override<a name="line.232"></a>
-<span class="sourceLineNo">233</span> public boolean evaluate() throws Exception {<a name="line.233"></a>
-<span class="sourceLineNo">234</span> return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> }<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span> @Override<a name="line.237"></a>
-<span class="sourceLineNo">238</span> public String explainFailure() throws Exception {<a name="line.238"></a>
-<span class="sourceLineNo">239</span> String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.239"></a>
-<span class="sourceLineNo">240</span> + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return failure;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span> });<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> admin.removePeer("testInterClusterReplication");<a name="line.245"></a>
-<span class="sourceLineNo">246</span> utility1.deleteTableData(tableName);<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> @Test<a name="line.249"></a>
-<span class="sourceLineNo">250</span> public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.250"></a>
-<span class="sourceLineNo">251</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.251"></a>
-<span class="sourceLineNo">252</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.252"></a>
-<span class="sourceLineNo">253</span> //test that we can create mutliple WALFilters reflectively<a name="line.253"></a>
-<span class="sourceLineNo">254</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.254"></a>
-<span class="sourceLineNo">255</span> EverythingPassesWALEntryFilter.class.getName() +<a name="line.255"></a>
-<span class="sourceLineNo">256</span> "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.256"></a>
-<span class="sourceLineNo">257</span> admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.257"></a>
-<span class="sourceLineNo">258</span> // now replicate some data.<a name="line.258"></a>
-<span class="sourceLineNo">259</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> doPut(connection, Bytes.toBytes("row1"));<a name="line.260"></a>
-<span class="sourceLineNo">261</span> doPut(connection, row);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> doPut(connection, Bytes.toBytes("row2"));<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
-<span class="sourceLineNo">267</span> public boolean evaluate() throws Exception {<a name="line.267"></a>
-<span class="sourceLineNo">268</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.268"></a>
-<span class="sourceLineNo">269</span> }<a name="line.269"></a>
-<span class="sourceLineNo">270</span> });<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span> Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.272"></a>
-<span class="sourceLineNo">273</span> //make sure our reflectively created filter is in the filter chain<a name="line.273"></a>
-<span class="sourceLineNo">274</span> Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.274"></a>
-<span class="sourceLineNo">275</span> admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<a name="line.275"></a>
-<span class="sourceLineNo">276</span> }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span> @Test (expected=IOException.class)<a name="line.278"></a>
-<span class="sourceLineNo">279</span> public void testWALEntryFilterAddValidation() throws Exception {<a name="line.279"></a>
-<span class="sourceLineNo">280</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.280"></a>
-<span class="sourceLineNo">281</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.281"></a>
-<span class="sourceLineNo">282</span> //test that we can create mutliple WALFilters reflectively<a name="line.282"></a>
-<span class="sourceLineNo">283</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.283"></a>
-<span class="sourceLineNo">284</span> "IAmNotARealWalEntryFilter");<a name="line.284"></a>
-<span class="sourceLineNo">285</span> admin.addPeer("testWALEntryFilterAddValidation", rpc);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> @Test (expected=IOException.class)<a name="line.288"></a>
-<span class="sourceLineNo">289</span> public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.289"></a>
-<span class="sourceLineNo">290</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.290"></a>
-<span class="sourceLineNo">291</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.291"></a>
-<span class="sourceLineNo">292</span> //test that we can create mutliple WALFilters reflectively<a name="line.292"></a>
-<span class="sourceLineNo">293</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.293"></a>
-<span class="sourceLineNo">294</span> "IAmNotARealWalEntryFilter");<a name="line.294"></a>
-<span class="sourceLineNo">295</span> admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.295"></a>
-<span class="sourceLineNo">296</span> }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">028</span>import java.util.concurrent.Callable;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.Cell;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.Waiter;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Put;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Table;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.junit.AfterClass;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.junit.Assert;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.junit.Before;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.junit.BeforeClass;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.junit.ClassRule;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.junit.Test;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.experimental.categories.Category;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.Logger;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.slf4j.LoggerFactory;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>/**<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.66"></a>
+<span class="sourceLineNo">067</span> */<a name="line.67"></a>
+<span class="sourceLineNo">068</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.68"></a>
+<span class="sourceLineNo">069</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span> @ClassRule<a name="line.71"></a>
+<span class="sourceLineNo">072</span> public static final HBaseClassTestRule CLASS_RULE =<a name="line.72"></a>
+<span class="sourceLineNo">073</span> HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span> private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span> static int numRegionServers;<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span> @BeforeClass<a name="line.79"></a>
+<span class="sourceLineNo">080</span> public static void setUpBeforeClass() throws Exception {<a name="line.80"></a>
+<span class="sourceLineNo">081</span> TestReplicationBase.setUpBeforeClass();<a name="line.81"></a>
+<span class="sourceLineNo">082</span> numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<a name="line.82"></a>
+<span class="sourceLineNo">083</span> }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span> @AfterClass<a name="line.85"></a>
+<span class="sourceLineNo">086</span> public static void tearDownAfterClass() throws Exception {<a name="line.86"></a>
+<span class="sourceLineNo">087</span> TestReplicationBase.tearDownAfterClass();<a name="line.87"></a>
+<span class="sourceLineNo">088</span> // check stop is called<a name="line.88"></a>
+<span class="sourceLineNo">089</span> Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() > 0);<a name="line.89"></a>
+<span class="sourceLineNo">090</span> }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span> @Before<a name="line.92"></a>
+<span class="sourceLineNo">093</span> public void setup() throws Exception {<a name="line.93"></a>
+<span class="sourceLineNo">094</span> ReplicationEndpointForTest.contructedCount.set(0);<a name="line.94"></a>
+<span class="sourceLineNo">095</span> ReplicationEndpointForTest.startedCount.set(0);<a name="line.95"></a>
+<span class="sourceLineNo">096</span> ReplicationEndpointForTest.replicateCount.set(0);<a name="line.96"></a>
+<span class="sourceLineNo">097</span> ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.97"></a>
+<span class="sourceLineNo">098</span> ReplicationEndpointForTest.lastEntries = null;<a name="line.98"></a>
+<span class="sourceLineNo">099</span> final List<RegionServerThread> rsThreads =<a name="line.99"></a>
+<span class="sourceLineNo">100</span> utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.100"></a>
+<span class="sourceLineNo">101</span> for (RegionServerThread rs : rsThreads) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span> utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.102"></a>
+<span class="sourceLineNo">103</span> }<a name="line.103"></a>
+<span class="sourceLineNo">104</span> // Wait for all log roll to finish<a name="line.104"></a>
+<span class="sourceLineNo">105</span> utility1.waitFor(3000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.105"></a>
+<span class="sourceLineNo">106</span> @Override<a name="line.106"></a>
+<span class="sourceLineNo">107</span> public boolean evaluate() throws Exception {<a name="line.107"></a>
+<span class="sourceLineNo">108</span> for (RegionServerThread rs : rsThreads) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span> return false;<a name="line.110"></a>
+<span class="sourceLineNo">111</span> }<a name="line.111"></a>
+<span class="sourceLineNo">112</span> }<a name="line.112"></a>
+<span class="sourceLineNo">113</span> return true;<a name="line.113"></a>
+<span class="sourceLineNo">114</span> }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> @Override<a name="line.116"></a>
+<span class="sourceLineNo">117</span> public String explainFailure() throws Exception {<a name="line.117"></a>
+<span class="sourceLineNo">118</span> List<String> logRollInProgressRsList = new ArrayList<>();<a name="line.118"></a>
+<span class="sourceLineNo">119</span> for (RegionServerThread rs : rsThreads) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span> logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.121"></a>
+<span class="sourceLineNo">122</span> }<a name="line.122"></a>
+<span class="sourceLineNo">123</span> }<a name="line.123"></a>
+<span class="sourceLineNo">124</span> return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<a name="line.124"></a>
+<span class="sourceLineNo">125</span> }<a name="line.125"></a>
+<span class="sourceLineNo">126</span> });<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> @Test<a name="line.129"></a>
+<span class="sourceLineNo">130</span> public void testCustomReplicationEndpoint() throws Exception {<a name="line.130"></a>
+<span class="sourceLineNo">131</span> // test installing a custom replication endpoint other than the default one.<a name="line.131"></a>
+<span class="sourceLineNo">132</span> admin.addPeer("testCustomReplicationEndpoint",<a name="line.132"></a>
+<span class="sourceLineNo">133</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.133"></a>
+<span class="sourceLineNo">134</span> .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span> // check whether the class has been constructed and started<a name="line.136"></a>
+<span class="sourceLineNo">137</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.137"></a>
+<span class="sourceLineNo">138</span> @Override<a name="line.138"></a>
+<span class="sourceLineNo">139</span> public boolean evaluate() throws Exception {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> return ReplicationEndpointForTest.contructedCount.get() >= numRegionServers;<a name="line.140"></a>
+<span class="sourceLineNo">141</span> }<a name="line.141"></a>
+<span class="sourceLineNo">142</span> });<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span> @Override<a name="line.145"></a>
+<span class="sourceLineNo">146</span> public boolean evaluate() throws Exception {<a name="line.146"></a>
+<span class="sourceLineNo">147</span> return ReplicationEndpointForTest.startedCount.get() >= numRegionServers;<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><a name="line.150"></a>
+<span class="sourceLineNo">151</span> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span> // now replicate some data.<a name="line.153"></a>
+<span class="sourceLineNo">154</span> doPut(Bytes.toBytes("row42"));<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span> public boolean evaluate() throws Exception {<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<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> doAssert(Bytes.toBytes("row42"));<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span> admin.removePeer("testCustomReplicationEndpoint");<a name="line.165"></a>
+<span class="sourceLineNo">166</span> }<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span> @Test<a name="line.168"></a>
+<span class="sourceLineNo">169</span> public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.169"></a>
+<span class="sourceLineNo">170</span> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.170"></a>
+<span class="sourceLineNo">171</span> Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.171"></a>
+<span class="sourceLineNo">172</span> int peerCount = admin.getPeersCount();<a name="line.172"></a>
+<span class="sourceLineNo">173</span> final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.173"></a>
+<span class="sourceLineNo">174</span> admin.addPeer(id,<a name="line.174"></a>
+<span class="sourceLineNo">175</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.175"></a>
+<span class="sourceLineNo">176</span> .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.176"></a>
+<span class="sourceLineNo">177</span> // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.177"></a>
+<span class="sourceLineNo">178</span> // debug. Peer needs to be up for the edit to make it across. This wait on<a name="line.178"></a>
+<span class="sourceLineNo">179</span> // peer count seems to be a hack that has us not progress till peer is up.<a name="line.179"></a>
+<span class="sourceLineNo">180</span> if (admin.getPeersCount() <= peerCount) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span> LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> Threads.sleep(100);<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> // now replicate some data<a name="line.184"></a>
+<span class="sourceLineNo">185</span> doPut(row);<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.187"></a>
+<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span> public boolean evaluate() throws Exception {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.190"></a>
+<span class="sourceLineNo">191</span> // only send over one edit.<a name="line.191"></a>
+<span class="sourceLineNo">192</span> int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.192"></a>
+<span class="sourceLineNo">193</span> LOG.info("count=" + count);<a name="line.193"></a>
+<span class="sourceLineNo">194</span> return ReplicationEndpointReturningFalse.replicated.get();<a name="line.194"></a>
+<span class="sourceLineNo">195</span> }<a name="line.195"></a>
+<span class="sourceLineNo">196</span> });<a name="line.196"></a>
+<span class="sourceLineNo">197</span> if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> throw ReplicationEndpointReturningFalse.ex.get();<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span> admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<a name="line.201"></a>
+<span class="sourceLineNo">202</span> }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> @Test<a name="line.204"></a>
+<span class="sourceLineNo">205</span> public void testInterClusterReplication() throws Exception {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> final String id = "testInterClusterReplication";<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span> List<HRegion> regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.208"></a>
+<span class="sourceLineNo">209</span> int totEdits = 0;<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span> // Make sure edits are spread across regions because we do region based batching<a name="line.211"></a>
+<span class="sourceLineNo">212</span> // before shipping edits.<a name="line.212"></a>
+<span class="sourceLineNo">213</span> for(HRegion region: regions) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> RegionInfo hri = region.getRegionInfo();<a name="line.214"></a>
+<span class="sourceLineNo">215</span> byte[] row = hri.getStartKey();<a name="line.215"></a>
+<span class="sourceLineNo">216</span> for (int i = 0; i < 100; i++) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span> if (row.length > 0) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> Put put = new Put(row);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> put.addColumn(famName, row, row);<a name="line.219"></a>
+<span class="sourceLineNo">220</span> region.put(put);<a name="line.220"></a>
+<span class="sourceLineNo">221</span> totEdits++;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> }<a name="line.222"></a>
+<span class="sourceLineNo">223</span> }<a name="line.223"></a>
+<span class="sourceLineNo">224</span> }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span> admin.addPeer(id,<a name="line.226"></a>
+<span class="sourceLineNo">227</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.227"></a>
+<span class="sourceLineNo">228</span> .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.228"></a>
+<span class="sourceLineNo">229</span> null);<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span> final int numEdits = totEdits;<a name="line.231"></a>
+<span class="sourceLineNo">232</span> Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> @Override<a name="line.233"></a>
+<span class="sourceLineNo">234</span> public boolean evaluate() throws Exception {<a name="line.234"></a>
+<span class="sourceLineNo">235</span> return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<a name="line.235"></a>
+<span class="sourceLineNo">236</span> }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span> @Override<a name="line.238"></a>
+<span class="sourceLineNo">239</span> public String explainFailure() throws Exception {<a name="line.239"></a>
+<span class="sourceLineNo">240</span> String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.240"></a>
+<span class="sourceLineNo">241</span> + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.241"></a>
+<span class="sourceLineNo">242</span> return failure;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> });<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span> admin.removePeer("testInterClusterReplication");<a name="line.246"></a>
+<span class="sourceLineNo">247</span> utility1.deleteTableData(tableName);<a name="line.247"></a>
+<span class="sourceLineNo">248</span> }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span> @Test<a name="line.250"></a>
+<span class="sourceLineNo">251</span> public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.251"></a>
+<span class="sourceLineNo">252</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.252"></a>
+<span class="sourceLineNo">253</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.253"></a>
+<span class="sourceLineNo">254</span> //test that we can create mutliple WALFilters reflectively<a name="line.254"></a>
+<span class="sourceLineNo">255</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.255"></a>
+<span class="sourceLineNo">256</span> EverythingPassesWALEntryFilter.class.getName() +<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span> admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span> // now replicate some data.<a name="line.259"></a>
+<span class="sourceLineNo">260</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span> doPut(connection, Bytes.toBytes("row1"));<a name="line.261"></a>
+<span class="sourceLineNo">262</span> doPut(connection, row);<a name="line.262"></a>
+<span class="sourceLineNo">263</span> doPut(connection, Bytes.toBytes("row2"));<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.266"></a>
+<span class="sourceLineNo">267</span> @Override<a name="line.267"></a>
+<span class="sourceLineNo">268</span> public boolean evaluate() throws Exception {<a name="line.268"></a>
+<span class="sourceLineNo">269</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.269"></a>
+<span class="sourceLineNo">270</span> }<a name="line.270"></a>
+<span class="sourceLineNo">271</span> });<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span> Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.273"></a>
+<span class="sourceLineNo">274</span> //make sure our reflectively created filter is in the filter chain<a name="line.274"></a>
+<span class="sourceLineNo">275</span> Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.275"></a>
+<span class="sourceLineNo">276</span> admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<a name="line.276"></a>
+<span class="sourceLineNo">277</span> }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span> @Test (expected=IOException.class)<a name="line.279"></a>
+<span class="sourceLineNo">280</span> public void testWALEntryFilterAddValidation() throws Exception {<a name="line.280"></a>
+<span class="sourceLineNo">281</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.281"></a>
+<span class="sourceLineNo">282</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.282"></a>
+<span class="sourceLineNo">283</span> //test that we can create mutliple WALFilters reflectively<a name="line.283"></a>
+<span class="sourceLineNo">284</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.284"></a>
+<span class="sourceLineNo">285</span> "IAmNotARealWalEntryFilter");<a name="line.285"></a>
+<span class="sourceLineNo">286</span> admin.addPeer("testWALEntryFilterAddValidation", rpc);<a name="line.286"></a>
+<span class="sourceLineNo">287</span> }<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span> @Test (expected=IOException.class)<a name="line.289"></a>
+<span class="sourceLineNo">290</span> public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.290"></a>
+<span class="sourceLineNo">291</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.291"></a>
+<span class="sourceLineNo">292</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.292"></a>
+<span class="sourceLineNo">293</span> //test that we can create mutliple WALFilters reflectively<a name="line.293"></a>
+<span class="sourceLineNo">294</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.294"></a>
+<span class="sourceLineNo">295</span> "IAmNotARealWalEntryFilter");<a name="line.295"></a>
+<span class="sourceLineNo">296</span> admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.296"></a>
+<span class="sourceLineNo">297</span> }<a name="line.297"></a>
<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span> @Test<a name="line.299"></a>
-<span class="sourceLineNo">300</span> public void testMetricsSourceBaseSourcePassthrough(){<a name="line.300"></a>
-<span class="sourceLineNo">301</span> /*<a name="line.301"></a>
-<span class="sourceLineNo">302</span> The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.302"></a>
-<span class="sourceLineNo">303</span> and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.303"></a>
-<span class="sourceLineNo">304</span> Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.304"></a>
-<span class="sourceLineNo">305</span> allows for custom JMX metrics.<a name="line.305"></a>
-<span class="sourceLineNo">306</span> This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.306"></a>
-<span class="sourceLineNo">307</span> the two layers of wrapping to the actual BaseSource.<a name="line.307"></a>
-<span class="sourceLineNo">308</span> */<a name="line.308"></a>
-<span class="sourceLineNo">309</span> String id = "id";<a name="line.309"></a>
-<span class="sourceLineNo">310</span> DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.311"></a>
-<span class="sourceLineNo">312</span> when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.312"></a>
-<span class="sourceLineNo">313</span> MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.313"></a>
-<span class="sourceLineNo">314</span> when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span> MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.316"></a>
-<span class="sourceLineNo">317</span> MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> MetricsSource source = new MetricsSource(id, singleSourceSource, globalSourceSource);<a name="line.318"></a>
-<span class="sourceLineNo">319</span> String gaugeName = "gauge";<a name="line.319"></a>
-<span class="sourceLineNo">320</span> String singleGaugeName = "source.id." + gaugeName;<a name="line.320"></a>
-<span class="sourceLineNo">321</span> String globalGaugeName = "source." + gaugeName;<a name="line.321"></a>
-<span class="sourceLineNo">322</span> long delta = 1;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> String counterName = "counter";<a name="line.323"></a>
-<span class="sourceLineNo">324</span> String singleCounterName = "source.id." + counterName;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> String globalCounterName = "source." + counterName;<a name="line.325"></a>
-<span class="sourceLineNo">326</span> long count = 2;<a name="line.326"></a>
-<span class="sourceLineNo">327</span> source.decGauge(gaugeName, delta);<a name="line.327"></a>
-<span class="sourceLineNo">328</span> source.getMetricsContext();<a name="line.328"></a>
-<span class="sourceLineNo">329</span> source.getMetricsDescription();<a name="line.329"></a>
-<span class="sourceLineNo">330</span> source.getMetricsJmxContext();<a name="line.330"></a>
-<span class="sourceLineNo">331</span> source.getMetricsName();<a name="line.331"></a>
-<span class="sourceLineNo">332</span> source.incCounters(counterName, count);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> source.incGauge(gaugeName, delta);<a name="line.333"></a>
-<span class="sourceLineNo">334</span> source.init();<a name="line.334"></a>
-<span class="sourceLineNo">335</span> source.removeMetric(gaugeName);<a name="line.335"></a>
-<span class="sourceLineNo">336</span> source.setGauge(gaugeName, delta);<a name="line.336"></a>
-<span class="sourceLineNo">337</span> source.updateHistogram(counterName, count);<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.339"></a>
-<span class="sourceLineNo">340</span> verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.340"></a>
-<span class="sourceLineNo">341</span> verify(globalRms).getMetricsContext();<a name="line.341"></a>
-<span class="sourceLineNo">342</span> verify(globalRms).getMetricsJmxContext();<a name="line.342"></a>
-<span class="sourceLineNo">343</span> verify(globalRms).getMetricsName();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> verify(singleRms).incCounters(singleCounterName, count);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> verify(globalRms).incCounters(globalCounterName, count);<a name="line.345"></a>
-<span class="sourceLineNo">346</span> verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.346"></a>
-<span class="sourceLineNo">347</span> verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> verify(globalRms).init();<a name="line.348"></a>
-<span class="sourceLineNo">349</span> verify(singleRms).removeMetric(singleGaugeName);<a name="line.349"></a>
-<span class="sourceLineNo">350</span> verify(globalRms).removeMetric(globalGaugeName);<a name="line.350"></a>
-<span class="sourceLineNo">351</span> verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.351"></a>
-<span class="sourceLineNo">352</span> verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.352"></a>
-<span class="sourceLineNo">353</span> verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> verify(globalRms).updateHistogram(globalCounterName, count);<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 void doPut(byte[] row) throws IOException {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> doPut(connection, row);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> }<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> try (Table t = connection.getTable(tableName)) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span> Put put = new Put(row);<a name="line.365"></a>
-<span class="sourceLineNo">366</span> put.addColumn(famName, row, row);<a name="line.366"></a>
-<span class="sourceLineNo">367</span> t.put(put);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> }<a name="line.368"></a>
-<span class="sourceLineNo">369</span> }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span> private static void doAssert(byte[] row) throws Exception {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span> return; // first call<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span> Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<Cell> cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> Assert.assertEquals(1, cells.size());<a name="line.377"></a>
-<span class="sourceLineNo">378</span> Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.378"></a>
-<span class="sourceLineNo">379</span> cells.get(0).getRowLength(), row, 0, row.length));<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> static UUID uuid = UUID.randomUUID();<a name="line.383"></a>
-<span class="sourceLineNo">384</span> static AtomicInteger contructedCount = new AtomicInteger();<a name="line.384"></a>
-<span class="sourceLineNo">385</span> static AtomicInteger startedCount = new AtomicInteger();<a name="line.385"></a>
-<span class="sourceLineNo">386</span> static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.386"></a>
-<span class="sourceLineNo">387</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.387"></a>
-<span class="sourceLineNo">388</span> static volatile List<Entry> lastEntries = null;<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> public ReplicationEndpointForTest() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span> replicateCount.set(0);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> contructedCount.incrementAndGet();<a name="line.392"></a>
-<span class="sourceLineNo">393</span> }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span> public UUID getPeerUUID() {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return uuid;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> }<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span> @Override<a name="line.400"></a>
-<span class="sourceLineNo">401</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> replicateCount.incrementAndGet();<a name="line.402"></a>
-<span class="sourceLineNo">403</span> lastEntries = new ArrayList<>(replicateContext.entries);<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return true;<a name="line.404"></a>
-<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span> @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span> public void start() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span> startAsync();<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void stop() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> stopAsync();<a name="line.414"></a>
-<span class="sourceLineNo">415</span> }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span> @Override<a name="line.417"></a>
-<span class="sourceLineNo">418</span> protected void doStart() {<a name="line.418"></a>
-<span class="sourceLineNo">419</span> startedCount.incrementAndGet();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> notifyStarted();<a name="line.420"></a>
-<span class="sourceLineNo">421</span> }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span> @Override<a name="line.423"></a>
-<span class="sourceLineNo">424</span> protected void doStop() {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> stoppedCount.incrementAndGet();<a name="line.425"></a>
-<span class="sourceLineNo">426</span> notifyStopped();<a name="line.426"></a>
-<span class="sourceLineNo">427</span> }<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span> public static class InterClusterReplicationEndpointForTest<a name="line.430"></a>
-<span class="sourceLineNo">431</span> extends HBaseInterClusterReplicationEndpoint {<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.433"></a>
-<span class="sourceLineNo">434</span> static boolean failedOnce;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> public InterClusterReplicationEndpointForTest() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span> replicateCount.set(0);<a name="line.437"></a>
-<span class="sourceLineNo">438</span> }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span> @Override<a name="line.440"></a>
-<span class="sourceLineNo">441</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> boolean success = super.replicate(replicateContext);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> if (success) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> replicateCount.addAndGet(replicateContext.entries.size());<a name="line.444"></a>
-<span class="sourceLineNo">445</span> }<a name="line.445"></a>
-<span class="sourceLineNo">446</span> return success;<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> @Override<a name="line.449"></a>
-<span class="sourceLineNo">450</span> protected Replicator createReplicator(List<Entry> entries, int ordinal) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span> // Fail only once, we don't want to slow down the test.<a name="line.451"></a>
-<span class="sourceLineNo">452</span> if (failedOnce) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> return new DummyReplicator(entries, ordinal);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> } else {<a name="line.454"></a>
-<span class="sourceLineNo">455</span> failedOnce = true;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> return new FailingDummyReplicator(entries, ordinal);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> }<a name="line.457"></a>
-<span class="sourceLineNo">458</span> }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span> protected class DummyReplicator extends Replicator {<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span> private int ordinal;<a name="line.462"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span> @Test<a name="line.300"></a>
+<span class="sourceLineNo">301</span> public void testMetricsSourceBaseSourcePassthrough(){<a name="line.301"></a>
+<span class="sourceLineNo">302</span> /*<a name="line.302"></a>
+<span class="sourceLineNo">303</span> The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.303"></a>
+<span class="sourceLineNo">304</span> and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.304"></a>
+<span class="sourceLineNo">305</span> Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.305"></a>
+<span class="sourceLineNo">306</span> allows for custom JMX metrics.<a name="line.306"></a>
+<span class="sourceLineNo">307</span> This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.307"></a>
+<span class="sourceLineNo">308</span> the two layers of wrapping to the actual BaseSource.<a name="line.308"></a>
+<span class="sourceLineNo">309</span> */<a name="line.309"></a>
+<span class="sourceLineNo">310</span> String id = "id";<a name="line.310"></a>
+<span class="sourceLineNo">311</span> DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.311"></a>
+<span class="sourceLineNo">312</span> MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.312"></a>
+<span class="sourceLineNo">313</span> when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.313"></a>
+<span class="sourceLineNo">314</span> MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.314"></a>
+<span class="sourceLineNo">315</span> when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span> MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.317"></a>
+<span class="sourceLineNo">318</span> MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> MetricsSource source = new MetricsSource(id, singleSourceSource, globalSourceSource);<a name="line.319"></a>
+<span class="sourceLineNo">320</span> String gaugeName = "gauge";<a name="line.320"></a>
+<span class="sourceLineNo">321</span> String singleGaugeName = "source.id." + gaugeName;<a name="line.321"></a>
+<span class="sourceLineNo">322</span> String globalGaugeName = "source." + gaugeName;<a name="line.322"></a>
+<span class="sourceLineNo">323</span> long delta = 1;<a name="line.323"></a>
+<span class="sourceLineNo">324</span> String counterName = "counter";<a name="line.324"></a>
+<span class="sourceLineNo">325</span> String singleCounterName = "source.id." + counterName;<a name="line.325"></a>
+<span class="sourceLineNo">326</span> String globalCounterName = "source." + counterName;<a name="line.326"></a>
+<span class="sourceLineNo">327</span> long count = 2;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> source.decGauge(gaugeName, delta);<a name="line.328"></a>
+<span class="sourceLineNo">329</span> source.getMetricsContext();<a name="line.329"></a>
+<span class="sourceLineNo">330</span> source.getMetricsDescription();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> source.getMetricsJmxContext();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> source.getMetricsName();<a name="line.332"></a>
+<span class="sourceLineNo">333</span> source.incCounters(counterName, count);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> source.incGauge(gaugeName, delta);<a name="line.334"></a>
+<span class="sourceLineNo">335</span> source.init();<a name="line.335"></a>
+<span class="sourceLineNo">336</span> source.removeMetric(gaugeName);<a name="line.336"></a>
+<span class="sourceLineNo">337</span> source.setGauge(gaugeName, delta);<a name="line.337"></a>
+<span class="sourceLineNo">338</span> source.updateHistogram(counterName, count);<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.340"></a>
+<span class="sourceLineNo">341</span> verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.341"></a>
+<span class="sourceLineNo">342</span> verify(globalRms).getMetricsContext();<a name="line.342"></a>
+<span class="sourceLineNo">343</span> verify(globalRms).getMetricsJmxContext();<a name="line.343"></a>
+<span class="sourceLineNo">344</span> verify(globalRms).getMetricsName();<a name="line.344"></a>
+<span class="sourceLineNo">345</span> verify(singleRms).incCounters(singleCounterName, count);<a name="line.345"></a>
+<span class="sourceLineNo">346</span> verify(globalRms).incCounters(globalCounterName, count);<a name="line.346"></a>
+<span class="sourceLineNo">347</span> verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.347"></a>
+<span class="sourceLineNo">348</span> verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> verify(globalRms).init();<a name="line.349"></a>
+<span class="sourceLineNo">350</span> verify(singleRms).removeMetric(singleGaugeName);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> verify(globalRms).removeMetric(globalGaugeName);<a name="line.351"></a>
+<span class="sourceLineNo">352</span> verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.352"></a>
+<span class="sourceLineNo">353</span> verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.354"></a>
+<span class="sourceLineNo">355</span> verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.355"></a>
+<span class="sourceLineNo">356</span> }<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span> private void doPut(byte[] row) throws IOException {<a name="line.358"></a>
+<span class="sourceLineNo">359</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span> doPut(connection, row);<a name="line.360"></a>
+<span class="sourceLineNo">361</span> }<a name="line.361"></a>
+<span class="sourceLineNo">362</span> }<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span> private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.364"></a>
+<span class="sourceLineNo">365</span> try (Table t = connection.getTable(tableName)) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> Put put = new Put(row);<a name="line.366"></a>
+<span class="sourceLineNo">367</span> put.addColumn(famName, row, row);<a name="line.367"></a>
+<span class="sourceLineNo">368</span> t.put(put);<a name="line.368"></a>
+<span class="sourceLineNo">369</span> }<a name="line.369"></a>
+<span class="sourceLineNo">370</span> }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span> private static void doAssert(byte[] row) throws Exception {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span> return; // first call<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.376"></a>
+<span class="sourceLineNo">377</span> List<Cell> cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.377"></a>
+<span class="sourceLineNo">378</span> Assert.assertEquals(1, cells.size());<a name="line.378"></a>
+<span class="sourceLineNo">379</span> Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> cells.get(0).getRowLength(), row, 0, row.length));<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> static UUID uuid = UUID.randomUUID();<a name="line.384"></a>
+<span class="sourceLineNo">385</span> static AtomicInteger contructedCount = new AtomicInteger();<a name="line.385"></a>
+<span class="sourceLineNo">386</span> static AtomicInteger startedCount = new AtomicInteger();<a name="line.386"></a>
+<span class="sourceLineNo">387</span> static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.387"></a>
+<span class="sourceLineNo">388</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.388"></a>
+<span class="sourceLineNo">389</span> static volatile List<Entry> lastEntries = null;<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> public ReplicationEndpointForTest() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> replicateCount.set(0);<a name="line.392"></a>
+<span class="sourceLineNo">393</span> contructedCount.incrementAndGet();<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span> @Override<a name="line.396"></a>
+<span class="sourceLineNo">397</span> public UUID getPeerUUID() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> return uuid;<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> @Override<a name="line.401"></a>
+<span class="sourceLineNo">402</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span> replicateCount.incrementAndGet();<a name="line.403"></a>
+<span class="sourceLineNo">404</span> lastEntries = new ArrayList<>(replicateContext.entries);<a name="line.404"></a>
+<span class="sourceLineNo">405</span> return true;<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> @Override<a name="line.408"></a>
+<span class="sourceLineNo">409</span> public void start() {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> startAsync();<a name="line.410"></a>
+<span class="sourceLineNo">411</span> }<a name="line.411"></a>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span> @Override<a name="line.413"></a>
+<span class="sourceLineNo">414</span> public void stop() {<a name="line.414"></a>
+<span class="sourceLineNo">415</span> stopAsync();<a name="line.415"></a>
+<span class="sourceLineNo">416</span> }<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span> @Override<a name="line.418"></a>
+<span class="sourceLineNo">419</span> protected void doStart() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span> startedCount.incrementAndGet();<a name="line.420"></a>
+<span class="sourceLineNo">421</span> notifyStarted();<a name="line.421"></a>
+<span class="sourceLineNo">422</span> }<a name="line.422"></a>
+<span class="sourceLineNo">423</span><a name="line.423"></a>
+<span class="sourceLineNo">424</span> @Override<a name="line.424"></a>
+<span class="sourceLineNo">425</span> protected void doStop() {<a name="line.425"></a>
+<span class="sourceLineNo">426</span> stoppedCount.incrementAndGet();<a name="line.426"></a>
+<span class="sourceLineNo">427</span> notifyStopped();<a name="line.427"></a>
+<span class="sourceLineNo">428</span> }<a name="line.428"></a>
+<span class="sourceLineNo">429</span> }<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span> public static class InterClusterReplicationEndpointForTest<a name="line.431"></a>
+<span class="sourceLineNo">432</span> extends HBaseInterClusterReplicationEndpoint {<a name="line.432"></a>
+<span class="sourceLineNo">433</span><a name="line.433"></a>
+<span class="sourceLineNo">434</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.434"></a>
+<span class="sourceLineNo">435</span> static boolean failedOnce;<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span> public InterClusterReplicationEndpointForTest() {<a name="line.437"></a>
+<span class="sourceLineNo">438</span> replicateCount.set(0);<a name="line.438"></a>
+<span class="sourceLineNo">439</span> }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span> @Override<a name="line.441"></a>
+<span class="sourceLineNo">442</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span> boolean success = super.replicate(replicateContext);<a name="line.443"></a>
+<span class="sourceLineNo">444</span> if (success) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span> replicateCount.addAndGet(replicateContext.entries.size());<a name="line.445"></a>
+<span class="sourceLineNo">446</span> }<a name="line.446"></a>
+<span class="sourceLineNo">447</span> return success;<a name="line.447"></a>
+<span class="sourceLineNo">448</span> }<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> protected Callable<Integer> createReplicator(List<Entry> entries, int ordinal) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span> // Fail only once, we don't want to slow down the test.<a name="line.452"></a>
+<span class="sourceLineNo">453</span> if (failedOnce) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span> return () -> ordinal;<a name="line.454"></a>
+<span class="sourceLineNo">455</span> } else {<a name="line.455"></a>
+<span class="sourceLineNo">456</span> failedOnce = true;<a name="line.456"></a>
+<span class="sourceLineNo">457</span> return () -> {<a name="line.457"></a>
+<span class="sourceLineNo">458</span> throw new IOException("Sample Exception: Failed to replicate.");<a name="line.458"></a>
+<span class="sourceLineNo">459</span> };<a name="line.459"></a>
+<span class="sourceLineNo">460</span> }<a name="line.460"></a>
+<span class="sourceLineNo">461</span> }<a name="line.461"></a>
+<span class="sourceLineNo">462</span> }<a name="line.462"></a>
<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span> public DummyReplicator(List<Entry> entries, int ordinal) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> super(entries, ordinal);<a name="line.465"></a>
-<span class="sourceLineNo">466</span> this.ordinal = ordinal;<a name="line.466"></a>
-<span class="sourceLineNo">467</span> }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span> @Override<a name="line.469"></a>
-<span class="sourceLineNo">470</span> public Integer call() throws IOException {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> return ordin
<TRUNCATED>
[50/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index eab9d19..2e471d7 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Checkstyle Results</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -281,10 +281,10 @@
<th><img src="images/icon_warning_sml.gif" alt="" /> Warnings</th>
<th><img src="images/icon_error_sml.gif" alt="" /> Errors</th></tr>
<tr class="b">
-<td>3607</td>
+<td>3609</td>
<td>0</td>
<td>0</td>
-<td>15867</td></tr></table></div>
+<td>15864</td></tr></table></div>
<div class="section">
<h2><a name="Files"></a>Files</h2>
<table border="0" class="table table-striped">
@@ -7937,7 +7937,7 @@
<td><a href="#org.apache.hadoop.hbase.replication.ReplicationEndpoint.java">org/apache/hadoop/hbase/replication/ReplicationEndpoint.java</a></td>
<td>0</td>
<td>0</td>
-<td>5</td></tr>
+<td>4</td></tr>
<tr class="a">
<td><a href="#org.apache.hadoop.hbase.replication.ReplicationException.java">org/apache/hadoop/hbase/replication/ReplicationException.java</a></td>
<td>0</td>
@@ -8024,2186 +8024,2181 @@
<td>0</td>
<td>6</td></tr>
<tr class="b">
-<td><a href="#org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.java">org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>1</td></tr>
-<tr class="a">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.HFileReplicator.java">org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource.java">org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl.java">org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl.java">org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.MetricsSink.java">org/apache/hadoop/hbase/replication/regionserver/MetricsSink.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.MetricsSource.java">org/apache/hadoop/hbase/replication/regionserver/MetricsSource.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.RegionReplicaReplicationEndpoint.java">org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.Replication.java">org/apache/hadoop/hbase/replication/regionserver/Replication.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationLoad.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationObserver.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationObserver.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSink.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.java</a></td>
<td>0</td>
<td>0</td>
<td>15</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceFactory.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceFactory.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceInterface.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceManager.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationThrottler.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationThrottler.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestMetricsReplicationSourceFactoryImpl.java">org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceFactoryImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestMetricsReplicationSourceImpl.java">org/apache/hadoop/hbase/replication/regionserver/TestMetricsReplicationSourceImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestRegionReplicaReplicationEndpointNoMaster.java">org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpointNoMaster.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestReplicationSink.java">org/apache/hadoop/hbase/replication/regionserver/TestReplicationSink.java</a></td>
<td>0</td>
<td>0</td>
<td>11</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestReplicationSource.java">org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestReplicationSourceManager.java">org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestWALEntrySinkFilter.java">org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.java</a></td>
<td>0</td>
<td>0</td>
<td>16</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestWALEntryStream.java">org/apache/hadoop/hbase/replication/regionserver/TestWALEntryStream.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.WALEntrySinkFilter.java">org/apache/hadoop/hbase/replication/regionserver/WALEntrySinkFilter.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.replication.regionserver.WALEntryStream.java">org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.ExistsResource.java">org/apache/hadoop/hbase/rest/ExistsResource.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.HBaseRESTTestingUtility.java">org/apache/hadoop/hbase/rest/HBaseRESTTestingUtility.java</a></td>
<td>0</td>
<td>0</td>
<td>14</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.MetricsREST.java">org/apache/hadoop/hbase/rest/MetricsREST.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.MetricsRESTSourceImpl.java">org/apache/hadoop/hbase/rest/MetricsRESTSourceImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>12</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.MultiRowResource.java">org/apache/hadoop/hbase/rest/MultiRowResource.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.NamespacesInstanceResource.java">org/apache/hadoop/hbase/rest/NamespacesInstanceResource.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.NamespacesResource.java">org/apache/hadoop/hbase/rest/NamespacesResource.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.PerformanceEvaluation.java">org/apache/hadoop/hbase/rest/PerformanceEvaluation.java</a></td>
<td>0</td>
<td>0</td>
<td>20</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.ProtobufMessageHandler.java">org/apache/hadoop/hbase/rest/ProtobufMessageHandler.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.RESTServer.java">org/apache/hadoop/hbase/rest/RESTServer.java</a></td>
<td>0</td>
<td>0</td>
<td>16</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.RESTServlet.java">org/apache/hadoop/hbase/rest/RESTServlet.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.RESTServletContainer.java">org/apache/hadoop/hbase/rest/RESTServletContainer.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.RegionsResource.java">org/apache/hadoop/hbase/rest/RegionsResource.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.ResourceBase.java">org/apache/hadoop/hbase/rest/ResourceBase.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.ResultGenerator.java">org/apache/hadoop/hbase/rest/ResultGenerator.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.RootResource.java">org/apache/hadoop/hbase/rest/RootResource.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.RowResource.java">org/apache/hadoop/hbase/rest/RowResource.java</a></td>
<td>0</td>
<td>0</td>
<td>60</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.RowResourceBase.java">org/apache/hadoop/hbase/rest/RowResourceBase.java</a></td>
<td>0</td>
<td>0</td>
<td>15</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.RowSpec.java">org/apache/hadoop/hbase/rest/RowSpec.java</a></td>
<td>0</td>
<td>0</td>
<td>32</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.ScannerInstanceResource.java">org/apache/hadoop/hbase/rest/ScannerInstanceResource.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.ScannerResource.java">org/apache/hadoop/hbase/rest/ScannerResource.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.ScannerResultGenerator.java">org/apache/hadoop/hbase/rest/ScannerResultGenerator.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.SchemaResource.java">org/apache/hadoop/hbase/rest/SchemaResource.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.StorageClusterStatusResource.java">org/apache/hadoop/hbase/rest/StorageClusterStatusResource.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.StorageClusterVersionResource.java">org/apache/hadoop/hbase/rest/StorageClusterVersionResource.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.TableResource.java">org/apache/hadoop/hbase/rest/TableResource.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.TableScanResource.java">org/apache/hadoop/hbase/rest/TableScanResource.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.TestGetAndPutResource.java">org/apache/hadoop/hbase/rest/TestGetAndPutResource.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.TestMetricsRESTSourceImpl.java">org/apache/hadoop/hbase/rest/TestMetricsRESTSourceImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.TestMultiRowResource.java">org/apache/hadoop/hbase/rest/TestMultiRowResource.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.TestNamespacesInstanceResource.java">org/apache/hadoop/hbase/rest/TestNamespacesInstanceResource.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.TestNamespacesResource.java">org/apache/hadoop/hbase/rest/TestNamespacesResource.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.TestScannerResource.java">org/apache/hadoop/hbase/rest/TestScannerResource.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.TestScannersWithFilters.java">org/apache/hadoop/hbase/rest/TestScannersWithFilters.java</a></td>
<td>0</td>
<td>0</td>
<td>144</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.TestScannersWithLabels.java">org/apache/hadoop/hbase/rest/TestScannersWithLabels.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.TestSchemaResource.java">org/apache/hadoop/hbase/rest/TestSchemaResource.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.TestTableScan.java">org/apache/hadoop/hbase/rest/TestTableScan.java</a></td>
<td>0</td>
<td>0</td>
<td>18</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.VersionResource.java">org/apache/hadoop/hbase/rest/VersionResource.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.client.Client.java">org/apache/hadoop/hbase/rest/client/Client.java</a></td>
<td>0</td>
<td>0</td>
<td>29</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.client.RemoteAdmin.java">org/apache/hadoop/hbase/rest/client/RemoteAdmin.java</a></td>
<td>0</td>
<td>0</td>
<td>107</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.client.RemoteHTable.java">org/apache/hadoop/hbase/rest/client/RemoteHTable.java</a></td>
<td>0</td>
<td>0</td>
<td>122</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.client.Response.java">org/apache/hadoop/hbase/rest/client/Response.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.client.TestRemoteHTableRetries.java">org/apache/hadoop/hbase/rest/client/TestRemoteHTableRetries.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.client.TestRemoteTable.java">org/apache/hadoop/hbase/rest/client/TestRemoteTable.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.filter.GZIPRequestStream.java">org/apache/hadoop/hbase/rest/filter/GZIPRequestStream.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.filter.GZIPResponseStream.java">org/apache/hadoop/hbase/rest/filter/GZIPResponseStream.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.filter.GzipFilter.java">org/apache/hadoop/hbase/rest/filter/GzipFilter.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.filter.RestCsrfPreventionFilter.java">org/apache/hadoop/hbase/rest/filter/RestCsrfPreventionFilter.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.model.CellModel.java">org/apache/hadoop/hbase/rest/model/CellModel.java</a></td>
<td>0</td>
<td>0</td>
<td>16</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.model.CellSetModel.java">org/apache/hadoop/hbase/rest/model/CellSetModel.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.model.ColumnSchemaModel.java">org/apache/hadoop/hbase/rest/model/ColumnSchemaModel.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.model.NamespacesInstanceModel.java">org/apache/hadoop/hbase/rest/model/NamespacesInstanceModel.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.model.NamespacesModel.java">org/apache/hadoop/hbase/rest/model/NamespacesModel.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.model.ScannerModel.java">org/apache/hadoop/hbase/rest/model/ScannerModel.java</a></td>
<td>0</td>
<td>0</td>
<td>123</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.model.StorageClusterStatusModel.java">org/apache/hadoop/hbase/rest/model/StorageClusterStatusModel.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.model.TableInfoModel.java">org/apache/hadoop/hbase/rest/model/TableInfoModel.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.model.TableListModel.java">org/apache/hadoop/hbase/rest/model/TableListModel.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.model.TableModel.java">org/apache/hadoop/hbase/rest/model/TableModel.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.model.TableRegionModel.java">org/apache/hadoop/hbase/rest/model/TableRegionModel.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.model.TableSchemaModel.java">org/apache/hadoop/hbase/rest/model/TableSchemaModel.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.model.TestStorageClusterStatusModel.java">org/apache/hadoop/hbase/rest/model/TestStorageClusterStatusModel.java</a></td>
<td>0</td>
<td>0</td>
<td>8</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.model.VersionModel.java">org/apache/hadoop/hbase/rest/model/VersionModel.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.provider.JAXBContextResolver.java">org/apache/hadoop/hbase/rest/provider/JAXBContextResolver.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rest.provider.consumer.ProtobufMessageBodyConsumer.java">org/apache/hadoop/hbase/rest/provider/consumer/ProtobufMessageBodyConsumer.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.rest.provider.producer.PlainTextMessageBodyProducer.java">org/apache/hadoop/hbase/rest/provider/producer/PlainTextMessageBodyProducer.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.rsgroup.IntegrationTestRSGroup.java">org/apache/hadoop/hbase/rsgroup/IntegrationTestRSGroup.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.AbstractHBaseSaslRpcClient.java">org/apache/hadoop/hbase/security/AbstractHBaseSaslRpcClient.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.AccessDeniedException.java">org/apache/hadoop/hbase/security/AccessDeniedException.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.AuthMethod.java">org/apache/hadoop/hbase/security/AuthMethod.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.CryptoAESUnwrapHandler.java">org/apache/hadoop/hbase/security/CryptoAESUnwrapHandler.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.CryptoAESWrapHandler.java">org/apache/hadoop/hbase/security/CryptoAESWrapHandler.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.EncryptionUtil.java">org/apache/hadoop/hbase/security/EncryptionUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.HBaseKerberosUtils.java">org/apache/hadoop/hbase/security/HBaseKerberosUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.HBasePolicyProvider.java">org/apache/hadoop/hbase/security/HBasePolicyProvider.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.HBaseSaslRpcClient.java">org/apache/hadoop/hbase/security/HBaseSaslRpcClient.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.HBaseSaslRpcServer.java">org/apache/hadoop/hbase/security/HBaseSaslRpcServer.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.HadoopSecurityEnabledUserProviderForTesting.java">org/apache/hadoop/hbase/security/HadoopSecurityEnabledUserProviderForTesting.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.NettyHBaseRpcConnectionHeaderHandler.java">org/apache/hadoop/hbase/security/NettyHBaseRpcConnectionHeaderHandler.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.NettyHBaseSaslRpcClient.java">org/apache/hadoop/hbase/security/NettyHBaseSaslRpcClient.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.NettyHBaseSaslRpcClientHandler.java">org/apache/hadoop/hbase/security/NettyHBaseSaslRpcClientHandler.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.SaslChallengeDecoder.java">org/apache/hadoop/hbase/security/SaslChallengeDecoder.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.SaslStatus.java">org/apache/hadoop/hbase/security/SaslStatus.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.SaslUnwrapHandler.java">org/apache/hadoop/hbase/security/SaslUnwrapHandler.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.SaslUtil.java">org/apache/hadoop/hbase/security/SaslUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.SaslWrapHandler.java">org/apache/hadoop/hbase/security/SaslWrapHandler.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.SecurityInfo.java">org/apache/hadoop/hbase/security/SecurityInfo.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.SecurityUtil.java">org/apache/hadoop/hbase/security/SecurityUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.Superusers.java">org/apache/hadoop/hbase/security/Superusers.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.TestSecureIPC.java">org/apache/hadoop/hbase/security/TestSecureIPC.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.TestUser.java">org/apache/hadoop/hbase/security/TestUser.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.TestUsersOperationsWithSecureHadoop.java">org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.User.java">org/apache/hadoop/hbase/security/User.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.access.AccessControlClient.java">org/apache/hadoop/hbase/security/access/AccessControlClient.java</a></td>
<td>0</td>
<td>0</td>
<td>49</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.access.AccessControlFilter.java">org/apache/hadoop/hbase/security/access/AccessControlFilter.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.access.AccessControlLists.java">org/apache/hadoop/hbase/security/access/AccessControlLists.java</a></td>
<td>0</td>
<td>0</td>
<td>18</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.access.AccessControlUtil.java">org/apache/hadoop/hbase/security/access/AccessControlUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>42</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.access.AccessController.java">org/apache/hadoop/hbase/security/access/AccessController.java</a></td>
<td>0</td>
<td>0</td>
<td>27</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.access.AuthResult.java">org/apache/hadoop/hbase/security/access/AuthResult.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.access.Permission.java">org/apache/hadoop/hbase/security/access/Permission.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint.java">org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.access.SecureTestUtil.java">org/apache/hadoop/hbase/security/access/SecureTestUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.access.ShadedAccessControlUtil.java">org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>50</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.access.TableAuthManager.java">org/apache/hadoop/hbase/security/access/TableAuthManager.java</a></td>
<td>0</td>
<td>0</td>
<td>43</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.access.TablePermission.java">org/apache/hadoop/hbase/security/access/TablePermission.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.access.TestAccessControlFilter.java">org/apache/hadoop/hbase/security/access/TestAccessControlFilter.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.access.TestAccessController.java">org/apache/hadoop/hbase/security/access/TestAccessController.java</a></td>
<td>0</td>
<td>0</td>
<td>18</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.access.TestAccessController2.java">org/apache/hadoop/hbase/security/access/TestAccessController2.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.access.TestCellACLWithMultipleVersions.java">org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.access.TestCellACLs.java">org/apache/hadoop/hbase/security/access/TestCellACLs.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.access.TestNamespaceCommands.java">org/apache/hadoop/hbase/security/access/TestNamespaceCommands.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.access.TestTablePermissions.java">org/apache/hadoop/hbase/security/access/TestTablePermissions.java</a></td>
<td>0</td>
<td>0</td>
<td>13</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.access.TestWithDisabledAuthorization.java">org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.access.UserPermission.java">org/apache/hadoop/hbase/security/access/UserPermission.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.access.ZKPermissionWatcher.java">org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.token.AuthenticationKey.java">org/apache/hadoop/hbase/security/token/AuthenticationKey.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.token.AuthenticationTokenIdentifier.java">org/apache/hadoop/hbase/security/token/AuthenticationTokenIdentifier.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.token.AuthenticationTokenSecretManager.java">org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.token.AuthenticationTokenSelector.java">org/apache/hadoop/hbase/security/token/AuthenticationTokenSelector.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.token.FsDelegationToken.java">org/apache/hadoop/hbase/security/token/FsDelegationToken.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.token.SecureTestCluster.java">org/apache/hadoop/hbase/security/token/SecureTestCluster.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.token.TestTokenAuthentication.java">org/apache/hadoop/hbase/security/token/TestTokenAuthentication.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.token.TestZKSecretWatcher.java">org/apache/hadoop/hbase/security/token/TestZKSecretWatcher.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.token.TokenProvider.java">org/apache/hadoop/hbase/security/token/TokenProvider.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.token.TokenUtil.java">org/apache/hadoop/hbase/security/token/TokenUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.token.ZKSecretWatcher.java">org/apache/hadoop/hbase/security/token/ZKSecretWatcher.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.CellVisibility.java">org/apache/hadoop/hbase/security/visibility/CellVisibility.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.DefaultVisibilityLabelServiceImpl.java">org/apache/hadoop/hbase/security/visibility/DefaultVisibilityLabelServiceImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>8</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.DefinedSetFilterScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/DefinedSetFilterScanLabelGenerator.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.EnforcingScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/EnforcingScanLabelGenerator.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.ExpAsStringVisibilityLabelServiceImpl.java">org/apache/hadoop/hbase/security/visibility/ExpAsStringVisibilityLabelServiceImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.ExpressionExpander.java">org/apache/hadoop/hbase/security/visibility/ExpressionExpander.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.ExpressionParser.java">org/apache/hadoop/hbase/security/visibility/ExpressionParser.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.FeedUserAuthScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/FeedUserAuthScanLabelGenerator.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.LabelFilteringScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/LabelFilteringScanLabelGenerator.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.LoadTestDataGeneratorWithVisibilityLabels.java">org/apache/hadoop/hbase/security/visibility/LoadTestDataGeneratorWithVisibilityLabels.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.ScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/ScanLabelGenerator.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.SimpleScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/SimpleScanLabelGenerator.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.TestExpressionExpander.java">org/apache/hadoop/hbase/security/visibility/TestExpressionExpander.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.TestExpressionParser.java">org/apache/hadoop/hbase/security/visibility/TestExpressionParser.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabels.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsOpWithDifferentUsersNoACL.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsOpWithDifferentUsersNoACL.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsReplication.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsReplication.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithACL.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithACL.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithCustomVisLabService.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithCustomVisLabService.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithDefaultVisLabelService.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithDeletes.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.TestVisibilityLablesWithGroups.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLablesWithGroups.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityClient.java">org/apache/hadoop/hbase/security/visibility/VisibilityClient.java</a></td>
<td>0</td>
<td>0</td>
<td>38</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityConstants.java">org/apache/hadoop/hbase/security/visibility/VisibilityConstants.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityController.java">org/apache/hadoop/hbase/security/visibility/VisibilityController.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityExpEvaluator.java">org/apache/hadoop/hbase/security/visibility/VisibilityExpEvaluator.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityLabelFilter.java">org/apache/hadoop/hbase/security/visibility/VisibilityLabelFilter.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityLabelService.java">org/apache/hadoop/hbase/security/visibility/VisibilityLabelService.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityLabelServiceManager.java">org/apache/hadoop/hbase/security/visibility/VisibilityLabelServiceManager.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityLabelsCache.java">org/apache/hadoop/hbase/security/visibility/VisibilityLabelsCache.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityLabelsValidator.java">org/apache/hadoop/hbase/security/visibility/VisibilityLabelsValidator.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityNewVersionBehaivorTracker.java">org/apache/hadoop/hbase/security/visibility/VisibilityNewVersionBehaivorTracker.java</a></td>
<td>0</td>
<td>0</td>
<td>15</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityReplicationEndpoint.java">org/apache/hadoop/hbase/security/visibility/VisibilityReplicationEndpoint.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityScanDeleteTracker.java">org/apache/hadoop/hbase/security/visibility/VisibilityScanDeleteTracker.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityTestUtil.java">org/apache/hadoop/hbase/security/visibility/VisibilityTestUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.security.visibility.VisibilityUtils.java">org/apache/hadoop/hbase/security/visibility/VisibilityUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>9</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.security.visibility.ZKVisibilityLabelWatcher.java">org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil.java">org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>181</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.shaded.protobuf.RequestConverter.java">org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java</a></td>
<td>0</td>
<td>0</td>
<td>112</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter.java">org/apache/hadoop/hbase/shaded/protobuf/ResponseConverter.java</a></td>
<td>0</td>
<td>0</td>
<td>24</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.shaded.protobuf.TestProtobufUtil.java">org/apache/hadoop/hbase/shaded/protobuf/TestProtobufUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils.java">org/apache/hadoop/hbase/snapshot/ClientSnapshotDescriptionUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.snapshot.CorruptedSnapshotException.java">org/apache/hadoop/hbase/snapshot/CorruptedSnapshotException.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.snapshot.CreateSnapshot.java">org/apache/hadoop/hbase/snapshot/CreateSnapshot.java</a></td>
<td>0</td>
<td>0</td>
<td>40</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.snapshot.ExportSnapshot.java">org/apache/hadoop/hbase/snapshot/ExportSnapshot.java</a></td>
<td>0</td>
<td>0</td>
<td>14</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.snapshot.HBaseSnapshotException.java">org/apache/hadoop/hbase/snapshot/HBaseSnapshotException.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.snapshot.MobSnapshotTestingUtils.java">org/apache/hadoop/hbase/snapshot/MobSnapshotTestingUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>8</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.snapshot.RestoreSnapshotException.java">org/apache/hadoop/hbase/snapshot/RestoreSnapshotException.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.snapshot.RestoreSnapshotHelper.java">org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.java</a></td>
<td>0</td>
<td>0</td>
<td>17</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.snapshot.SnapshotCreationException.java">org/apache/hadoop/hbase/snapshot/SnapshotCreationException.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils.java">org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.snapshot.SnapshotDoesNotExistException.java">org/apache/hadoop/hbase/snapshot/SnapshotDoesNotExistException.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.snapshot.SnapshotExistsException.java">org/apache/hadoop/hbase/snapshot/SnapshotExistsException.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.snapshot.SnapshotInfo.java">org/apache/hadoop/hbase/snapshot/SnapshotInfo.java</a></td>
<td>0</td>
<td>0</td>
<td>11</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.snapshot.SnapshotManifest.java">org/apache/hadoop/hbase/snapshot/SnapshotManifest.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.snapshot.SnapshotManifestV2.java">org/apache/hadoop/hbase/snapshot/SnapshotManifestV2.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.snapshot.SnapshotTestingUtils.java">org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>27</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.snapshot.TablePartiallyOpenException.java">org/apache/hadoop/hbase/snapshot/TablePartiallyOpenException.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.snapshot.TestExportSnapshot.java">org/apache/hadoop/hbase/snapshot/TestExportSnapshot.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.snapshot.TestFlushSnapshotFromClient.java">org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.java</a></td>
<td>0</td>
<td>0</td>
<td>11</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.snapshot.TestMobExportSnapshot.java">org/apache/hadoop/hbase/snapshot/TestMobExportSnapshot.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.snapshot.TestMobSecureExportSnapshot.java">org/apache/hadoop/hbase/snapshot/TestMobSecureExportSnapshot.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.snapshot.TestRestoreSnapshotHelper.java">org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.test.IntegrationTestBigLinkedList.java">org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.java</a></td>
<td>0</td>
<td>0</td>
<td>32</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.test.IntegrationTestBigLinkedListWithVisibility.java">org/apache/hadoop/hbase/test/IntegrationTestBigLinkedListWithVisibility.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.test.IntegrationTestLoadAndVerify.java">org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.java</a></td>
<td>0</td>
<td>0</td>
<td>76</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.test.IntegrationTestReplication.java">org/apache/hadoop/hbase/test/IntegrationTestReplication.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.test.IntegrationTestTimeBoundedMultiGetRequestsWithRegionReplicas.java">org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedMultiGetRequestsWithRegionReplicas.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.test.IntegrationTestTimeBoundedRequestsWithRegionReplicas.java">org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedRequestsWithRegionReplicas.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.test.IntegrationTestWithCellVisibilityLoadAndVerify.java">org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.java</a></td>
<td>0</td>
<td>0</td>
<td>14</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.test.IntegrationTestZKAndFSPermissions.java">org/apache/hadoop/hbase/test/IntegrationTestZKAndFSPermissions.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.test.MetricsAssertHelperImpl.java">org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.thrift.DemoClient.java">org/apache/hadoop/hbase/thrift/DemoClient.java</a></td>
<td>0</td>
<td>0</td>
<td>250</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.thrift.HttpDoAsClient.java">org/apache/hadoop/hbase/thrift/HttpDoAsClient.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.thrift.MetricsThriftServerSourceImpl.java">org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.thrift.TestMetricsThriftServerSourceFactoryImpl.java">org/apache/hadoop/hbase/thrift/TestMetricsThriftServerSourceFactoryImpl.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.thrift2.DemoClient.java">org/apache/hadoop/hbase/thrift2/DemoClient.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.thrift2.ThriftServer.java">org/apache/hadoop/hbase/thrift2/ThriftServer.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.tool.Canary.java">org/apache/hadoop/hbase/tool/Canary.java</a></td>
<td>0</td>
<td>0</td>
<td>44</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.tool.LoadIncrementalHFiles.java">org/apache/hadoop/hbase/tool/LoadIncrementalHFiles.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.tool.MapreduceTestingShim.java">org/apache/hadoop/hbase/tool/MapreduceTestingShim.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.tool.TestCanaryTool.java">org/apache/hadoop/hbase/tool/TestCanaryTool.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.tool.TestLoadIncrementalHFiles.java">org/apache/hadoop/hbase/tool/TestLoadIncrementalHFiles.java</a></td>
<td>0</td>
<td>0</td>
<td>8</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.tool.TestLoadIncrementalHFilesSplitRecovery.java">org/apache/hadoop/hbase/tool/TestLoadIncrementalHFilesSplitRecovery.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.trace.IntegrationTestSendTraceRequests.java">org/apache/hadoop/hbase/trace/IntegrationTestSendTraceRequests.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.trace.SpanReceiverHost.java">org/apache/hadoop/hbase/trace/SpanReceiverHost.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.trace.TraceTree.java">org/apache/hadoop/hbase/trace/TraceTree.java</a></td>
<td>0</td>
<td>0</td>
<td>9</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.trace.TraceUtil.java">org/apache/hadoop/hbase/trace/TraceUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.types.TestCopyOnWriteMaps.java">org/apache/hadoop/hbase/types/TestCopyOnWriteMaps.java</a></td>
<td>0</td>
<td>0</td>
<td>11</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.types.TestOrderedBlob.java">org/apache/hadoop/hbase/types/TestOrderedBlob.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.types.TestOrderedString.java">org/apache/hadoop/hbase/types/TestOrderedString.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.types.TestStruct.java">org/apache/hadoop/hbase/types/TestStruct.java</a></td>
<td>0</td>
<td>0</td>
<td>21</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.types.TestTerminatedWrapper.java">org/apache/hadoop/hbase/types/TestTerminatedWrapper.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.types.TestUnion2.java">org/apache/hadoop/hbase/types/TestUnion2.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.AbstractByteRange.java">org/apache/hadoop/hbase/util/AbstractByteRange.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.AbstractFileStatusFilter.java">org/apache/hadoop/hbase/util/AbstractFileStatusFilter.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.AbstractHBaseTool.java">org/apache/hadoop/hbase/util/AbstractHBaseTool.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.AbstractPositionedByteRange.java">org/apache/hadoop/hbase/util/AbstractPositionedByteRange.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.Addressing.java">org/apache/hadoop/hbase/util/Addressing.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.AtomicUtils.java">org/apache/hadoop/hbase/util/AtomicUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.AvlUtil.java">org/apache/hadoop/hbase/util/AvlUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>9</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.Base64.java">org/apache/hadoop/hbase/util/Base64.java</a></td>
<td>0</td>
<td>0</td>
<td>28</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.BaseTestHBaseFsck.java">org/apache/hadoop/hbase/util/BaseTestHBaseFsck.java</a></td>
<td>0</td>
<td>0</td>
<td>12</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.BloomContext.java">org/apache/hadoop/hbase/util/BloomContext.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.BloomFilter.java">org/apache/hadoop/hbase/util/BloomFilter.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.BloomFilterChunk.java">org/apache/hadoop/hbase/util/BloomFilterChunk.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.BloomFilterFactory.java">org/apache/hadoop/hbase/util/BloomFilterFactory.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.BloomFilterUtil.java">org/apache/hadoop/hbase/util/BloomFilterUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>16</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.BloomFilterWriter.java">org/apache/hadoop/hbase/util/BloomFilterWriter.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.BoundedPriorityBlockingQueue.java">org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.java</a></td>
<td>0</td>
<td>0</td>
<td>11</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.BuilderStyleTest.java">org/apache/hadoop/hbase/util/BuilderStyleTest.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.ByteBufferArray.java">org/apache/hadoop/hbase/util/ByteBufferArray.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.ByteBufferUtils.java">org/apache/hadoop/hbase/util/ByteBufferUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>45</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.ByteRangeUtils.java">org/apache/hadoop/hbase/util/ByteRangeUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.Bytes.java">org/apache/hadoop/hbase/util/Bytes.java</a></td>
<td>0</td>
<td>0</td>
<td>85</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.ChecksumType.java">org/apache/hadoop/hbase/util/ChecksumType.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.ClassLoaderTestHelper.java">org/apache/hadoop/hbase/util/ClassLoaderTestHelper.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.ClassSize.java">org/apache/hadoop/hbase/util/ClassSize.java</a></td>
<td>0</td>
<td>0</td>
<td>14</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.Classes.java">org/apache/hadoop/hbase/util/Classes.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.CollectionBackedScanner.java">org/apache/hadoop/hbase/util/CollectionBackedScanner.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.CollectionUtils.java">org/apache/hadoop/hbase/util/CollectionUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.CommonFSUtils.java">org/apache/hadoop/hbase/util/CommonFSUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.CompressionTest.java">org/apache/hadoop/hbase/util/CompressionTest.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.ConcatenatedLists.java">org/apache/hadoop/hbase/util/ConcatenatedLists.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.ConfigurationUtil.java">org/apache/hadoop/hbase/util/ConfigurationUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.ConnectionCache.java">org/apache/hadoop/hbase/util/ConnectionCache.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.ConstantDelayQueue.java">org/apache/hadoop/hbase/util/ConstantDelayQueue.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.CoprocessorClassLoader.java">org/apache/hadoop/hbase/util/CoprocessorClassLoader.java</a></td>
<td>0</td>
<td>0</td>
<td>11</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.Counter.java">org/apache/hadoop/hbase/util/Counter.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.DirectMemoryUtils.java">org/apache/hadoop/hbase/util/DirectMemoryUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.DynamicClassLoader.java">org/apache/hadoop/hbase/util/DynamicClassLoader.java</a></td>
<td>0</td>
<td>0</td>
<td>26</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.EncryptionTest.java">org/apache/hadoop/hbase/util/EncryptionTest.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.EnvironmentEdgeManager.java">org/apache/hadoop/hbase/util/EnvironmentEdgeManager.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.EnvironmentEdgeManagerTestHelper.java">org/apache/hadoop/hbase/util/EnvironmentEdgeManagerTestHelper.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.ExceptionUtil.java">org/apache/hadoop/hbase/util/ExceptionUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.FSHDFSUtils.java">org/apache/hadoop/hbase/util/FSHDFSUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>20</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.FSRegionScanner.java">org/apache/hadoop/hbase/util/FSRegionScanner.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.FSTableDescriptors.java">org/apache/hadoop/hbase/util/FSTableDescriptors.java</a></td>
<td>0</td>
<td>0</td>
<td>22</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.FSUtils.java">org/apache/hadoop/hbase/util/FSUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>61</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.FSVisitor.java">org/apache/hadoop/hbase/util/FSVisitor.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.FileStatusFilter.java">org/apache/hadoop/hbase/util/FileStatusFilter.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.GetJavaProperty.java">org/apache/hadoop/hbase/util/GetJavaProperty.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.HBaseConfTool.java">org/apache/hadoop/hbase/util/HBaseConfTool.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.HBaseFsck.java">org/apache/hadoop/hbase/util/HBaseFsck.java</a></td>
<td>0</td>
<td>0</td>
<td>99</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.HBaseFsckRepair.java">org/apache/hadoop/hbase/util/HBaseFsckRepair.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.HBaseHomePath.java">org/apache/hadoop/hbase/util/HBaseHomePath.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.HFileArchiveTestingUtil.java">org/apache/hadoop/hbase/util/HFileArchiveTestingUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>9</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.HFileArchiveUtil.java">org/apache/hadoop/hbase/util/HFileArchiveUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.HFileTestUtil.java">org/apache/hadoop/hbase/util/HFileTestUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.Hash.java">org/apache/hadoop/hbase/util/Hash.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.HashKey.java">org/apache/hadoop/hbase/util/HashKey.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.HashedBytes.java">org/apache/hadoop/hbase/util/HashedBytes.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.IdLock.java">org/apache/hadoop/hbase/util/IdLock.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.IdReadWriteLock.java">org/apache/hadoop/hbase/util/IdReadWriteLock.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.JRubyFormat.java">org/apache/hadoop/hbase/util/JRubyFormat.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.JSONBean.java">org/apache/hadoop/hbase/util/JSONBean.java</a></td>
<td>0</td>
<td>0</td>
<td>11</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.JVM.java">org/apache/hadoop/hbase/util/JVM.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.JVMClusterUtil.java">org/apache/hadoop/hbase/util/JVMClusterUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>11</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.JenkinsHash.java">org/apache/hadoop/hbase/util/JenkinsHash.java</a></td>
<td>0</td>
<td>0</td>
<td>39</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.JsonMapper.java">org/apache/hadoop/hbase/util/JsonMapper.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.JvmPauseMonitor.java">org/apache/hadoop/hbase/util/JvmPauseMonitor.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.KeyLocker.java">org/apache/hadoop/hbase/util/KeyLocker.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.LoadTestDataGeneratorWithMOB.java">org/apache/hadoop/hbase/util/LoadTestDataGeneratorWithMOB.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.LoadTestDataGeneratorWithTags.java">org/apache/hadoop/hbase/util/LoadTestDataGeneratorWithTags.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.LoadTestTool.java">org/apache/hadoop/hbase/util/LoadTestTool.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.MD5Hash.java">org/apache/hadoop/hbase/util/MD5Hash.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.ManualEnvironmentEdge.java">org/apache/hadoop/hbase/util/ManualEnvironmentEdge.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.MapreduceDependencyClasspathTool.java">org/apache/hadoop/hbase/util/MapreduceDependencyClasspathTool.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.Methods.java">org/apache/hadoop/hbase/util/Methods.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.MockServer.java">org/apache/hadoop/hbase/util/MockServer.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.ModifyRegionUtils.java">org/apache/hadoop/hbase/util/ModifyRegionUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>8</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.MultiHConnection.java">org/apache/hadoop/hbase/util/MultiHConnection.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.MultiThreadedAction.java">org/apache/hadoop/hbase/util/MultiThreadedAction.java</a></td>
<td>0</td>
<td>0</td>
<td>9</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.MultiThreadedReader.java">org/apache/hadoop/hbase/util/MultiThreadedReader.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.MultiThreadedReaderWithACL.java">org/apache/hadoop/hbase/util/MultiThreadedReaderWithACL.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.MultiThreadedUpdater.java">org/apache/hadoop/hbase/util/MultiThreadedUpdater.java</a></td>
<td>0</td>
<td>0</td>
<td>19</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.MultiThreadedWriter.java">org/apache/hadoop/hbase/util/MultiThreadedWriter.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.MultiThreadedWriterBase.java">org/apache/hadoop/hbase/util/MultiThreadedWriterBase.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.MunkresAssignment.java">org/apache/hadoop/hbase/util/MunkresAssignment.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.MurmurHash3.java">org/apache/hadoop/hbase/util/MurmurHash3.java</a></td>
<td>0</td>
<td>0</td>
<td>11</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.NettyEventLoopGroupConfig.java">org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.Order.java">org/apache/hadoop/hbase/util/Order.java</a></td>
<td>0</td>
<td>0</td>
<td>8</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.OrderedBytes.java">org/apache/hadoop/hbase/util/OrderedBytes.java</a></td>
<td>0</td>
<td>0</td>
<td>44</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.Pair.java">org/apache/hadoop/hbase/util/Pair.java</a></td>
<td>0</td>
<td>0</td>
<td>16</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.PairOfSameType.java">org/apache/hadoop/hbase/util/PairOfSameType.java</a></td>
<td>0</td>
<td>0</td>
<td>8</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.PoolMap.java">org/apache/hadoop/hbase/util/PoolMap.java</a></td>
<td>0</td>
<td>0</td>
<td>9</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.PositionedByteRange.java">org/apache/hadoop/hbase/util/PositionedByteRange.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.PrettyPrinter.java">org/apache/hadoop/hbase/util/PrettyPrinter.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.ProcessBasedLocalHBaseCluster.java">org/apache/hadoop/hbase/util/ProcessBasedLocalHBaseCluster.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.RedundantKVGenerator.java">org/apache/hadoop/hbase/util/RedundantKVGenerator.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.ReflectionUtils.java">org/apache/hadoop/hbase/util/ReflectionUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.RegionMover.java">org/apache/hadoop/hbase/util/RegionMover.java</a></td>
<td>0</td>
<td>0</td>
<td>35</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.RegionSplitCalculator.java">org/apache/hadoop/hbase/util/RegionSplitCalculator.java</a></td>
<td>0</td>
<td>0</td>
<td>6</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.RegionSplitter.java">org/apache/hadoop/hbase/util/RegionSplitter.java</a></td>
<td>0</td>
<td>0</td>
<td>13</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.RetryCounter.java">org/apache/hadoop/hbase/util/RetryCounter.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.RollingStatCalculator.java">org/apache/hadoop/hbase/util/RollingStatCalculator.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.RowBloomContext.java">org/apache/hadoop/hbase/util/RowBloomContext.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.ServerCommandLine.java">org/apache/hadoop/hbase/util/ServerCommandLine.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.ServerRegionReplicaUtil.java">org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.ShutdownHookManager.java">org/apache/hadoop/hbase/util/ShutdownHookManager.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.SimpleByteRange.java">org/apache/hadoop/hbase/util/SimpleByteRange.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.SimpleMutableByteRange.java">org/apache/hadoop/hbase/util/SimpleMutableByteRange.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.SimplePositionedByteRange.java">org/apache/hadoop/hbase/util/SimplePositionedByteRange.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.SimplePositionedMutableByteRange.java">org/apache/hadoop/hbase/util/SimplePositionedMutableByteRange.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.Sleeper.java">org/apache/hadoop/hbase/util/Sleeper.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.StealJobQueue.java">org/apache/hadoop/hbase/util/StealJobQueue.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.StoppableImplementation.java">org/apache/hadoop/hbase/util/StoppableImplementation.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.Strings.java">org/apache/hadoop/hbase/util/Strings.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.TestBase64.java">org/apache/hadoop/hbase/util/TestBase64.java</a></td>
<td>0</td>
<td>0</td>
<td>12</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.TestBloomFilterChunk.java">org/apache/hadoop/hbase/util/TestBloomFilterChunk.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.TestBytes.java">org/apache/hadoop/hbase/util/TestBytes.java</a></td>
<td>0</td>
<td>0</td>
<td>21</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.TestCompressionTest.java">org/apache/hadoop/hbase/util/TestCompressionTest.java</a></td>
<td>0</td>
<td>0</td>
<td>12</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.TestCoprocessorClassLoader.java">org/apache/hadoop/hbase/util/TestCoprocessorClassLoader.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.TestCoprocessorScanPolicy.java">org/apache/hadoop/hbase/util/TestCoprocessorScanPolicy.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.TestFSTableDescriptors.java">org/apache/hadoop/hbase/util/TestFSTableDescriptors.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.TestFSUtils.java">org/apache/hadoop/hbase/util/TestFSUtils.java</a></td>
<td>0</td>
<td>0</td>
<td>7</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.TestFSVisitor.java">org/apache/hadoop/hbase/util/TestFSVisitor.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.TestHFileArchiveUtil.java">org/apache/hadoop/hbase/util/TestHFileArchiveUtil.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.TestIdLock.java">org/apache/hadoop/hbase/util/TestIdLock.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.TestIdReadWriteLock.java">org/apache/hadoop/hbase/util/TestIdReadWriteLock.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.TestMiniClusterLoadEncoded.java">org/apache/hadoop/hbase/util/TestMiniClusterLoadEncoded.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.TestMiniClusterLoadSequential.java">org/apache/hadoop/hbase/util/TestMiniClusterLoadSequential.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.TestOrderedBytes.java">org/apache/hadoop/hbase/util/TestOrderedBytes.java</a></td>
<td>0</td>
<td>0</td>
<td>30</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.TestRegionSplitter.java">org/apache/hadoop/hbase/util/TestRegionSplitter.java</a></td>
<td>0</td>
<td>0</td>
<td>192</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.TestSimplePositionedMutableByteRange.java">org/apache/hadoop/hbase/util/TestSimplePositionedMutableByteRange.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.TestSortedList.java">org/apache/hadoop/hbase/util/TestSortedList.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.Threads.java">org/apache/hadoop/hbase/util/Threads.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.TimeOffsetEnvironmentEdge.java">org/apache/hadoop/hbase/util/TimeOffsetEnvironmentEdge.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.Triple.java">org/apache/hadoop/hbase/util/Triple.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.UnsafeAccess.java">org/apache/hadoop/hbase/util/UnsafeAccess.java</a></td>
<td>0</td>
<td>0</td>
<td>35</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.UnsafeAvailChecker.java">org/apache/hadoop/hbase/util/UnsafeAvailChecker.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.VersionInfo.java">org/apache/hadoop/hbase/util/VersionInfo.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.Writables.java">org/apache/hadoop/hbase/util/Writables.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.ZKDataMigrator.java">org/apache/hadoop/hbase/util/ZKDataMigrator.java</a></td>
<td>0</td>
<td>0</td>
<td>18</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.compaction.MajorCompactor.java">org/apache/hadoop/hbase/util/compaction/MajorCompactor.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.compaction.TestMajorCompactionRequest.java">org/apache/hadoop/hbase/util/compaction/TestMajorCompactionRequest.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.compaction.TestMajorCompactor.java">org/apache/hadoop/hbase/util/compaction/TestMajorCompactor.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker.java">org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.java</a></td>
<td>0</td>
<td>0</td>
<td>10</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.java">org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.java</a></td>
<td>0</td>
<td>0</td>
-<td>4</td></tr>
-<tr class="b">
+<td>3</td></tr>
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.hbck.OfflineMetaRebuildTestCore.java">org/apache/hadoop/hbase/util/hbck/OfflineMetaRebuildTestCore.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair.java">org/apache/hadoop/hbase/util/hbck/OfflineMetaRepair.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.util.test.LoadTestDataGenerator.java">org/apache/hadoop/hbase/util/test/LoadTestDataGenerator.java</a></td>
<td>0</td>
<td>0</td>
<td>8</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.util.test.LoadTestDataGeneratorWithACL.java">org/apache/hadoop/hbase/util/test/LoadTestDataGeneratorWithACL.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.wal.AbstractFSWALProvider.java">org/apache/hadoop/hbase/wal/AbstractFSWALProvider.java</a></td>
<td>0</td>
<td>0</td>
<td>4</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.wal.BoundedGroupingStrategy.java">org/apache/hadoop/hbase/wal/BoundedGroupingStrategy.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.wal.DisabledWALProvider.java">org/apache/hadoop/hbase/wal/DisabledWALProvider.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.wal.IOTestProvider.java">org/apache/hadoop/hbase/wal/IOTestProvider.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.wal.NamespaceGroupingStrategy.java">org/apache/hadoop/hbase/wal/NamespaceGroupingStrategy.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.wal.NettyAsyncFSWALConfigHelper.java">org/apache/hadoop/hbase/wal/NettyAsyncFSWALConfigHelper.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.wal.TestBoundedRegionGroupingStrategy.java">org/apache/hadoop/hbase/wal/TestBoundedRegionGroupingStrategy.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.wal.TestFSHLogProvider.java">org/apache/hadoop/hbase/wal/TestFSHLogProvider.java</a></td>
<td>0</td>
<td>0</td>
<td>5</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.wal.TestWALFactory.java">org/apache/hadoop/hbase/wal/TestWALFactory.java</a></td>
<td>0</td>
<td>0</td>
<td>18</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.wal.TestWALMethods.java">org/apache/hadoop/hbase/wal/TestWALMethods.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.wal.TestWALOpenAfterDNRollingStart.java">org/apache/hadoop/hbase/wal/TestWALOpenAfterDNRollingStart.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.apache.hadoop.hbase.wal.TestWALReaderOnSecureWAL.java">org/apache/hadoop/hbase/wal/TestWALReaderOnSecureWAL.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.apache.hadoop.hbase.wal.TestWALRoot
<TRUNCATED>
[17/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call() throws IOExceptio
<TRUNCATED>
[18/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call() throws
<TRUNCATED>
[11/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
index 0f850d3..82cd795 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html" target="_top">Frames</a></li>
@@ -74,7 +74,7 @@ var activeTableTab = "activeTableTab";
<div>
<ul class="subNavList">
<li>Summary: </li>
-<li><a href="#nested.class.summary">Nested</a> | </li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a> | </li>
<li><a href="#field.summary">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
@@ -137,7 +137,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.430">TestReplicationEndpoint.InterClusterReplicationEndpointForTest</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.431">TestReplicationEndpoint.InterClusterReplicationEndpointForTest</a>
extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</pre>
</li>
</ul>
@@ -151,28 +151,6 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<!-- -->
</a>
<h3>Nested Class Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
-<caption><span>Nested Classes</span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Class and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>protected class </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</a></span></code> </td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>protected class </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator</a></span></code> </td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint">
-<!-- -->
-</a>
-<h3>Nested classes/interfaces inherited from class org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</h3>
-<code>org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator</code></li>
-</ul>
<ul class="blockList">
<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">
<!-- -->
@@ -256,7 +234,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
-<td class="colFirst"><code>protected org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator</code></td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#createReplicator-java.util.List-int-">createReplicator</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
int ordinal)</code> </td>
</tr>
@@ -270,7 +248,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</h3>
-<code>doStop, init, isPeerEnabled, sleepForRetries</code></li>
+<code>doStop, init, isPeerEnabled, replicateEntries, sleepForRetries</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">
@@ -327,7 +305,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockList">
<li class="blockList">
<h4>replicateCount</h4>
-<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.433">replicateCount</a></pre>
+<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.434">replicateCount</a></pre>
</li>
</ul>
<a name="failedOnce">
@@ -336,7 +314,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockListLast">
<li class="blockList">
<h4>failedOnce</h4>
-<pre>static boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.434">failedOnce</a></pre>
+<pre>static boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.435">failedOnce</a></pre>
</li>
</ul>
</li>
@@ -353,7 +331,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockListLast">
<li class="blockList">
<h4>InterClusterReplicationEndpointForTest</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.436">InterClusterReplicationEndpointForTest</a>()</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.437">InterClusterReplicationEndpointForTest</a>()</pre>
</li>
</ul>
</li>
@@ -370,7 +348,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockList">
<li class="blockList">
<h4>replicate</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.441">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext replicateContext)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.442">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext replicateContext)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>replicate</code> in interface <code>org.apache.hadoop.hbase.replication.ReplicationEndpoint</code></dd>
@@ -385,8 +363,8 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockListLast">
<li class="blockList">
<h4>createReplicator</h4>
-<pre>protected org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.450">createReplicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
- int ordinal)</pre>
+<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.451">createReplicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
+ int ordinal)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>createReplicator</code> in class <code>org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</code></dd>
@@ -422,7 +400,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html" target="_top">Frames</a></li>
@@ -446,7 +424,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<div>
<ul class="subNavList">
<li>Summary: </li>
-<li><a href="#nested.class.summary">Nested</a> | </li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a> | </li>
<li><a href="#field.summary">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html
index 2a83467..5186d9d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
@@ -131,7 +131,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.382">TestReplicationEndpoint.ReplicationEndpointForTest</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.383">TestReplicationEndpoint.ReplicationEndpointForTest</a>
extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
</li>
</ul>
@@ -309,7 +309,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
<ul class="blockList">
<li class="blockList">
<h4>uuid</h4>
-<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.383">uuid</a></pre>
+<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.384">uuid</a></pre>
</li>
</ul>
<a name="contructedCount">
@@ -318,7 +318,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
<ul class="blockList">
<li class="blockList">
<h4>contructedCount</h4>
-<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.384">contructedCount</a></pre>
+<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.385">contructedCount</a></pre>
</li>
</ul>
<a name="startedCount">
@@ -327,7 +327,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
<ul class="blockList">
<li class="blockList">
<h4>startedCount</h4>
-<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.385">startedCount</a></pre>
+<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.386">startedCount</a></pre>
</li>
</ul>
<a name="stoppedCount">
@@ -336,7 +336,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
<ul class="blockList">
<li class="blockList">
<h4>stoppedCount</h4>
-<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.386">stoppedCount</a></pre>
+<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.387">stoppedCount</a></pre>
</li>
</ul>
<a name="replicateCount">
@@ -345,7 +345,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
<ul class="blockList">
<li class="blockList">
<h4>replicateCount</h4>
-<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.387">replicateCount</a></pre>
+<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.388">replicateCount</a></pre>
</li>
</ul>
<a name="lastEntries">
@@ -354,7 +354,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>lastEntries</h4>
-<pre>static volatile <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.388">lastEntries</a></pre>
+<pre>static volatile <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.389">lastEntries</a></pre>
</li>
</ul>
</li>
@@ -371,7 +371,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>ReplicationEndpointForTest</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.390">ReplicationEndpointForTest</a>()</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.391">ReplicationEndpointForTest</a>()</pre>
</li>
</ul>
</li>
@@ -388,7 +388,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
<ul class="blockList">
<li class="blockList">
<h4>getPeerUUID</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.396">getPeerUUID</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.397">getPeerUUID</a>()</pre>
</li>
</ul>
<a name="replicate-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-">
@@ -397,7 +397,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
<ul class="blockList">
<li class="blockList">
<h4>replicate</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.401">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext replicateContext)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.402">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext replicateContext)</pre>
</li>
</ul>
<a name="start--">
@@ -406,7 +406,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
<ul class="blockList">
<li class="blockList">
<h4>start</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.408">start</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.409">start</a>()</pre>
</li>
</ul>
<a name="stop--">
@@ -415,7 +415,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
<ul class="blockList">
<li class="blockList">
<h4>stop</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.413">stop</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.414">stop</a>()</pre>
</li>
</ul>
<a name="doStart--">
@@ -424,7 +424,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
<ul class="blockList">
<li class="blockList">
<h4>doStart</h4>
-<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.418">doStart</a>()</pre>
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.419">doStart</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>doStart</code> in class <code>org.apache.hbase.thirdparty.com.google.common.util.concurrent.AbstractService</code></dd>
@@ -437,7 +437,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>doStop</h4>
-<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.424">doStop</a>()</pre>
+<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.425">doStop</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>doStop</code> in class <code>org.apache.hbase.thirdparty.com.google.common.util.concurrent.AbstractService</code></dd>
@@ -472,7 +472,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html
index ecd7961..5639f48 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html
@@ -132,7 +132,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.488">TestReplicationEndpoint.ReplicationEndpointReturningFalse</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.464">TestReplicationEndpoint.ReplicationEndpointReturningFalse</a>
extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.ReplicationEndpointForTest</a></pre>
</li>
</ul>
@@ -292,7 +292,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>COUNT</h4>
-<pre>static int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.489">COUNT</a></pre>
+<pre>static int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.465">COUNT</a></pre>
</li>
</ul>
<a name="ex">
@@ -301,7 +301,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>ex</h4>
-<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.490">ex</a></pre>
+<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.466">ex</a></pre>
</li>
</ul>
<a name="replicated">
@@ -310,7 +310,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockListLast">
<li class="blockList">
<h4>replicated</h4>
-<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.491">replicated</a></pre>
+<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.467">replicated</a></pre>
</li>
</ul>
</li>
@@ -327,7 +327,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockListLast">
<li class="blockList">
<h4>ReplicationEndpointReturningFalse</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.488">ReplicationEndpointReturningFalse</a>()</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.464">ReplicationEndpointReturningFalse</a>()</pre>
</li>
</ul>
</li>
@@ -344,7 +344,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockListLast">
<li class="blockList">
<h4>replicate</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.493">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext replicateContext)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.469">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext replicateContext)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>replicate</code> in interface <code>org.apache.hadoop.hbase.replication.ReplicationEndpoint</code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html
index f8b3f92..8dcfa75 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html
@@ -132,7 +132,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.510">TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.486">TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter</a>
extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.ReplicationEndpointForTest</a></pre>
</li>
</ul>
@@ -288,7 +288,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockListLast">
<li class="blockList">
<h4>ex</h4>
-<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.511">ex</a></pre>
+<pre>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.487">ex</a></pre>
</li>
</ul>
</li>
@@ -305,7 +305,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockListLast">
<li class="blockList">
<h4>ReplicationEndpointWithWALEntryFilter</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.510">ReplicationEndpointWithWALEntryFilter</a>()</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.486">ReplicationEndpointWithWALEntryFilter</a>()</pre>
</li>
</ul>
</li>
@@ -322,7 +322,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>replicate</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.514">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext replicateContext)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.490">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext replicateContext)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>replicate</code> in interface <code>org.apache.hadoop.hbase.replication.ReplicationEndpoint</code></dd>
@@ -337,7 +337,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockListLast">
<li class="blockList">
<h4>getWALEntryfilter</h4>
-<pre>public org.apache.hadoop.hbase.replication.WALEntryFilter <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.525">getWALEntryfilter</a>()</pre>
+<pre>public org.apache.hadoop.hbase.replication.WALEntryFilter <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.501">getWALEntryfilter</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>getWALEntryfilter</code> in interface <code>org.apache.hadoop.hbase.replication.ReplicationEndpoint</code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html
index 3626d5e..851bf77 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.68">TestReplicationEndpoint</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.69">TestReplicationEndpoint</a>
extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></pre>
<div class="block">Tests ReplicationSource and ReplicationEndpoint interactions</div>
</li>
@@ -317,7 +317,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>CLASS_RULE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.71">CLASS_RULE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.72">CLASS_RULE</a></pre>
</li>
</ul>
<a name="LOG">
@@ -326,7 +326,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.74">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.75">LOG</a></pre>
</li>
</ul>
<a name="numRegionServers">
@@ -335,7 +335,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockListLast">
<li class="blockList">
<h4>numRegionServers</h4>
-<pre>static int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.76">numRegionServers</a></pre>
+<pre>static int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.77">numRegionServers</a></pre>
</li>
</ul>
</li>
@@ -352,7 +352,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockListLast">
<li class="blockList">
<h4>TestReplicationEndpoint</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.68">TestReplicationEndpoint</a>()</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.69">TestReplicationEndpoint</a>()</pre>
</li>
</ul>
</li>
@@ -369,7 +369,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>setUpBeforeClass</h4>
-<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.79">setUpBeforeClass</a>()
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.80">setUpBeforeClass</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -383,7 +383,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>tearDownAfterClass</h4>
-<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.85">tearDownAfterClass</a>()
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.86">tearDownAfterClass</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -397,7 +397,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>setup</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.92">setup</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.93">setup</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -411,7 +411,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>testCustomReplicationEndpoint</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.129">testCustomReplicationEndpoint</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.130">testCustomReplicationEndpoint</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -425,7 +425,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>testReplicationEndpointReturnsFalseOnReplicate</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.168">testReplicationEndpointReturnsFalseOnReplicate</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.169">testReplicationEndpointReturnsFalseOnReplicate</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -439,7 +439,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>testInterClusterReplication</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.204">testInterClusterReplication</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.205">testInterClusterReplication</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -453,7 +453,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>testWALEntryFilterFromReplicationEndpoint</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.250">testWALEntryFilterFromReplicationEndpoint</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.251">testWALEntryFilterFromReplicationEndpoint</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -467,7 +467,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>testWALEntryFilterAddValidation</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.279">testWALEntryFilterAddValidation</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.280">testWALEntryFilterAddValidation</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -481,7 +481,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>testWALEntryFilterUpdateValidation</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.289">testWALEntryFilterUpdateValidation</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.290">testWALEntryFilterUpdateValidation</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -495,7 +495,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>testMetricsSourceBaseSourcePassthrough</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.300">testMetricsSourceBaseSourcePassthrough</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.301">testMetricsSourceBaseSourcePassthrough</a>()</pre>
</li>
</ul>
<a name="doPut-byte:A-">
@@ -504,7 +504,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>doPut</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.357">doPut</a>(byte[] row)
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.358">doPut</a>(byte[] row)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -518,7 +518,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>doPut</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.363">doPut</a>(org.apache.hadoop.hbase.client.Connection connection,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.364">doPut</a>(org.apache.hadoop.hbase.client.Connection connection,
byte[] row)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
@@ -533,7 +533,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockListLast">
<li class="blockList">
<h4>doAssert</h4>
-<pre>private static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.371">doAssert</a>(byte[] row)
+<pre>private static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.372">doAssert</a>(byte[] row)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html b/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html
deleted file mode 100644
index 587eafc..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html
+++ /dev/null
@@ -1,165 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.replication.TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
- try {
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Uses of Class org.apache.hadoop.hbase.replication.TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator (Apache HBase 3.0.0-SNAPSHOT Test API)";
- }
- }
- catch(err) {
- }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" target="_top">Frames</a></li>
-<li><a href="TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_top");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!-- -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.replication.TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator" class="title">Uses of Class<br>org.apache.hadoop.hbase.replication.TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</h2>
-</div>
-<div class="classUseContainer">
-<ul class="blockList">
-<li class="blockList">
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
-<caption><span>Packages that use <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</a></span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Package</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication">org.apache.hadoop.hbase.replication</a></td>
-<td class="colLast"> </td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase.replication">
-<!-- -->
-</a>
-<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</a> in <a href="../../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing subclasses, and an explanation">
-<caption><span>Subclasses of <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</a> in <a href="../../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Class and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>protected class </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator</a></span></code> </td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" target="_top">Frames</a></li>
-<li><a href="TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_bottom");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!-- -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html b/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html
deleted file mode 100644
index b11c29c..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.replication.TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
- try {
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Uses of Class org.apache.hadoop.hbase.replication.TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator (Apache HBase 3.0.0-SNAPSHOT Test API)";
- }
- }
- catch(err) {
- }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" target="_top">Frames</a></li>
-<li><a href="TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_top");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!-- -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.replication.TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator" class="title">Uses of Class<br>org.apache.hadoop.hbase.replication.TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator</h2>
-</div>
-<div class="classUseContainer">No usage of org.apache.hadoop.hbase.replication.TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" target="_top">Frames</a></li>
-<li><a href="TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_bottom");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!-- -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/replication/package-tree.html
index ca3c835..d0b3324 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/package-tree.html
@@ -166,11 +166,6 @@
<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass</span></a></li>
</ul>
</li>
-<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</span></a>
-<ul>
-<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator</span></a></li>
-</ul>
-</li>
<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationPeerConfig</span></a></li>
<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationProcedureRetry.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationProcedureRetry</span></a></li>
<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationStateBasic.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationStateBasic</span></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/package-use.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/package-use.html b/testdevapidocs/org/apache/hadoop/hbase/replication/package-use.html
index ba2ec38..6752987 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/package-use.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/package-use.html
@@ -141,26 +141,23 @@
<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/replication/class-use/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#org.apache.hadoop.hbase.replication">TestReplicationEndpoint.EverythingPassesWALEntryFilter</a> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/replication/class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html#org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</a> </td>
-</tr>
-<tr class="altColor">
<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/replication/class-use/TestReplicationEndpoint.ReplicationEndpointForTest.html#org.apache.hadoop.hbase.replication">TestReplicationEndpoint.ReplicationEndpointForTest</a> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/replication/class-use/TestReplicationKillMasterRS.html#org.apache.hadoop.hbase.replication">TestReplicationKillMasterRS</a>
<div class="block">Runs the TestReplicationKillRS test and selects the RS to kill in the master cluster
Do not add other tests in this class.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/replication/class-use/TestReplicationKillRS.html#org.apache.hadoop.hbase.replication">TestReplicationKillRS</a> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/replication/class-use/TestReplicationStateBasic.html#org.apache.hadoop.hbase.replication">TestReplicationStateBasic</a>
<div class="block">White box testing for replication state interfaces.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/replication/class-use/TestReplicationSyncUpTool.html#org.apache.hadoop.hbase.replication">TestReplicationSyncUpTool</a> </td>
</tr>
</tbody>
[24/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOu
<TRUNCATED>
[49/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 151c494..e6f25dd 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,8 +25,8 @@ under the License.
<language>en-us</language>
<copyright>©2007 - 2018 The Apache Software Foundation</copyright>
<item>
- <title>File: 3607,
- Errors: 15867,
+ <title>File: 3609,
+ Errors: 15864,
Warnings: 0,
Infos: 0
</title>
@@ -8250,6 +8250,20 @@ under the License.
</tr>
<tr>
<td>
+ <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.TestHBaseFsckCleanReplicationBarriers.java">org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.java</a>
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ </tr>
+ <tr>
+ <td>
<a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.handler.WALSplitterHandler.java">org/apache/hadoop/hbase/regionserver/handler/WALSplitterHandler.java</a>
</td>
<td>
@@ -9631,7 +9645,7 @@ under the License.
0
</td>
<td>
- 5
+ 4
</td>
</tr>
<tr>
@@ -23160,6 +23174,20 @@ under the License.
</tr>
<tr>
<td>
+ <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.TestSerialReplicationEndpoint.java">org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.java</a>
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ <td>
+ 0
+ </td>
+ </tr>
+ <tr>
+ <td>
<a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.net.TestAddress.java">org/apache/hadoop/hbase/net/TestAddress.java</a>
</td>
<td>
@@ -43035,7 +43063,7 @@ under the License.
0
</td>
<td>
- 1
+ 0
</td>
</tr>
<tr>
@@ -44743,7 +44771,7 @@ under the License.
0
</td>
<td>
- 4
+ 3
</td>
</tr>
<tr>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 741545b..d4ae2af 100644
--- a/coc.html
+++ b/coc.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Code of Conduct Policy
@@ -375,7 +375,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 2d6b9c2..78ca6ef 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Dependencies</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -440,7 +440,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 86fe4cf..05ba8a3 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Reactor Dependency Convergence</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -1105,7 +1105,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 12bcabc..19f0fec 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Dependency Information</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -313,7 +313,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 202f8c9..ad19247 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Dependency Management</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -969,7 +969,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index fda2ae4..5f72784 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3768,21 +3768,21 @@
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Thu May 3 14:39:11 UTC 2018"</code></td>
+<td class="colLast"><code>"Fri May 4 14:39:10 UTC 2018"</code></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"4cb444e77b41cdb733544770a471068256d65bbe"</code></td>
+<td class="colLast"><code>"87f5b5f3411d96c31b4cb61b9a57ced22be91d1f"</code></td>
</tr>
<tr class="altColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"b65d69cf3ec7b334d9360592429adf77"</code></td>
+<td class="colLast"><code>"9cfe3eb8d49902aafbb6d8066c40fb45"</code></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 6f0a532..261b2e0 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -8462,8 +8462,6 @@
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#call--">call()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.snapshot.<a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot">FlushSnapshotSubprocedure.RegionSnapshotTask</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#call--">call()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.Copier.html#call--">call()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.Copier.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HFileReplicator.Copier</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/RefreshPeerCallable.html#call--">call()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/RefreshPeerCallable.html" title="class in org.apache.hadoop.hbase.replication.regionserver">RefreshPeerCallable</a></dt>
@@ -11473,6 +11471,12 @@
<dd>
<div class="block">A dead server that comes back alive has a different start code.</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HBaseFsck.html#cleanReplicationBarrier">cleanReplicationBarrier</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HBaseFsck.html#cleanReplicationBarrier--">cleanReplicationBarrier()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HBaseFsck.html#cleanReplicationBarrierTable">cleanReplicationBarrierTable</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.html#cleanServerCache-org.apache.hadoop.hbase.ServerName-java.lang.Throwable-">cleanServerCache(ServerName, Throwable)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncRequestFutureImpl</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/regionserver/LogRollBackupSubprocedure.html#cleanup-java.lang.Exception-">cleanup(Exception)</a></span> - Method in class org.apache.hadoop.hbase.backup.regionserver.<a href="org/apache/hadoop/hbase/backup/regionserver/LogRollBackupSubprocedure.html" title="class in org.apache.hadoop.hbase.backup.regionserver">LogRollBackupSubprocedure</a></dt>
@@ -18788,7 +18792,10 @@
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#createBatch-org.apache.hadoop.hbase.replication.regionserver.WALEntryStream-">createBatch(WALEntryStream)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createBatches-java.util.List-">createBatches(List<WAL.Entry>)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
-<dd> </dd>
+<dd>
+<div class="block">Divide the entries into multiple batches, so that we can replicate each batch in a thread pool
+ concurrently.</div>
+</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/MultiHConnection.html#createBatchPool-org.apache.hadoop.conf.Configuration-">createBatchPool(Configuration)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/MultiHConnection.html" title="class in org.apache.hadoop.hbase.util">MultiHConnection</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.html#createBlockAdder--">createBlockAdder()</a></span> - Static method in class org.apache.hadoop.hbase.io.asyncfs.<a href="org/apache/hadoop/hbase/io/asyncfs/FanOutOneBlockAsyncDFSOutputHelper.html" title="class in org.apache.hadoop.hbase.io.asyncfs">FanOutOneBlockAsyncDFSOutputHelper</a></dt>
@@ -19956,6 +19963,8 @@
<dd>
<div class="block">A helper method to create HFile output streams in constructors</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createParallelBatches-java.util.List-">createParallelBatches(List<WAL.Entry>)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.html#createPassword-org.apache.hadoop.hbase.security.token.AuthenticationTokenIdentifier-">createPassword(AuthenticationTokenIdentifier)</a></span> - Method in class org.apache.hadoop.hbase.security.token.<a href="org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.html" title="class in org.apache.hadoop.hbase.security.token">AuthenticationTokenSecretManager</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/HFileLink.html#createPath-org.apache.hadoop.hbase.TableName-java.lang.String-java.lang.String-java.lang.String-">createPath(TableName, String, String, String)</a></span> - Static method in class org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/HFileLink.html" title="class in org.apache.hadoop.hbase.io">HFileLink</a></dt>
@@ -20447,6 +20456,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.html#createSequential-java.lang.String-byte:A-java.util.List-org.apache.zookeeper.CreateMode-">createSequential(String, byte[], List<ACL>, CreateMode)</a></span> - Method in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/RecoverableZooKeeper.html" title="class in org.apache.hadoop.hbase.zookeeper">RecoverableZooKeeper</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createSerialBatches-java.util.List-">createSerialBatches(List<WAL.Entry>)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactory.html#createServer-org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapper-">createServer(MetricsRegionServerWrapper)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactory.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSourceFactory</a></dt>
<dd>
<div class="block">Given a wrapper create a MetricsRegionServerSource.</div>
@@ -27741,8 +27752,6 @@
</dd>
<dt><a href="org/apache/hadoop/hbase/client/locking/EntityLock.LockHeartbeatWorker.html" title="class in org.apache.hadoop.hbase.client.locking"><span class="typeNameLink">EntityLock.LockHeartbeatWorker</span></a> - Class in <a href="org/apache/hadoop/hbase/client/locking/package-summary.html">org.apache.hadoop.hbase.client.locking</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#entries">entries</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.RegionReplicaReplayCallable.html#entries">entries</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.RegionReplicaReplayCallable.html" title="class in org.apache.hadoop.hbase.replication.regionserver">RegionReplicaReplicationEndpoint.RegionReplicaReplayCallable</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html#entries">entries</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a></dt>
@@ -38093,6 +38102,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HBaseFsck.html#getErrors--">getErrors()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#getEstimatedEntrySize-org.apache.hadoop.hbase.wal.WAL.Entry-">getEstimatedEntrySize(WAL.Entry)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreScanner.html#getEstimatedNumberOfKvsScanned--">getEstimatedNumberOfKvsScanned()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/VersionedSegmentsList.html#getEstimatedUniquesFrac--">getEstimatedUniquesFrac()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/VersionedSegmentsList.html" title="class in org.apache.hadoop.hbase.regionserver">VersionedSegmentsList</a></dt>
@@ -55448,8 +55459,6 @@
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#HBaseInterClusterReplicationEndpoint--">HBaseInterClusterReplicationEndpoint()</a></span> - Constructor for class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
<dd> </dd>
-<dt><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">HBaseInterClusterReplicationEndpoint.Replicator</span></a> - Class in <a href="org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></dt>
-<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/HBaseInterfaceAudience.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseInterfaceAudience</span></a> - Class in <a href="org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></dt>
<dd>
<div class="block">This class defines constants for different classes of hbase limited private apis</div>
@@ -63092,6 +63101,8 @@
<dd>
<div class="block">Is the given file a region open sequence id file.</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#isSerial">isSerial</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#isSerial--">isSerial()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/HMaster.html#isServerCrashProcessingEnabled--">isServerCrashProcessingEnabled()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a></dt>
@@ -78514,8 +78525,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/Size.Unit.html#orderOfSize">orderOfSize</a></span> - Variable in enum org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase">Size.Unit</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#ordinal">ordinal</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/visibility/DefaultVisibilityLabelServiceImpl.html#ordinalCounter">ordinalCounter</a></span> - Variable in class org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/DefaultVisibilityLabelServiceImpl.html" title="class in org.apache.hadoop.hbase.security.visibility">DefaultVisibilityLabelServiceImpl</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/visibility/VisibilityLabelsCache.html#ordinalVsLabels">ordinalVsLabels</a></span> - Variable in class org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/VisibilityLabelsCache.html" title="class in org.apache.hadoop.hbase.security.visibility">VisibilityLabelsCache</a></dt>
@@ -79156,6 +79165,8 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/throttle/StoreHotnessProtector.html#parallelPutToStoreThreadLimitCheckMinColumnCount">parallelPutToStoreThreadLimitCheckMinColumnCount</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.throttle.<a href="org/apache/hadoop/hbase/regionserver/throttle/StoreHotnessProtector.html" title="class in org.apache.hadoop.hbase.regionserver.throttle">StoreHotnessProtector</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#parallelReplicate-java.util.concurrent.CompletionService-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-java.util.List-">parallelReplicate(CompletionService<Integer>, ReplicationEndpoint.ReplicateContext, List<List<WAL.Entry>>)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreScanner.html#parallelSeek-java.util.List-org.apache.hadoop.hbase.Cell-">parallelSeek(List<? extends KeyValueScanner>, Cell)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></dt>
<dd>
<div class="block">Seek storefiles in parallel to optimize IO latency as much as possible</div>
@@ -91007,7 +91018,7 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#replicatedTable">replicatedTable</a></span> - Variable in class org.apache.hadoop.hbase.mapreduce.replication.<a href="org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html" title="class in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#replicateEntries-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-java.util.List-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">replicateEntries(AdminProtos.AdminService.BlockingInterface, List<WAL.Entry>, String, Path, Path)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#replicateEntries-java.util.List-int-">replicateEntries(List<WAL.Entry>, int)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html#replicateEntries-java.util.List-org.apache.hadoop.hbase.CellScanner-java.lang.String-java.lang.String-java.lang.String-">replicateEntries(List<AdminProtos.WALEntry>, CellScanner, String, String, String)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a></dt>
<dd>
@@ -91565,8 +91576,6 @@ service.</div>
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/ZNodePaths.html#replicationZNode">replicationZNode</a></span> - Variable in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/ZNodePaths.html" title="class in org.apache.hadoop.hbase.zookeeper">ZNodePaths</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#Replicator-java.util.List-int-">Replicator(List<WAL.Entry>, int)</a></span> - Constructor for class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/HFilePrettyPrinter.SimpleReporter.html#report-java.util.SortedMap-java.util.SortedMap-java.util.SortedMap-java.util.SortedMap-java.util.SortedMap-">report(SortedMap<String, Gauge>, SortedMap<String, Counter>, SortedMap<String, Histogram>, SortedMap<String, Meter>, SortedMap<String, Timer>)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFilePrettyPrinter.SimpleReporter.html" title="class in org.apache.hadoop.hbase.io.hfile">HFilePrettyPrinter.SimpleReporter</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#report-java.lang.String-">report(String)</a></span> - Method in interface org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></dt>
@@ -97468,6 +97477,8 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData(ProcedureStateSerializer)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#serialReplicateRegionEntries-java.util.List-int-">serialReplicateRegionEntries(List<WAL.Entry>, int)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/replication/regionserver/SerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">SerialReplicationChecker</span></a> - Class in <a href="org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></dt>
<dd>
<div class="block">
@@ -98897,6 +98908,10 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MasterRpcServices.html#setCleanerChoreRunning-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos.SetCleanerChoreRunningRequest-">setCleanerChoreRunning(RpcController, MasterProtos.SetCleanerChoreRunningRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MasterRpcServices.html" title="class in org.apache.hadoop.hbase.master">MasterRpcServices</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HBaseFsck.html#setCleanReplicationBarrier-boolean-">setCleanReplicationBarrier(boolean)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HBaseFsck.html#setCleanReplicationBarrierTable-java.lang.String-">setCleanReplicationBarrierTable(String)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureRetainer.html#setClientAckTime-long-">setClientAckTime(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureRetainer.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.CompletedProcedureRetainer</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ScannerCallable.html#setClose--">setClose()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a></dt>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index eea9542..5890b1a 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -169,8 +169,8 @@
<ul>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
index fd31ec7..ad1b394 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
@@ -10765,6 +10765,10 @@ service.</div>
</tr>
<tbody>
<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
+<td class="colLast"><span class="typeNameLabel">HBaseFsck.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#cleanReplicationBarrierTable">cleanReplicationBarrierTable</a></span></code> </td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
<td class="colLast"><span class="typeNameLabel">HBaseFsck.TableInfo.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#tableName">tableName</a></span></code> </td>
</tr>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 9559009..ed476e8 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -550,24 +550,24 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
index ce950b0..ae0124e 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -104,8 +104,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 33836e7..bf0f6e6 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -183,14 +183,14 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 36dcf23..63e54e3 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -273,12 +273,12 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index a77bff8..626507e 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -293,10 +293,10 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index eb945fb..ad40e69 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -197,8 +197,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index affdb15..ac4b7c0 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -347,10 +347,10 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
index 3e1ea7f..9eb46aa 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -125,8 +125,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index d62ee5b..e49713c 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -441,19 +441,19 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 08f786d..422a5fa 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -212,11 +212,11 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index ac318ba..bd3f539 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -229,13 +229,13 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 1892d12..2636f5a 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -704,20 +704,20 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
</ul>
</li>
</ul>
[26/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call() throws IOException {<a name="line.396"></a>
+<span class="sour
<TRUNCATED>
[51/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
Published site at 87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Project: http://git-wip-us.apache.org/repos/asf/hbase-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase-site/commit/de18d468
Tree: http://git-wip-us.apache.org/repos/asf/hbase-site/tree/de18d468
Diff: http://git-wip-us.apache.org/repos/asf/hbase-site/diff/de18d468
Branch: refs/heads/asf-site
Commit: de18d46872487a6f1db9134c2b9dd348767134c3
Parents: a1e6bc2
Author: jenkins <bu...@apache.org>
Authored: Fri May 4 14:47:40 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Fri May 4 14:47:40 2018 +0000
----------------------------------------------------------------------
acid-semantics.html | 4 +-
apache_hbase_reference_guide.pdf | 4 +-
book.html | 2 +-
bulk-loads.html | 4 +-
checkstyle-aggregate.html | 28332 ++++++++---------
checkstyle.rss | 38 +-
coc.html | 4 +-
dependencies.html | 4 +-
dependency-convergence.html | 4 +-
dependency-info.html | 4 +-
dependency-management.html | 4 +-
devapidocs/constant-values.html | 6 +-
devapidocs/index-all.html | 39 +-
.../hadoop/hbase/backup/package-tree.html | 2 +-
.../hadoop/hbase/class-use/TableName.html | 4 +
.../hadoop/hbase/client/package-tree.html | 26 +-
.../hadoop/hbase/executor/package-tree.html | 2 +-
.../hadoop/hbase/filter/package-tree.html | 8 +-
.../hadoop/hbase/io/hfile/package-tree.html | 6 +-
.../hadoop/hbase/mapreduce/package-tree.html | 4 +-
.../hbase/master/balancer/package-tree.html | 2 +-
.../hadoop/hbase/master/package-tree.html | 4 +-
.../hadoop/hbase/monitoring/package-tree.html | 2 +-
.../org/apache/hadoop/hbase/package-tree.html | 16 +-
.../hadoop/hbase/procedure2/package-tree.html | 6 +-
.../hadoop/hbase/quotas/package-tree.html | 8 +-
.../hadoop/hbase/regionserver/package-tree.html | 14 +-
.../hbase/regionserver/wal/package-tree.html | 2 +-
.../replication/BaseReplicationEndpoint.html | 2 +-
.../hbase/replication/ReplicationEndpoint.html | 2 +-
.../ReplicationEndpoint.ReplicateContext.html | 8 +-
...erClusterReplicationEndpoint.Replicator.html | 365 -
.../HBaseInterClusterReplicationEndpoint.html | 267 +-
.../regionserver/HFileReplicator.html | 4 +-
.../RecoveredReplicationSource.html | 6 +-
.../RegionReplicaReplicationEndpoint.html | 2 +-
.../ReplicationSource.LogsComparator.html | 8 +-
.../regionserver/ReplicationSource.html | 22 +-
...icationSourceManager.NodeFailoverWorker.html | 12 +-
...SourceManager.ReplicationQueueOperation.html | 4 +-
.../regionserver/ReplicationSourceManager.html | 58 +-
...erClusterReplicationEndpoint.Replicator.html | 166 -
.../regionserver/package-summary.html | 74 +-
.../replication/regionserver/package-tree.html | 1 -
.../replication/regionserver/package-use.html | 63 +-
.../hadoop/hbase/rest/model/package-tree.html | 2 +-
.../hbase/security/access/package-tree.html | 2 +-
.../hadoop/hbase/security/package-tree.html | 2 +-
.../VisibilityReplicationEndpoint.html | 2 +-
.../hadoop/hbase/thrift/package-tree.html | 2 +-
...BaseFsck.CheckRegionConsistencyWorkItem.html | 10 +-
.../HBaseFsck.ErrorReporter.ERROR_CODE.html | 146 +-
.../hbase/util/HBaseFsck.ErrorReporter.html | 30 +-
.../hbase/util/HBaseFsck.FileLockCallable.html | 10 +-
.../hbase/util/HBaseFsck.HBaseFsckTool.html | 6 +-
.../hadoop/hbase/util/HBaseFsck.HbckInfo.html | 56 +-
.../hadoop/hbase/util/HBaseFsck.HdfsEntry.html | 14 +-
.../hadoop/hbase/util/HBaseFsck.MetaEntry.html | 18 +-
.../hbase/util/HBaseFsck.OnlineEntry.html | 10 +-
.../util/HBaseFsck.PrintingErrorReporter.html | 42 +-
.../HBaseFsck.RegionBoundariesInformation.html | 16 +-
.../util/HBaseFsck.RegionRepairException.html | 8 +-
.../HBaseFsck.TableInfo.HDFSIntegrityFixer.html | 22 +-
...aseFsck.TableInfo.IntegrityFixSuggester.html | 20 +-
.../hadoop/hbase/util/HBaseFsck.TableInfo.html | 38 +-
.../hbase/util/HBaseFsck.WorkItemHdfsDir.html | 12 +-
.../util/HBaseFsck.WorkItemHdfsRegionInfo.html | 12 +-
.../util/HBaseFsck.WorkItemOverlapMerge.html | 10 +-
.../hbase/util/HBaseFsck.WorkItemRegion.html | 16 +-
.../org/apache/hadoop/hbase/util/HBaseFsck.html | 744 +-
.../apache/hadoop/hbase/util/package-tree.html | 10 +-
.../hadoop/hbase/wal/class-use/WAL.Entry.html | 72 +-
devapidocs/overview-tree.html | 1 -
.../org/apache/hadoop/hbase/Version.html | 6 +-
.../ReplicationEndpoint.Context.html | 2 +-
.../ReplicationEndpoint.ReplicateContext.html | 2 +-
.../hbase/replication/ReplicationEndpoint.html | 2 +-
...erClusterReplicationEndpoint.Replicator.html | 578 -
.../HBaseInterClusterReplicationEndpoint.html | 955 +-
.../RecoveredReplicationSource.html | 43 +-
.../ReplicationSource.LogsComparator.html | 207 +-
.../regionserver/ReplicationSource.html | 207 +-
...icationSourceManager.NodeFailoverWorker.html | 952 +-
...SourceManager.ReplicationQueueOperation.html | 952 +-
.../regionserver/ReplicationSourceManager.html | 952 +-
...BaseFsck.CheckRegionConsistencyWorkItem.html | 10105 +++---
.../HBaseFsck.ErrorReporter.ERROR_CODE.html | 10105 +++---
.../hbase/util/HBaseFsck.ErrorReporter.html | 10105 +++---
.../hbase/util/HBaseFsck.FileLockCallable.html | 10105 +++---
.../hbase/util/HBaseFsck.HBaseFsckTool.html | 10105 +++---
.../hadoop/hbase/util/HBaseFsck.HbckInfo.html | 10105 +++---
.../hadoop/hbase/util/HBaseFsck.HdfsEntry.html | 10105 +++---
.../hadoop/hbase/util/HBaseFsck.MetaEntry.html | 10105 +++---
.../hbase/util/HBaseFsck.OnlineEntry.html | 10105 +++---
.../util/HBaseFsck.PrintingErrorReporter.html | 10105 +++---
.../HBaseFsck.RegionBoundariesInformation.html | 10105 +++---
.../util/HBaseFsck.RegionRepairException.html | 10105 +++---
.../HBaseFsck.TableInfo.HDFSIntegrityFixer.html | 10105 +++---
...aseFsck.TableInfo.IntegrityFixSuggester.html | 10105 +++---
.../hadoop/hbase/util/HBaseFsck.TableInfo.html | 10105 +++---
.../hbase/util/HBaseFsck.WorkItemHdfsDir.html | 10105 +++---
.../util/HBaseFsck.WorkItemHdfsRegionInfo.html | 10105 +++---
.../util/HBaseFsck.WorkItemOverlapMerge.html | 10105 +++---
.../hbase/util/HBaseFsck.WorkItemRegion.html | 10105 +++---
.../org/apache/hadoop/hbase/util/HBaseFsck.html | 10105 +++---
downloads.html | 4 +-
export_control.html | 4 +-
index.html | 4 +-
integration.html | 4 +-
issue-tracking.html | 4 +-
license.html | 4 +-
mail-lists.html | 4 +-
metrics.html | 4 +-
old_news.html | 4 +-
plugin-management.html | 4 +-
plugins.html | 4 +-
poweredbyhbase.html | 4 +-
project-info.html | 4 +-
project-reports.html | 4 +-
project-summary.html | 4 +-
pseudo-distributed.html | 4 +-
replication.html | 4 +-
resources.html | 4 +-
source-repository.html | 4 +-
sponsors.html | 4 +-
supportingprojects.html | 4 +-
team-list.html | 4 +-
testdevapidocs/allclasses-frame.html | 4 +-
testdevapidocs/allclasses-noframe.html | 4 +-
testdevapidocs/index-all.html | 154 +-
.../hadoop/hbase/backup/package-tree.html | 2 +-
.../hbase/class-use/HBaseClassTestRule.html | 32 +-
.../hbase/class-use/HBaseTestingUtility.html | 12 +-
...usters.TestUpdatableReplicationEndpoint.html | 4 +-
.../TestOverwriteFileUnderConstruction.html | 20 +-
.../org/apache/hadoop/hbase/package-tree.html | 8 +-
.../hadoop/hbase/procedure/package-tree.html | 8 +-
.../hadoop/hbase/procedure2/package-tree.html | 2 +-
.../hadoop/hbase/regionserver/package-tree.html | 4 +-
...Endpoint.EverythingPassesWALEntryFilter.html | 10 +-
....EverythingPassesWALEntryFilterSubclass.html | 4 +-
...licationEndpointForTest.DummyReplicator.html | 329 -
...nEndpointForTest.FailingDummyReplicator.html | 296 -
....InterClusterReplicationEndpointForTest.html | 48 +-
...tionEndpoint.ReplicationEndpointForTest.html | 32 +-
...point.ReplicationEndpointReturningFalse.html | 12 +-
...t.ReplicationEndpointWithWALEntryFilter.html | 10 +-
.../replication/TestReplicationEndpoint.html | 36 +-
...licationEndpointForTest.DummyReplicator.html | 165 -
...nEndpointForTest.FailingDummyReplicator.html | 125 -
.../hadoop/hbase/replication/package-tree.html | 5 -
.../hadoop/hbase/replication/package-use.html | 11 +-
...rTest.FailureInjectingBlockingInterface.html | 757 -
...rTest.FailureInjectingReplicatorForTest.html | 302 -
...lureInjectingReplicationEndpointForTest.html | 92 +-
...cationEndpointForTest.ReplicatorForTest.html | 299 -
...stReplicator.ReplicationEndpointForTest.html | 70 +-
.../regionserver/TestReplicator.html | 20 +-
.../TestSerialReplicationChecker.html | 8 +-
...tSerialReplicationEndpoint.TestEndpoint.html | 475 +
.../TestSerialReplicationEndpoint.html | 460 +
.../TestSourceFSConfigurationProvider.html | 4 +-
...rTest.FailureInjectingBlockingInterface.html | 125 -
...rTest.FailureInjectingReplicatorForTest.html | 125 -
...cationEndpointForTest.ReplicatorForTest.html | 165 -
...tSerialReplicationEndpoint.TestEndpoint.html | 125 +
.../TestSerialReplicationEndpoint.html | 125 +
.../replication/regionserver/package-frame.html | 3 +-
.../regionserver/package-summary.html | 20 +-
.../replication/regionserver/package-tree.html | 8 +-
.../replication/regionserver/package-use.html | 3 -
.../apache/hadoop/hbase/test/package-tree.html | 4 +-
.../apache/hadoop/hbase/util/TestFSVisitor.html | 4 +-
.../TestHBaseFsckCleanReplicationBarriers.html | 538 +
.../hbase/util/TestHBaseFsckComparator.html | 4 +-
.../TestHBaseFsckCleanReplicationBarriers.html | 125 +
.../hadoop/hbase/util/hbck/HbckTestingUtil.html | 58 +-
.../apache/hadoop/hbase/util/package-frame.html | 1 +
.../hadoop/hbase/util/package-summary.html | 74 +-
.../apache/hadoop/hbase/util/package-tree.html | 1 +
.../apache/hadoop/hbase/wal/package-tree.html | 2 +-
testdevapidocs/overview-tree.html | 14 +-
...usters.TestUpdatableReplicationEndpoint.html | 23 +-
.../TestReplicationAdminWithClusters.html | 23 +-
.../TestOverwriteFileUnderConstruction.html | 171 +-
.../replication/ReplicationSourceDummy.html | 4 +-
...Endpoint.EverythingPassesWALEntryFilter.html | 1036 +-
....EverythingPassesWALEntryFilterSubclass.html | 1036 +-
...licationEndpointForTest.DummyReplicator.html | 632 -
...nEndpointForTest.FailingDummyReplicator.html | 632 -
....InterClusterReplicationEndpointForTest.html | 1036 +-
...tionEndpoint.ReplicationEndpointForTest.html | 1036 +-
...point.ReplicationEndpointReturningFalse.html | 1036 +-
...t.ReplicationEndpointWithWALEntryFilter.html | 1036 +-
.../replication/TestReplicationEndpoint.html | 1036 +-
...rTest.FailureInjectingBlockingInterface.html | 549 -
...rTest.FailureInjectingReplicatorForTest.html | 549 -
...lureInjectingReplicationEndpointForTest.html | 658 +-
...cationEndpointForTest.ReplicatorForTest.html | 549 -
...stReplicator.ReplicationEndpointForTest.html | 658 +-
.../regionserver/TestReplicator.html | 658 +-
...tSerialReplicationEndpoint.TestEndpoint.html | 260 +
.../TestSerialReplicationEndpoint.html | 260 +
.../TestHBaseFsckCleanReplicationBarriers.html | 277 +
.../hadoop/hbase/util/hbck/HbckTestingUtil.html | 186 +-
205 files changed, 127035 insertions(+), 129652 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 80ab395..d539dd3 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Apache HBase (TM) ACID Properties
@@ -601,7 +601,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 22dac6d..2179dff 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
/Author (Apache HBase Team)
/Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
/Producer (Apache HBase Team)
-/ModDate (D:20180503142953+00'00')
-/CreationDate (D:20180503144436+00'00')
+/ModDate (D:20180504142952+00'00')
+/CreationDate (D:20180504144449+00'00')
>>
endobj
2 0 obj
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 16d7ef2..4844a86 100644
--- a/book.html
+++ b/book.html
@@ -37873,7 +37873,7 @@ The server will return cellblocks compressed using this same compressor as long
<div id="footer">
<div id="footer-text">
Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-05-03 14:29:53 UTC
+Last updated 2018-05-04 14:29:52 UTC
</div>
</div>
</body>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index a3ebc81..4240b1f 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Bulk Loads in Apache HBase (TM)
@@ -306,7 +306,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
[03/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html
deleted file mode 100644
index 7a938de..0000000
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html
+++ /dev/null
@@ -1,632 +0,0 @@
-<!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>package org.apache.hadoop.hbase.replication;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import static org.mockito.Mockito.mock;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.mockito.Mockito.verify;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.mockito.Mockito.when;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.List;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.UUID;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.Cell;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.Waiter;<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.RegionInfo;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.Table;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.junit.AfterClass;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.junit.Assert;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.junit.Before;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.BeforeClass;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.ClassRule;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Test;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.experimental.categories.Category;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.65"></a>
-<span class="sourceLineNo">066</span> */<a name="line.66"></a>
-<span class="sourceLineNo">067</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.67"></a>
-<span class="sourceLineNo">068</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span> @ClassRule<a name="line.70"></a>
-<span class="sourceLineNo">071</span> public static final HBaseClassTestRule CLASS_RULE =<a name="line.71"></a>
-<span class="sourceLineNo">072</span> HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span> private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span> static int numRegionServers;<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span> @BeforeClass<a name="line.78"></a>
-<span class="sourceLineNo">079</span> public static void setUpBeforeClass() throws Exception {<a name="line.79"></a>
-<span class="sourceLineNo">080</span> TestReplicationBase.setUpBeforeClass();<a name="line.80"></a>
-<span class="sourceLineNo">081</span> numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<a name="line.81"></a>
-<span class="sourceLineNo">082</span> }<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span> @AfterClass<a name="line.84"></a>
-<span class="sourceLineNo">085</span> public static void tearDownAfterClass() throws Exception {<a name="line.85"></a>
-<span class="sourceLineNo">086</span> TestReplicationBase.tearDownAfterClass();<a name="line.86"></a>
-<span class="sourceLineNo">087</span> // check stop is called<a name="line.87"></a>
-<span class="sourceLineNo">088</span> Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() > 0);<a name="line.88"></a>
-<span class="sourceLineNo">089</span> }<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> @Before<a name="line.91"></a>
-<span class="sourceLineNo">092</span> public void setup() throws Exception {<a name="line.92"></a>
-<span class="sourceLineNo">093</span> ReplicationEndpointForTest.contructedCount.set(0);<a name="line.93"></a>
-<span class="sourceLineNo">094</span> ReplicationEndpointForTest.startedCount.set(0);<a name="line.94"></a>
-<span class="sourceLineNo">095</span> ReplicationEndpointForTest.replicateCount.set(0);<a name="line.95"></a>
-<span class="sourceLineNo">096</span> ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.96"></a>
-<span class="sourceLineNo">097</span> ReplicationEndpointForTest.lastEntries = null;<a name="line.97"></a>
-<span class="sourceLineNo">098</span> final List<RegionServerThread> rsThreads =<a name="line.98"></a>
-<span class="sourceLineNo">099</span> utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.99"></a>
-<span class="sourceLineNo">100</span> for (RegionServerThread rs : rsThreads) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span> utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.101"></a>
-<span class="sourceLineNo">102</span> }<a name="line.102"></a>
-<span class="sourceLineNo">103</span> // Wait for all log roll to finish<a name="line.103"></a>
-<span class="sourceLineNo">104</span> utility1.waitFor(3000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.104"></a>
-<span class="sourceLineNo">105</span> @Override<a name="line.105"></a>
-<span class="sourceLineNo">106</span> public boolean evaluate() throws Exception {<a name="line.106"></a>
-<span class="sourceLineNo">107</span> for (RegionServerThread rs : rsThreads) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> return false;<a name="line.109"></a>
-<span class="sourceLineNo">110</span> }<a name="line.110"></a>
-<span class="sourceLineNo">111</span> }<a name="line.111"></a>
-<span class="sourceLineNo">112</span> return true;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span> @Override<a name="line.115"></a>
-<span class="sourceLineNo">116</span> public String explainFailure() throws Exception {<a name="line.116"></a>
-<span class="sourceLineNo">117</span> List<String> logRollInProgressRsList = new ArrayList<>();<a name="line.117"></a>
-<span class="sourceLineNo">118</span> for (RegionServerThread rs : rsThreads) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span> logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.120"></a>
-<span class="sourceLineNo">121</span> }<a name="line.121"></a>
-<span class="sourceLineNo">122</span> }<a name="line.122"></a>
-<span class="sourceLineNo">123</span> return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<a name="line.123"></a>
-<span class="sourceLineNo">124</span> }<a name="line.124"></a>
-<span class="sourceLineNo">125</span> });<a name="line.125"></a>
-<span class="sourceLineNo">126</span> }<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span> @Test<a name="line.128"></a>
-<span class="sourceLineNo">129</span> public void testCustomReplicationEndpoint() throws Exception {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> // test installing a custom replication endpoint other than the default one.<a name="line.130"></a>
-<span class="sourceLineNo">131</span> admin.addPeer("testCustomReplicationEndpoint",<a name="line.131"></a>
-<span class="sourceLineNo">132</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.132"></a>
-<span class="sourceLineNo">133</span> .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span> // check whether the class has been constructed and started<a name="line.135"></a>
-<span class="sourceLineNo">136</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> @Override<a name="line.137"></a>
-<span class="sourceLineNo">138</span> public boolean evaluate() throws Exception {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> return ReplicationEndpointForTest.contructedCount.get() >= numRegionServers;<a name="line.139"></a>
-<span class="sourceLineNo">140</span> }<a name="line.140"></a>
-<span class="sourceLineNo">141</span> });<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span> @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span> public boolean evaluate() throws Exception {<a name="line.145"></a>
-<span class="sourceLineNo">146</span> return ReplicationEndpointForTest.startedCount.get() >= numRegionServers;<a name="line.146"></a>
-<span class="sourceLineNo">147</span> }<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> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span> // now replicate some data.<a name="line.152"></a>
-<span class="sourceLineNo">153</span> doPut(Bytes.toBytes("row42"));<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span> public boolean evaluate() throws Exception {<a name="line.157"></a>
-<span class="sourceLineNo">158</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.158"></a>
-<span class="sourceLineNo">159</span> }<a name="line.159"></a>
-<span class="sourceLineNo">160</span> });<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span> doAssert(Bytes.toBytes("row42"));<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span> admin.removePeer("testCustomReplicationEndpoint");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span> @Test<a name="line.167"></a>
-<span class="sourceLineNo">168</span> public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.168"></a>
-<span class="sourceLineNo">169</span> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.169"></a>
-<span class="sourceLineNo">170</span> Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.170"></a>
-<span class="sourceLineNo">171</span> int peerCount = admin.getPeersCount();<a name="line.171"></a>
-<span class="sourceLineNo">172</span> final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.172"></a>
-<span class="sourceLineNo">173</span> admin.addPeer(id,<a name="line.173"></a>
-<span class="sourceLineNo">174</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.174"></a>
-<span class="sourceLineNo">175</span> .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.175"></a>
-<span class="sourceLineNo">176</span> // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.176"></a>
-<span class="sourceLineNo">177</span> // debug. Peer needs to be up for the edit to make it across. This wait on<a name="line.177"></a>
-<span class="sourceLineNo">178</span> // peer count seems to be a hack that has us not progress till peer is up.<a name="line.178"></a>
-<span class="sourceLineNo">179</span> if (admin.getPeersCount() <= peerCount) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> Threads.sleep(100);<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> // now replicate some data<a name="line.183"></a>
-<span class="sourceLineNo">184</span> doPut(row);<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.186"></a>
-<span class="sourceLineNo">187</span> @Override<a name="line.187"></a>
-<span class="sourceLineNo">188</span> public boolean evaluate() throws Exception {<a name="line.188"></a>
-<span class="sourceLineNo">189</span> // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.189"></a>
-<span class="sourceLineNo">190</span> // only send over one edit.<a name="line.190"></a>
-<span class="sourceLineNo">191</span> int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.191"></a>
-<span class="sourceLineNo">192</span> LOG.info("count=" + count);<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return ReplicationEndpointReturningFalse.replicated.get();<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span> });<a name="line.195"></a>
-<span class="sourceLineNo">196</span> if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span> throw ReplicationEndpointReturningFalse.ex.get();<a name="line.197"></a>
-<span class="sourceLineNo">198</span> }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span> admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<a name="line.200"></a>
-<span class="sourceLineNo">201</span> }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span> @Test<a name="line.203"></a>
-<span class="sourceLineNo">204</span> public void testInterClusterReplication() throws Exception {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> final String id = "testInterClusterReplication";<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span> List<HRegion> regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.207"></a>
-<span class="sourceLineNo">208</span> int totEdits = 0;<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> // Make sure edits are spread across regions because we do region based batching<a name="line.210"></a>
-<span class="sourceLineNo">211</span> // before shipping edits.<a name="line.211"></a>
-<span class="sourceLineNo">212</span> for(HRegion region: regions) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span> RegionInfo hri = region.getRegionInfo();<a name="line.213"></a>
-<span class="sourceLineNo">214</span> byte[] row = hri.getStartKey();<a name="line.214"></a>
-<span class="sourceLineNo">215</span> for (int i = 0; i < 100; i++) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span> if (row.length > 0) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span> Put put = new Put(row);<a name="line.217"></a>
-<span class="sourceLineNo">218</span> put.addColumn(famName, row, row);<a name="line.218"></a>
-<span class="sourceLineNo">219</span> region.put(put);<a name="line.219"></a>
-<span class="sourceLineNo">220</span> totEdits++;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> }<a name="line.221"></a>
-<span class="sourceLineNo">222</span> }<a name="line.222"></a>
-<span class="sourceLineNo">223</span> }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> admin.addPeer(id,<a name="line.225"></a>
-<span class="sourceLineNo">226</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.226"></a>
-<span class="sourceLineNo">227</span> .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.227"></a>
-<span class="sourceLineNo">228</span> null);<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span> final int numEdits = totEdits;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.231"></a>
-<span class="sourceLineNo">232</span> @Override<a name="line.232"></a>
-<span class="sourceLineNo">233</span> public boolean evaluate() throws Exception {<a name="line.233"></a>
-<span class="sourceLineNo">234</span> return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> }<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span> @Override<a name="line.237"></a>
-<span class="sourceLineNo">238</span> public String explainFailure() throws Exception {<a name="line.238"></a>
-<span class="sourceLineNo">239</span> String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.239"></a>
-<span class="sourceLineNo">240</span> + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return failure;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span> });<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> admin.removePeer("testInterClusterReplication");<a name="line.245"></a>
-<span class="sourceLineNo">246</span> utility1.deleteTableData(tableName);<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> @Test<a name="line.249"></a>
-<span class="sourceLineNo">250</span> public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.250"></a>
-<span class="sourceLineNo">251</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.251"></a>
-<span class="sourceLineNo">252</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.252"></a>
-<span class="sourceLineNo">253</span> //test that we can create mutliple WALFilters reflectively<a name="line.253"></a>
-<span class="sourceLineNo">254</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.254"></a>
-<span class="sourceLineNo">255</span> EverythingPassesWALEntryFilter.class.getName() +<a name="line.255"></a>
-<span class="sourceLineNo">256</span> "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.256"></a>
-<span class="sourceLineNo">257</span> admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.257"></a>
-<span class="sourceLineNo">258</span> // now replicate some data.<a name="line.258"></a>
-<span class="sourceLineNo">259</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> doPut(connection, Bytes.toBytes("row1"));<a name="line.260"></a>
-<span class="sourceLineNo">261</span> doPut(connection, row);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> doPut(connection, Bytes.toBytes("row2"));<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
-<span class="sourceLineNo">267</span> public boolean evaluate() throws Exception {<a name="line.267"></a>
-<span class="sourceLineNo">268</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.268"></a>
-<span class="sourceLineNo">269</span> }<a name="line.269"></a>
-<span class="sourceLineNo">270</span> });<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span> Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.272"></a>
-<span class="sourceLineNo">273</span> //make sure our reflectively created filter is in the filter chain<a name="line.273"></a>
-<span class="sourceLineNo">274</span> Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.274"></a>
-<span class="sourceLineNo">275</span> admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<a name="line.275"></a>
-<span class="sourceLineNo">276</span> }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span> @Test (expected=IOException.class)<a name="line.278"></a>
-<span class="sourceLineNo">279</span> public void testWALEntryFilterAddValidation() throws Exception {<a name="line.279"></a>
-<span class="sourceLineNo">280</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.280"></a>
-<span class="sourceLineNo">281</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.281"></a>
-<span class="sourceLineNo">282</span> //test that we can create mutliple WALFilters reflectively<a name="line.282"></a>
-<span class="sourceLineNo">283</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.283"></a>
-<span class="sourceLineNo">284</span> "IAmNotARealWalEntryFilter");<a name="line.284"></a>
-<span class="sourceLineNo">285</span> admin.addPeer("testWALEntryFilterAddValidation", rpc);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> @Test (expected=IOException.class)<a name="line.288"></a>
-<span class="sourceLineNo">289</span> public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.289"></a>
-<span class="sourceLineNo">290</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.290"></a>
-<span class="sourceLineNo">291</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.291"></a>
-<span class="sourceLineNo">292</span> //test that we can create mutliple WALFilters reflectively<a name="line.292"></a>
-<span class="sourceLineNo">293</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.293"></a>
-<span class="sourceLineNo">294</span> "IAmNotARealWalEntryFilter");<a name="line.294"></a>
-<span class="sourceLineNo">295</span> admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.295"></a>
-<span class="sourceLineNo">296</span> }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span> @Test<a name="line.299"></a>
-<span class="sourceLineNo">300</span> public void testMetricsSourceBaseSourcePassthrough(){<a name="line.300"></a>
-<span class="sourceLineNo">301</span> /*<a name="line.301"></a>
-<span class="sourceLineNo">302</span> The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.302"></a>
-<span class="sourceLineNo">303</span> and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.303"></a>
-<span class="sourceLineNo">304</span> Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.304"></a>
-<span class="sourceLineNo">305</span> allows for custom JMX metrics.<a name="line.305"></a>
-<span class="sourceLineNo">306</span> This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.306"></a>
-<span class="sourceLineNo">307</span> the two layers of wrapping to the actual BaseSource.<a name="line.307"></a>
-<span class="sourceLineNo">308</span> */<a name="line.308"></a>
-<span class="sourceLineNo">309</span> String id = "id";<a name="line.309"></a>
-<span class="sourceLineNo">310</span> DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.311"></a>
-<span class="sourceLineNo">312</span> when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.312"></a>
-<span class="sourceLineNo">313</span> MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.313"></a>
-<span class="sourceLineNo">314</span> when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span> MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.316"></a>
-<span class="sourceLineNo">317</span> MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> MetricsSource source = new MetricsSource(id, singleSourceSource, globalSourceSource);<a name="line.318"></a>
-<span class="sourceLineNo">319</span> String gaugeName = "gauge";<a name="line.319"></a>
-<span class="sourceLineNo">320</span> String singleGaugeName = "source.id." + gaugeName;<a name="line.320"></a>
-<span class="sourceLineNo">321</span> String globalGaugeName = "source." + gaugeName;<a name="line.321"></a>
-<span class="sourceLineNo">322</span> long delta = 1;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> String counterName = "counter";<a name="line.323"></a>
-<span class="sourceLineNo">324</span> String singleCounterName = "source.id." + counterName;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> String globalCounterName = "source." + counterName;<a name="line.325"></a>
-<span class="sourceLineNo">326</span> long count = 2;<a name="line.326"></a>
-<span class="sourceLineNo">327</span> source.decGauge(gaugeName, delta);<a name="line.327"></a>
-<span class="sourceLineNo">328</span> source.getMetricsContext();<a name="line.328"></a>
-<span class="sourceLineNo">329</span> source.getMetricsDescription();<a name="line.329"></a>
-<span class="sourceLineNo">330</span> source.getMetricsJmxContext();<a name="line.330"></a>
-<span class="sourceLineNo">331</span> source.getMetricsName();<a name="line.331"></a>
-<span class="sourceLineNo">332</span> source.incCounters(counterName, count);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> source.incGauge(gaugeName, delta);<a name="line.333"></a>
-<span class="sourceLineNo">334</span> source.init();<a name="line.334"></a>
-<span class="sourceLineNo">335</span> source.removeMetric(gaugeName);<a name="line.335"></a>
-<span class="sourceLineNo">336</span> source.setGauge(gaugeName, delta);<a name="line.336"></a>
-<span class="sourceLineNo">337</span> source.updateHistogram(counterName, count);<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.339"></a>
-<span class="sourceLineNo">340</span> verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.340"></a>
-<span class="sourceLineNo">341</span> verify(globalRms).getMetricsContext();<a name="line.341"></a>
-<span class="sourceLineNo">342</span> verify(globalRms).getMetricsJmxContext();<a name="line.342"></a>
-<span class="sourceLineNo">343</span> verify(globalRms).getMetricsName();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> verify(singleRms).incCounters(singleCounterName, count);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> verify(globalRms).incCounters(globalCounterName, count);<a name="line.345"></a>
-<span class="sourceLineNo">346</span> verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.346"></a>
-<span class="sourceLineNo">347</span> verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> verify(globalRms).init();<a name="line.348"></a>
-<span class="sourceLineNo">349</span> verify(singleRms).removeMetric(singleGaugeName);<a name="line.349"></a>
-<span class="sourceLineNo">350</span> verify(globalRms).removeMetric(globalGaugeName);<a name="line.350"></a>
-<span class="sourceLineNo">351</span> verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.351"></a>
-<span class="sourceLineNo">352</span> verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.352"></a>
-<span class="sourceLineNo">353</span> verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> verify(globalRms).updateHistogram(globalCounterName, count);<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 void doPut(byte[] row) throws IOException {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> doPut(connection, row);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> }<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> try (Table t = connection.getTable(tableName)) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span> Put put = new Put(row);<a name="line.365"></a>
-<span class="sourceLineNo">366</span> put.addColumn(famName, row, row);<a name="line.366"></a>
-<span class="sourceLineNo">367</span> t.put(put);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> }<a name="line.368"></a>
-<span class="sourceLineNo">369</span> }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span> private static void doAssert(byte[] row) throws Exception {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span> return; // first call<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span> Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<Cell> cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> Assert.assertEquals(1, cells.size());<a name="line.377"></a>
-<span class="sourceLineNo">378</span> Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.378"></a>
-<span class="sourceLineNo">379</span> cells.get(0).getRowLength(), row, 0, row.length));<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> static UUID uuid = UUID.randomUUID();<a name="line.383"></a>
-<span class="sourceLineNo">384</span> static AtomicInteger contructedCount = new AtomicInteger();<a name="line.384"></a>
-<span class="sourceLineNo">385</span> static AtomicInteger startedCount = new AtomicInteger();<a name="line.385"></a>
-<span class="sourceLineNo">386</span> static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.386"></a>
-<span class="sourceLineNo">387</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.387"></a>
-<span class="sourceLineNo">388</span> static volatile List<Entry> lastEntries = null;<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> public ReplicationEndpointForTest() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span> replicateCount.set(0);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> contructedCount.incrementAndGet();<a name="line.392"></a>
-<span class="sourceLineNo">393</span> }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span> public UUID getPeerUUID() {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return uuid;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> }<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span> @Override<a name="line.400"></a>
-<span class="sourceLineNo">401</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> replicateCount.incrementAndGet();<a name="line.402"></a>
-<span class="sourceLineNo">403</span> lastEntries = new ArrayList<>(replicateContext.entries);<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return true;<a name="line.404"></a>
-<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span> @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span> public void start() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span> startAsync();<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void stop() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> stopAsync();<a name="line.414"></a>
-<span class="sourceLineNo">415</span> }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span> @Override<a name="line.417"></a>
-<span class="sourceLineNo">418</span> protected void doStart() {<a name="line.418"></a>
-<span class="sourceLineNo">419</span> startedCount.incrementAndGet();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> notifyStarted();<a name="line.420"></a>
-<span class="sourceLineNo">421</span> }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span> @Override<a name="line.423"></a>
-<span class="sourceLineNo">424</span> protected void doStop() {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> stoppedCount.incrementAndGet();<a name="line.425"></a>
-<span class="sourceLineNo">426</span> notifyStopped();<a name="line.426"></a>
-<span class="sourceLineNo">427</span> }<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span> public static class InterClusterReplicationEndpointForTest<a name="line.430"></a>
-<span class="sourceLineNo">431</span> extends HBaseInterClusterReplicationEndpoint {<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.433"></a>
-<span class="sourceLineNo">434</span> static boolean failedOnce;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> public InterClusterReplicationEndpointForTest() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span> replicateCount.set(0);<a name="line.437"></a>
-<span class="sourceLineNo">438</span> }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span> @Override<a name="line.440"></a>
-<span class="sourceLineNo">441</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> boolean success = super.replicate(replicateContext);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> if (success) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> replicateCount.addAndGet(replicateContext.entries.size());<a name="line.444"></a>
-<span class="sourceLineNo">445</span> }<a name="line.445"></a>
-<span class="sourceLineNo">446</span> return success;<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> @Override<a name="line.449"></a>
-<span class="sourceLineNo">450</span> protected Replicator createReplicator(List<Entry> entries, int ordinal) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span> // Fail only once, we don't want to slow down the test.<a name="line.451"></a>
-<span class="sourceLineNo">452</span> if (failedOnce) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> return new DummyReplicator(entries, ordinal);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> } else {<a name="line.454"></a>
-<span class="sourceLineNo">455</span> failedOnce = true;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> return new FailingDummyReplicator(entries, ordinal);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> }<a name="line.457"></a>
-<span class="sourceLineNo">458</span> }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span> protected class DummyReplicator extends Replicator {<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span> private int ordinal;<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span> public DummyReplicator(List<Entry> entries, int ordinal) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> super(entries, ordinal);<a name="line.465"></a>
-<span class="sourceLineNo">466</span> this.ordinal = ordinal;<a name="line.466"></a>
-<span class="sourceLineNo">467</span> }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span> @Override<a name="line.469"></a>
-<span class="sourceLineNo">470</span> public Integer call() throws IOException {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> return ordinal;<a name="line.471"></a>
-<span class="sourceLineNo">472</span> }<a name="line.472"></a>
-<span class="sourceLineNo">473</span> }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span> protected class FailingDummyReplicator extends DummyReplicator {<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span> public FailingDummyReplicator(List<Entry> entries, int ordinal) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span> super(entries, ordinal);<a name="line.478"></a>
-<span class="sourceLineNo">479</span> }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span> @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span> public Integer call() throws IOException {<a name="line.482"></a>
-<span class="sourceLineNo">483</span> throw new IOException("Sample Exception: Failed to replicate.");<a name="line.483"></a>
-<span class="sourceLineNo">484</span> }<a name="line.484"></a>
-<span class="sourceLineNo">485</span> }<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span> public static class ReplicationEndpointReturningFalse extends ReplicationEndpointForTest {<a name="line.488"></a>
-<span class="sourceLineNo">489</span> static int COUNT = 10;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> static AtomicReference<Exception> ex = new AtomicReference<>(null);<a name="line.490"></a>
-<span class="sourceLineNo">491</span> static AtomicBoolean replicated = new AtomicBoolean(false);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> @Override<a name="line.492"></a>
-<span class="sourceLineNo">493</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span> try {<a name="line.494"></a>
-<span class="sourceLineNo">495</span> // check row<a name="line.495"></a>
-<span class="sourceLineNo">496</span> doAssert(row);<a name="line.496"></a>
-<span class="sourceLineNo">497</span> } catch (Exception e) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span> ex.set(e);<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> super.replicate(replicateContext);<a name="line.501"></a>
-<span class="sourceLineNo">502</span> LOG.info("Replicated " + Bytes.toString(row) + ", count=" + replicateCount.get());<a name="line.502"></a>
-<span class="sourceLineNo">503</span><a name="line.503"></a>
-<span class="sourceLineNo">504</span> replicated.set(replicateCount.get() > COUNT); // first 10 times, we return false<a name="line.504"></a>
-<span class="sourceLineNo">505</span> return replicated.get();<a name="line.505"></a>
-<span class="sourceLineNo">506</span> }<a name="line.506"></a>
-<span class="sourceLineNo">507</span> }<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span> // return a WALEntry filter which only accepts "row", but not other rows<a name="line.509"></a>
-<span class="sourceLineNo">510</span> public static class ReplicationEndpointWithWALEntryFilter extends ReplicationEndpointForTest {<a name="line.510"></a>
-<span class="sourceLineNo">511</span> static AtomicReference<Exception> ex = new AtomicReference<>(null);<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> @Override<a name="line.513"></a>
-<span class="sourceLineNo">514</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span> try {<a name="line.515"></a>
-<span class="sourceLineNo">516</span> super.replicate(replicateContext);<a name="line.516"></a>
-<span class="sourceLineNo">517</span> doAssert(row);<a name="line.517"></a>
-<span class="sourceLineNo">518</span> } catch (Exception e) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span> ex.set(e);<a name="line.519"></a>
-<span class="sourceLineNo">520</span> }<a name="line.520"></a>
-<span class="sourceLineNo">521</span> return true;<a name="line.521"></a>
-<span class="sourceLineNo">522</span> }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span> @Override<a name="line.524"></a>
-<span class="sourceLineNo">525</span> public WALEntryFilter getWALEntryfilter() {<a name="line.525"></a>
-<span class="sourceLineNo">526</span> return new ChainWALEntryFilter(super.getWALEntryfilter(), new WALEntryFilter() {<a name="line.526"></a>
-<span class="sourceLineNo">527</span> @Override<a name="line.527"></a>
-<span class="sourceLineNo">528</span> public Entry filter(Entry entry) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span> ArrayList<Cell> cells = entry.getEdit().getCells();<a name="line.529"></a>
-<span class="sourceLineNo">530</span> int size = cells.size();<a name="line.530"></a>
-<span class="sourceLineNo">531</span> for (int i = size-1; i >= 0; i--) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span> Cell cell = cells.get(i);<a name="line.532"></a>
-<span class="sourceLineNo">533</span> if (!Bytes.equals(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),<a name="line.533"></a>
-<span class="sourceLineNo">534</span> row, 0, row.length)) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span> cells.remove(i);<a name="line.535"></a>
-<span class="sourceLineNo">536</span> }<a name="line.536"></a>
-<span class="sourceLineNo">537</span> }<a name="line.537"></a>
-<span class="sourceLineNo">538</span> return entry;<a name="line.538"></a>
-<span class="sourceLineNo">539</span> }<a name="line.539"></a>
-<span class="sourceLineNo">540</span> });<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> public static class EverythingPassesWALEntryFilter implements WALEntryFilter {<a name="line.544"></a>
-<span class="sourceLineNo">545</span> private static boolean passedEntry = false;<a name="line.545"></a>
-<span class="sourceLineNo">546</span> @Override<a name="line.546"></a>
-<span class="sourceLineNo">547</span> public Entry filter(Entry entry) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span> passedEntry = true;<a name="line.548"></a>
-<span class="sourceLineNo">549</span> return entry;<a name="line.549"></a>
-<span class="sourceLineNo">550</span> }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span> public static boolean hasPassedAnEntry(){<a name="line.552"></a>
-<span class="sourceLineNo">553</span> return passedEntry;<a name="line.553"></a>
-<span class="sourceLineNo">554</span> }<a name="line.554"></a>
-<span class="sourceLineNo">555</span> }<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span> public static class EverythingPassesWALEntryFilterSubclass extends EverythingPassesWALEntryFilter {<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span> }<a name="line.559"></a>
-<span class="sourceLineNo">560</span>}<a name="line.560"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>
[06/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 434a274..f7d6df6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -139,9 +139,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index a0bac17..a7e9eab 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -337,6 +337,7 @@
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestReplicator.FailureInjectingReplicationEndpointForTest</span></a></li>
</ul>
</li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestSerialReplicationEndpoint.TestEndpoint</span></a></li>
</ul>
</li>
</ul>
@@ -2679,6 +2680,7 @@
<li type="circle">org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestHBaseClient.html" title="class in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">TestHBaseClient</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestHBaseConfiguration.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestHBaseConfiguration</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestHBaseConfiguration.ReflectiveCredentialProviderClient.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestHBaseConfiguration.ReflectiveCredentialProviderClient</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestHBaseFsckCleanReplicationBarriers</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestHBaseFsckComparator</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestHBaseFsckEncryption</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestHBaseFsckReplication</span></a></li>
@@ -3258,11 +3260,6 @@
<li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass</span></a></li>
</ul>
</li>
-<li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</span></a>
-<ul>
-<li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator</span></a></li>
-</ul>
-</li>
<li type="circle">org.apache.hadoop.hbase.master.cleaner.<a href="org/apache/hadoop/hbase/master/cleaner/TestReplicationHFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner"><span class="typeNameLink">TestReplicationHFileCleaner</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.cleaner.<a href="org/apache/hadoop/hbase/master/cleaner/TestReplicationHFileCleaner.DummyServer.html" title="class in org.apache.hadoop.hbase.master.cleaner"><span class="typeNameLink">TestReplicationHFileCleaner.DummyServer</span></a> (implements org.apache.hadoop.hbase.Server)</li>
<li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationPeerConfig</span></a></li>
@@ -3290,12 +3287,6 @@
<li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationWithTags.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationWithTags</span></a></li>
<li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationWithTags.TestCoprocessorForTagsAtSink.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationWithTags.TestCoprocessorForTagsAtSink</span></a> (implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionObserver)</li>
<li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationWithTags.TestCoprocessorForTagsAtSource.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">TestReplicationWithTags.TestCoprocessorForTagsAtSource</span></a> (implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionObserver)</li>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</span></a> (implements org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface)</li>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</span></a>
-<ul>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest</span></a></li>
-</ul>
-</li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestReplicaWithCluster</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro</span></a> (implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionObserver)</li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.RegionServerStoppedCopro.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestReplicaWithCluster.RegionServerStoppedCopro</span></a> (implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionObserver)</li>
@@ -3406,6 +3397,7 @@
<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestSequenceIdMonotonicallyIncreasing.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestSequenceIdMonotonicallyIncreasing</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestSerialization.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestSerialization</span></a></li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestSerialReplicationChecker</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestSerialReplicationEndpoint</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.html" title="class in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">TestServerAndLoad</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestServerBusyException.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestServerBusyException</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestServerBusyException.SleepCoprocessor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestServerBusyException.SleepCoprocessor</span></a> (implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionObserver)</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html
index f6a8245..d406856 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html
@@ -305,18 +305,17 @@
<span class="sourceLineNo">297</span> notifyStopped();<a name="line.297"></a>
<span class="sourceLineNo">298</span> }<a name="line.298"></a>
<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span> @Override<a name="line.301"></a>
-<span class="sourceLineNo">302</span> public UUID getPeerUUID() {<a name="line.302"></a>
-<span class="sourceLineNo">303</span> return UUID.randomUUID();<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span> @Override<a name="line.306"></a>
-<span class="sourceLineNo">307</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span> return false;<a name="line.308"></a>
-<span class="sourceLineNo">309</span> }<a name="line.309"></a>
-<span class="sourceLineNo">310</span> }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>}<a name="line.311"></a>
+<span class="sourceLineNo">300</span> @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span> public UUID getPeerUUID() {<a name="line.301"></a>
+<span class="sourceLineNo">302</span> return UUID.randomUUID();<a name="line.302"></a>
+<span class="sourceLineNo">303</span> }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span> @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span> return false;<a name="line.307"></a>
+<span class="sourceLineNo">308</span> }<a name="line.308"></a>
+<span class="sourceLineNo">309</span> }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>}<a name="line.310"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.html
index f6a8245..d406856 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.html
@@ -305,18 +305,17 @@
<span class="sourceLineNo">297</span> notifyStopped();<a name="line.297"></a>
<span class="sourceLineNo">298</span> }<a name="line.298"></a>
<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span> @Override<a name="line.301"></a>
-<span class="sourceLineNo">302</span> public UUID getPeerUUID() {<a name="line.302"></a>
-<span class="sourceLineNo">303</span> return UUID.randomUUID();<a name="line.303"></a>
-<span class="sourceLineNo">304</span> }<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span> @Override<a name="line.306"></a>
-<span class="sourceLineNo">307</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span> return false;<a name="line.308"></a>
-<span class="sourceLineNo">309</span> }<a name="line.309"></a>
-<span class="sourceLineNo">310</span> }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>}<a name="line.311"></a>
+<span class="sourceLineNo">300</span> @Override<a name="line.300"></a>
+<span class="sourceLineNo">301</span> public UUID getPeerUUID() {<a name="line.301"></a>
+<span class="sourceLineNo">302</span> return UUID.randomUUID();<a name="line.302"></a>
+<span class="sourceLineNo">303</span> }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span> @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span> return false;<a name="line.307"></a>
+<span class="sourceLineNo">308</span> }<a name="line.308"></a>
+<span class="sourceLineNo">309</span> }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>}<a name="line.310"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html
index f902f89..bfbb1b8 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html
@@ -30,90 +30,93 @@
<span class="sourceLineNo">022</span>import static org.junit.Assert.assertThat;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import static org.junit.Assert.fail;<a name="line.23"></a>
<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.IOException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.fs.FileSystem;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.Path;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.MiscTests;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.junit.AfterClass;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.junit.BeforeClass;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.junit.ClassRule;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.junit.Rule;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.junit.Test;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.junit.experimental.categories.Category;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.junit.rules.TestName;<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>/**<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * Used to confirm that it is OK to overwrite a file which is being written currently.<a name="line.46"></a>
-<span class="sourceLineNo">047</span> */<a name="line.47"></a>
-<span class="sourceLineNo">048</span>@Category({ MiscTests.class, MediumTests.class })<a name="line.48"></a>
-<span class="sourceLineNo">049</span>public class TestOverwriteFileUnderConstruction {<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span> @ClassRule<a name="line.51"></a>
-<span class="sourceLineNo">052</span> public static final HBaseClassTestRule CLASS_RULE =<a name="line.52"></a>
-<span class="sourceLineNo">053</span> HBaseClassTestRule.forClass(TestOverwriteFileUnderConstruction.class);<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span> private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span> private static FileSystem FS;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span> @Rule<a name="line.59"></a>
-<span class="sourceLineNo">060</span> public final TestName name = new TestName();<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span> @BeforeClass<a name="line.62"></a>
-<span class="sourceLineNo">063</span> public static void setUp() throws Exception {<a name="line.63"></a>
-<span class="sourceLineNo">064</span> UTIL.startMiniDFSCluster(3);<a name="line.64"></a>
-<span class="sourceLineNo">065</span> FS = UTIL.getDFSCluster().getFileSystem();<a name="line.65"></a>
-<span class="sourceLineNo">066</span> }<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span> @AfterClass<a name="line.68"></a>
-<span class="sourceLineNo">069</span> public static void tearDown() throws Exception {<a name="line.69"></a>
-<span class="sourceLineNo">070</span> UTIL.shutdownMiniCluster();<a name="line.70"></a>
-<span class="sourceLineNo">071</span> }<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span> @Test<a name="line.73"></a>
-<span class="sourceLineNo">074</span> public void testNotOverwrite() throws IOException {<a name="line.74"></a>
-<span class="sourceLineNo">075</span> Path file = new Path("/" + name.getMethodName());<a name="line.75"></a>
-<span class="sourceLineNo">076</span> try (FSDataOutputStream out1 = FS.create(file)) {<a name="line.76"></a>
-<span class="sourceLineNo">077</span> try {<a name="line.77"></a>
-<span class="sourceLineNo">078</span> FS.create(file, false);<a name="line.78"></a>
-<span class="sourceLineNo">079</span> fail("Should fail as there is a file with the same name which is being written");<a name="line.79"></a>
-<span class="sourceLineNo">080</span> } catch (RemoteException e) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span> // expected<a name="line.81"></a>
-<span class="sourceLineNo">082</span> assertThat(e.unwrapRemoteException(), instanceOf(AlreadyBeingCreatedException.class));<a name="line.82"></a>
-<span class="sourceLineNo">083</span> }<a name="line.83"></a>
-<span class="sourceLineNo">084</span> }<a name="line.84"></a>
-<span class="sourceLineNo">085</span> }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span> @Test<a name="line.87"></a>
-<span class="sourceLineNo">088</span> public void testOverwrite() throws IOException {<a name="line.88"></a>
-<span class="sourceLineNo">089</span> Path file = new Path("/" + name.getMethodName());<a name="line.89"></a>
-<span class="sourceLineNo">090</span> FSDataOutputStream out1 = FS.create(file);<a name="line.90"></a>
-<span class="sourceLineNo">091</span> FSDataOutputStream out2 = FS.create(file, true);<a name="line.91"></a>
-<span class="sourceLineNo">092</span> out1.write(2);<a name="line.92"></a>
-<span class="sourceLineNo">093</span> out2.write(1);<a name="line.93"></a>
-<span class="sourceLineNo">094</span> try {<a name="line.94"></a>
-<span class="sourceLineNo">095</span> out1.close();<a name="line.95"></a>
-<span class="sourceLineNo">096</span> // a successful close is also OK for us so no assertion here, we just need to confirm that the<a name="line.96"></a>
-<span class="sourceLineNo">097</span> // data in the file are correct.<a name="line.97"></a>
-<span class="sourceLineNo">098</span> } catch (RemoteException e) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span> // expected<a name="line.99"></a>
-<span class="sourceLineNo">100</span> assertThat(e.unwrapRemoteException(), instanceOf(LeaseExpiredException.class));<a name="line.100"></a>
-<span class="sourceLineNo">101</span> }<a name="line.101"></a>
-<span class="sourceLineNo">102</span> out2.close();<a name="line.102"></a>
-<span class="sourceLineNo">103</span> try (FSDataInputStream in = FS.open(file)) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span> assertEquals(1, in.read());<a name="line.104"></a>
-<span class="sourceLineNo">105</span> assertEquals(-1, in.read());<a name="line.105"></a>
-<span class="sourceLineNo">106</span> }<a name="line.106"></a>
-<span class="sourceLineNo">107</span> }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>}<a name="line.108"></a>
+<span class="sourceLineNo">025</span>import java.io.FileNotFoundException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.FileSystem;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.Path;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.MiscTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.AfterClass;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.BeforeClass;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.ClassRule;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.junit.Rule;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.junit.Test;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.junit.experimental.categories.Category;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.junit.rules.TestName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>/**<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * Used to confirm that it is OK to overwrite a file which is being written currently.<a name="line.47"></a>
+<span class="sourceLineNo">048</span> */<a name="line.48"></a>
+<span class="sourceLineNo">049</span>@Category({ MiscTests.class, MediumTests.class })<a name="line.49"></a>
+<span class="sourceLineNo">050</span>public class TestOverwriteFileUnderConstruction {<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span> @ClassRule<a name="line.52"></a>
+<span class="sourceLineNo">053</span> public static final HBaseClassTestRule CLASS_RULE =<a name="line.53"></a>
+<span class="sourceLineNo">054</span> HBaseClassTestRule.forClass(TestOverwriteFileUnderConstruction.class);<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span> private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span> private static FileSystem FS;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span> @Rule<a name="line.60"></a>
+<span class="sourceLineNo">061</span> public final TestName name = new TestName();<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span> @BeforeClass<a name="line.63"></a>
+<span class="sourceLineNo">064</span> public static void setUp() throws Exception {<a name="line.64"></a>
+<span class="sourceLineNo">065</span> UTIL.startMiniDFSCluster(3);<a name="line.65"></a>
+<span class="sourceLineNo">066</span> FS = UTIL.getDFSCluster().getFileSystem();<a name="line.66"></a>
+<span class="sourceLineNo">067</span> }<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span> @AfterClass<a name="line.69"></a>
+<span class="sourceLineNo">070</span> public static void tearDown() throws Exception {<a name="line.70"></a>
+<span class="sourceLineNo">071</span> UTIL.shutdownMiniCluster();<a name="line.71"></a>
+<span class="sourceLineNo">072</span> }<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span> @Test<a name="line.74"></a>
+<span class="sourceLineNo">075</span> public void testNotOverwrite() throws IOException {<a name="line.75"></a>
+<span class="sourceLineNo">076</span> Path file = new Path("/" + name.getMethodName());<a name="line.76"></a>
+<span class="sourceLineNo">077</span> try (FSDataOutputStream out1 = FS.create(file)) {<a name="line.77"></a>
+<span class="sourceLineNo">078</span> try {<a name="line.78"></a>
+<span class="sourceLineNo">079</span> FS.create(file, false);<a name="line.79"></a>
+<span class="sourceLineNo">080</span> fail("Should fail as there is a file with the same name which is being written");<a name="line.80"></a>
+<span class="sourceLineNo">081</span> } catch (RemoteException e) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span> // expected<a name="line.82"></a>
+<span class="sourceLineNo">083</span> assertThat(e.unwrapRemoteException(), instanceOf(AlreadyBeingCreatedException.class));<a name="line.83"></a>
+<span class="sourceLineNo">084</span> }<a name="line.84"></a>
+<span class="sourceLineNo">085</span> }<a name="line.85"></a>
+<span class="sourceLineNo">086</span> }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span> @Test<a name="line.88"></a>
+<span class="sourceLineNo">089</span> public void testOverwrite() throws IOException {<a name="line.89"></a>
+<span class="sourceLineNo">090</span> Path file = new Path("/" + name.getMethodName());<a name="line.90"></a>
+<span class="sourceLineNo">091</span> FSDataOutputStream out1 = FS.create(file);<a name="line.91"></a>
+<span class="sourceLineNo">092</span> FSDataOutputStream out2 = FS.create(file, true);<a name="line.92"></a>
+<span class="sourceLineNo">093</span> out1.write(2);<a name="line.93"></a>
+<span class="sourceLineNo">094</span> out2.write(1);<a name="line.94"></a>
+<span class="sourceLineNo">095</span> try {<a name="line.95"></a>
+<span class="sourceLineNo">096</span> out1.close();<a name="line.96"></a>
+<span class="sourceLineNo">097</span> // a successful close is also OK for us so no assertion here, we just need to confirm that the<a name="line.97"></a>
+<span class="sourceLineNo">098</span> // data in the file are correct.<a name="line.98"></a>
+<span class="sourceLineNo">099</span> } catch (FileNotFoundException fnfe) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span> // hadoop3 throws one of these.<a name="line.100"></a>
+<span class="sourceLineNo">101</span> } catch (RemoteException e) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span> // expected<a name="line.102"></a>
+<span class="sourceLineNo">103</span> assertThat(e.unwrapRemoteException(), instanceOf(LeaseExpiredException.class));<a name="line.103"></a>
+<span class="sourceLineNo">104</span> }<a name="line.104"></a>
+<span class="sourceLineNo">105</span> out2.close();<a name="line.105"></a>
+<span class="sourceLineNo">106</span> try (FSDataInputStream in = FS.open(file)) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span> assertEquals(1, in.read());<a name="line.107"></a>
+<span class="sourceLineNo">108</span> assertEquals(-1, in.read());<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span> }<a name="line.110"></a>
+<span class="sourceLineNo">111</span>}<a name="line.111"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationSourceDummy.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationSourceDummy.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationSourceDummy.html
index 929be46..a49a4ef 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationSourceDummy.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationSourceDummy.html
@@ -88,12 +88,12 @@
<span class="sourceLineNo">080</span><a name="line.80"></a>
<span class="sourceLineNo">081</span> @Override<a name="line.81"></a>
<span class="sourceLineNo">082</span> public void terminate(String reason) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">083</span> terminate(reason, null);<a name="line.83"></a>
<span class="sourceLineNo">084</span> }<a name="line.84"></a>
<span class="sourceLineNo">085</span><a name="line.85"></a>
<span class="sourceLineNo">086</span> @Override<a name="line.86"></a>
<span class="sourceLineNo">087</span> public void terminate(String reason, Exception e) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">088</span> this.metrics.clear();<a name="line.88"></a>
<span class="sourceLineNo">089</span> }<a name="line.89"></a>
<span class="sourceLineNo">090</span><a name="line.90"></a>
<span class="sourceLineNo">091</span> @Override<a name="line.91"></a>
[33/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call
<TRUNCATED>
[47/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
index 9a3d7b2..c2b5c86 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" target="_top">Frames</a></li>
@@ -74,7 +74,7 @@ var activeTableTab = "activeTableTab";
<div>
<ul class="subNavList">
<li>Summary: </li>
-<li><a href="#nested.class.summary">Nested</a> | </li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a> | </li>
<li><a href="#field.summary">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
@@ -129,7 +129,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.79">HBaseInterClusterReplicationEndpoint</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.82">HBaseInterClusterReplicationEndpoint</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a></pre>
<div class="block">A <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html" title="interface in org.apache.hadoop.hbase.replication"><code>ReplicationEndpoint</code></a>
implementation for replicating to another HBase cluster.
@@ -152,17 +152,6 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<!-- -->
</a>
<h3>Nested Class Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
-<caption><span>Nested Classes</span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Class and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>protected class </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a></span></code> </td>
-</tr>
-</table>
<ul class="blockList">
<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">
<!-- -->
@@ -231,54 +220,58 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#hfileArchiveDir">hfileArchiveDir</a></span></code> </td>
</tr>
<tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#isSerial">isSerial</a></span></code> </td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code>private org.apache.hadoop.conf.Configuration</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#localConf">localConf</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#LOG">LOG</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#maxRetriesMultiplier">maxRetriesMultiplier</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#maxTerminationWait">maxTerminationWait</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#maxThreads">maxThreads</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#metrics">metrics</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#peersSelected">peersSelected</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#replicationBulkLoadDataEnabled">replicationBulkLoadDataEnabled</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#replicationClusterId">replicationClusterId</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#replicationRpcLimit">replicationRpcLimit</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#replicationSinkMgr">replicationSinkMgr</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#sleepForRetries">sleepForRetries</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#socketTimeoutMultiplier">socketTimeoutMultiplier</a></span></code> </td>
</tr>
@@ -327,51 +320,82 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createBatches-java.util.List-">createBatches</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createBatches-java.util.List-">createBatches</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</code>
+<div class="block">Divide the entries into multiple batches, so that we can replicate each batch in a thread pool
+ concurrently.</div>
+</td>
</tr>
<tr id="i2" class="altColor">
-<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createReplicator-java.util.List-int-">createReplicator</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
- int ordinal)</code> </td>
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createParallelBatches-java.util.List-">createParallelBatches</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</code> </td>
</tr>
<tr id="i3" class="rowColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createReplicator-java.util.List-int-">createReplicator</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
+ int batchIndex)</code> </td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createSerialBatches-java.util.List-">createSerialBatches</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</code> </td>
+</tr>
+<tr id="i5" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#decorateConf--">decorateConf</a></span>()</code> </td>
</tr>
-<tr id="i4" class="altColor">
+<tr id="i6" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#doStop--">doStop</a></span>()</code> </td>
</tr>
-<tr id="i5" class="rowColor">
+<tr id="i7" class="rowColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#filterBatches-java.util.List-org.apache.hadoop.hbase.TableName-">filterBatches</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>> oldEntryList,
<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)</code> </td>
</tr>
-<tr id="i6" class="altColor">
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#getEstimatedEntrySize-org.apache.hadoop.hbase.wal.WAL.Entry-">getEstimatedEntrySize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> e)</code> </td>
+</tr>
+<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#init-org.apache.hadoop.hbase.replication.ReplicationEndpoint.Context-">init</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.Context.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.Context</a> context)</code>
<div class="block">Initialize the replication endpoint with the given context.</div>
</td>
</tr>
-<tr id="i7" class="rowColor">
+<tr id="i10" class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#isPeerEnabled--">isPeerEnabled</a></span>()</code> </td>
</tr>
-<tr id="i8" class="altColor">
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#parallelReplicate-java.util.concurrent.CompletionService-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-java.util.List-">parallelReplicate</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionService.html?is-external=true" title="class or interface in java.util.concurrent">CompletionService</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> pool,
+ <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a> replicateContext,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>> batches)</code> </td>
+</tr>
+<tr id="i12" class="altColor">
<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#parseTable-java.lang.String-">parseTable</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg)</code> </td>
</tr>
-<tr id="i9" class="rowColor">
+<tr id="i13" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#reconnectToPeerCluster--">reconnectToPeerCluster</a></span>()</code> </td>
</tr>
-<tr id="i10" class="altColor">
+<tr id="i14" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#replicate-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-">replicate</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a> replicateContext)</code>
<div class="block">Do the shipping logic</div>
</td>
</tr>
-<tr id="i11" class="rowColor">
+<tr id="i15" class="rowColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#replicateEntries-java.util.List-int-">replicateEntries</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
+ int batchIndex)</code> </td>
+</tr>
+<tr id="i16" class="altColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#serialReplicateRegionEntries-java.util.List-int-">serialReplicateRegionEntries</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
+ int batchIndex)</code> </td>
+</tr>
+<tr id="i17" class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#sleepForRetries-java.lang.String-int-">sleepForRetries</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg,
int sleepMultiplier)</code>
@@ -434,7 +458,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.80">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.83">LOG</a></pre>
</li>
</ul>
<a name="DEFAULT_MAX_TERMINATION_WAIT_MULTIPLIER">
@@ -443,7 +467,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_MAX_TERMINATION_WAIT_MULTIPLIER</h4>
-<pre>private static final long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.83">DEFAULT_MAX_TERMINATION_WAIT_MULTIPLIER</a></pre>
+<pre>private static final long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.86">DEFAULT_MAX_TERMINATION_WAIT_MULTIPLIER</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.DEFAULT_MAX_TERMINATION_WAIT_MULTIPLIER">Constant Field Values</a></dd>
@@ -456,7 +480,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>conn</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.85">conn</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.88">conn</a></pre>
</li>
</ul>
<a name="localConf">
@@ -465,7 +489,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>localConf</h4>
-<pre>private org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.86">localConf</a></pre>
+<pre>private org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.89">localConf</a></pre>
</li>
</ul>
<a name="conf">
@@ -474,7 +498,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>conf</h4>
-<pre>private org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.87">conf</a></pre>
+<pre>private org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.90">conf</a></pre>
</li>
</ul>
<a name="sleepForRetries">
@@ -483,7 +507,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>sleepForRetries</h4>
-<pre>private long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.89">sleepForRetries</a></pre>
+<pre>private long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.92">sleepForRetries</a></pre>
</li>
</ul>
<a name="maxRetriesMultiplier">
@@ -492,7 +516,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>maxRetriesMultiplier</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.91">maxRetriesMultiplier</a></pre>
+<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.94">maxRetriesMultiplier</a></pre>
</li>
</ul>
<a name="socketTimeoutMultiplier">
@@ -501,7 +525,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>socketTimeoutMultiplier</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.93">socketTimeoutMultiplier</a></pre>
+<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.96">socketTimeoutMultiplier</a></pre>
</li>
</ul>
<a name="maxTerminationWait">
@@ -510,7 +534,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>maxTerminationWait</h4>
-<pre>private long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.95">maxTerminationWait</a></pre>
+<pre>private long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.98">maxTerminationWait</a></pre>
</li>
</ul>
<a name="replicationRpcLimit">
@@ -519,7 +543,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>replicationRpcLimit</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.97">replicationRpcLimit</a></pre>
+<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.100">replicationRpcLimit</a></pre>
</li>
</ul>
<a name="metrics">
@@ -528,7 +552,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>metrics</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.99">metrics</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.102">metrics</a></pre>
</li>
</ul>
<a name="replicationSinkMgr">
@@ -537,7 +561,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>replicationSinkMgr</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.101">replicationSinkMgr</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.104">replicationSinkMgr</a></pre>
</li>
</ul>
<a name="peersSelected">
@@ -546,7 +570,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>peersSelected</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.102">peersSelected</a></pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.105">peersSelected</a></pre>
</li>
</ul>
<a name="replicationClusterId">
@@ -555,7 +579,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>replicationClusterId</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.103">replicationClusterId</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.106">replicationClusterId</a></pre>
</li>
</ul>
<a name="exec">
@@ -564,7 +588,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>exec</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.104">exec</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.107">exec</a></pre>
</li>
</ul>
<a name="maxThreads">
@@ -573,7 +597,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>maxThreads</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.105">maxThreads</a></pre>
+<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.108">maxThreads</a></pre>
</li>
</ul>
<a name="baseNamespaceDir">
@@ -582,7 +606,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>baseNamespaceDir</h4>
-<pre>private org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.106">baseNamespaceDir</a></pre>
+<pre>private org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.109">baseNamespaceDir</a></pre>
</li>
</ul>
<a name="hfileArchiveDir">
@@ -591,7 +615,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>hfileArchiveDir</h4>
-<pre>private org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.107">hfileArchiveDir</a></pre>
+<pre>private org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.110">hfileArchiveDir</a></pre>
</li>
</ul>
<a name="replicationBulkLoadDataEnabled">
@@ -600,7 +624,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>replicationBulkLoadDataEnabled</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.108">replicationBulkLoadDataEnabled</a></pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.111">replicationBulkLoadDataEnabled</a></pre>
</li>
</ul>
<a name="abortable">
@@ -609,16 +633,25 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>abortable</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.109">abortable</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.112">abortable</a></pre>
</li>
</ul>
<a name="dropOnDeletedTables">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
<h4>dropOnDeletedTables</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.110">dropOnDeletedTables</a></pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.113">dropOnDeletedTables</a></pre>
+</li>
+</ul>
+<a name="isSerial">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>isSerial</h4>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.114">isSerial</a></pre>
</li>
</ul>
</li>
@@ -635,7 +668,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockListLast">
<li class="blockList">
<h4>HBaseInterClusterReplicationEndpoint</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.79">HBaseInterClusterReplicationEndpoint</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.82">HBaseInterClusterReplicationEndpoint</a>()</pre>
</li>
</ul>
</li>
@@ -652,7 +685,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>init</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.113">init</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.Context.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.Context</a> context)
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.117">init</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.Context.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.Context</a> context)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html#init-org.apache.hadoop.hbase.replication.ReplicationEndpoint.Context-">ReplicationEndpoint</a></code></span></div>
<div class="block">Initialize the replication endpoint with the given context.</div>
@@ -664,7 +697,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - replication context</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - error occur when initialize the endpoint.</dd>
</dl>
</li>
</ul>
@@ -674,7 +707,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>decorateConf</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.165">decorateConf</a>()</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.170">decorateConf</a>()</pre>
</li>
</ul>
<a name="connectToPeers--">
@@ -683,7 +716,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>connectToPeers</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.172">connectToPeers</a>()</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.177">connectToPeers</a>()</pre>
</li>
</ul>
<a name="sleepForRetries-java.lang.String-int-">
@@ -692,7 +725,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>sleepForRetries</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.194">sleepForRetries</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg,
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.199">sleepForRetries</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg,
int sleepMultiplier)</pre>
<div class="block">Do the sleeping logic</div>
<dl>
@@ -704,13 +737,45 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
</dl>
</li>
</ul>
+<a name="getEstimatedEntrySize-org.apache.hadoop.hbase.wal.WAL.Entry-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getEstimatedEntrySize</h4>
+<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.211">getEstimatedEntrySize</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> e)</pre>
+</li>
+</ul>
+<a name="createParallelBatches-java.util.List-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createParallelBatches</h4>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.216">createParallelBatches</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</pre>
+</li>
+</ul>
+<a name="createSerialBatches-java.util.List-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createSerialBatches</h4>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.238">createSerialBatches</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</pre>
+</li>
+</ul>
<a name="createBatches-java.util.List-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>createBatches</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.206">createBatches</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.254">createBatches</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</pre>
+<div class="block">Divide the entries into multiple batches, so that we can replicate each batch in a thread pool
+ concurrently. Note that, for serial replication, we need to make sure that entries from the
+ same region to be replicated serially, so entries from the same region consist of a batch, and
+ we will divide a batch into several batches by replicationRpcLimit in method
+ serialReplicateRegionEntries()</div>
</li>
</ul>
<a name="parseTable-java.lang.String-">
@@ -719,7 +784,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>parseTable</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.237">parseTable</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg)</pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.262">parseTable</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg)</pre>
</li>
</ul>
<a name="filterBatches-java.util.List-org.apache.hadoop.hbase.TableName-">
@@ -728,7 +793,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>filterBatches</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.254">filterBatches</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">W
AL.Entry</a>>> oldEntryList,
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.279">filterBatches</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">W
AL.Entry</a>>> oldEntryList,
<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)</pre>
</li>
</ul>
@@ -738,7 +803,23 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>reconnectToPeerCluster</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.268">reconnectToPeerCluster</a>()</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.286">reconnectToPeerCluster</a>()</pre>
+</li>
+</ul>
+<a name="parallelReplicate-java.util.concurrent.CompletionService-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-java.util.List-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>parallelReplicate</h4>
+<pre>private long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.298">parallelReplicate</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionService.html?is-external=true" title="class or interface in java.util.concurrent">CompletionService</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> pool,
+ <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a> replicateContext,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>> batches)
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
</li>
</ul>
<a name="replicate-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-">
@@ -747,7 +828,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>replicate</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.284">replicate</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a> replicateContext)</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.345">replicate</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a> replicateContext)</pre>
<div class="block">Do the shipping logic</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -762,7 +843,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>isPeerEnabled</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.417">isPeerEnabled</a>()</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.441">isPeerEnabled</a>()</pre>
</li>
</ul>
<a name="doStop--">
@@ -771,21 +852,51 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<ul class="blockList">
<li class="blockList">
<h4>doStop</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.422">doStop</a>()</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.446">doStop</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#doStop--">doStop</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a></code></dd>
</dl>
</li>
</ul>
+<a name="replicateEntries-java.util.List-int-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>replicateEntries</h4>
+<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.473">replicateEntries</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
+ int batchIndex)
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="serialReplicateRegionEntries-java.util.List-int-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>serialReplicateRegionEntries</h4>
+<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.502">serialReplicateRegionEntries</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
+ int batchIndex)
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
<a name="createReplicator-java.util.List-int-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>createReplicator</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.449">createReplicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
- int ordinal)</pre>
+<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.523">createReplicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
+ int batchIndex)</pre>
</li>
</ul>
</li>
@@ -817,7 +928,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" target="_top">Frames</a></li>
@@ -841,7 +952,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<div>
<ul class="subNavList">
<li>Summary: </li>
-<li><a href="#nested.class.summary">Nested</a> | </li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a> | </li>
<li><a href="#field.summary">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.html
index c4bf92d..7aea11f 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.Copier.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
@@ -684,7 +684,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.Copier.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html
index c809e1a..c8fa923 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html
@@ -417,7 +417,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionser
<ul class="blockList">
<li class="blockList">
<h4>getPeerId</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html#line.159">getPeerId</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html#line.160">getPeerId</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getPeerId--">ReplicationSourceInterface</a></code></span></div>
<div class="block">Get the id that the source is replicating to.</div>
<dl>
@@ -436,7 +436,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionser
<ul class="blockList">
<li class="blockList">
<h4>getServerWALsBelongTo</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html#line.164">getServerWALsBelongTo</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html#line.165">getServerWALsBelongTo</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getServerWALsBelongTo--">ReplicationSourceInterface</a></code></span></div>
<div class="block">The queue of WALs only belong to one region server. This will return the server name which all
WALs belong to.</div>
@@ -456,7 +456,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionser
<ul class="blockListLast">
<li class="blockList">
<h4>isRecovered</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html#line.169">isRecovered</a>()</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html#line.170">isRecovered</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>whether this is a replication source for recovery.</dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.html
index 087b553..0a50aef 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.html
@@ -520,7 +520,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - replication context</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - error occur when initialize the endpoint.</dd>
</dl>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
index 513f1e9..6077553 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.553">ReplicationSource.LogsComparator</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.554">ReplicationSource.LogsComparator</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a><org.apache.hadoop.fs.Path></pre>
<div class="block">Comparator used to compare logs together based on their start time</div>
@@ -203,7 +203,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparat
<ul class="blockListLast">
<li class="blockList">
<h4>LogsComparator</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.553">LogsComparator</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.554">LogsComparator</a>()</pre>
</li>
</ul>
</li>
@@ -220,7 +220,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparat
<ul class="blockList">
<li class="blockList">
<h4>compare</h4>
-<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.556">compare</a>(org.apache.hadoop.fs.Path o1,
+<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.557">compare</a>(org.apache.hadoop.fs.Path o1,
org.apache.hadoop.fs.Path o2)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -234,7 +234,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparat
<ul class="blockListLast">
<li class="blockList">
<h4>getTS</h4>
-<pre>private static long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.566">getTS</a>(org.apache.hadoop.fs.Path p)</pre>
+<pre>private static long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.567">getTS</a>(org.apache.hadoop.fs.Path p)</pre>
<div class="block">Split a path to get the start time
For example: 10.20.20.171%3A60020.1277499063250</div>
<dl>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
index eeaa1c4..29af5bd 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
@@ -1217,7 +1217,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
<ul class="blockList">
<li class="blockList">
<h4>getQueueId</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.525">getQueueId</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.526">getQueueId</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getQueueId--">ReplicationSourceInterface</a></code></span></div>
<div class="block">Get the queue id that the source is replicating to</div>
<dl>
@@ -1234,7 +1234,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
<ul class="blockList">
<li class="blockList">
<h4>getPeerId</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.530">getPeerId</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.531">getPeerId</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getPeerId--">ReplicationSourceInterface</a></code></span></div>
<div class="block">Get the id that the source is replicating to.</div>
<dl>
@@ -1251,7 +1251,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
<ul class="blockList">
<li class="blockList">
<h4>getCurrentPath</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.535">getCurrentPath</a>()</pre>
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.536">getCurrentPath</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getCurrentPath--">ReplicationSourceInterface</a></code></span></div>
<div class="block">Get the current log that's replicated</div>
<dl>
@@ -1268,7 +1268,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
<ul class="blockList">
<li class="blockList">
<h4>isSourceActive</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.546">isSourceActive</a>()</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.547">isSourceActive</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#isSourceActive--">isSourceActive</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a></code></dd>
@@ -1283,7 +1283,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
<ul class="blockList">
<li class="blockList">
<h4>getStats</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.573">getStats</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.574">getStats</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getStats--">ReplicationSourceInterface</a></code></span></div>
<div class="block">Get a string representation of the current statistics
for this source</div>
@@ -1301,7 +1301,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
<ul class="blockList">
<li class="blockList">
<h4>getSourceMetrics</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.594">getSourceMetrics</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.595">getSourceMetrics</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getSourceMetrics--">getSourceMetrics</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a></code></dd>
@@ -1316,7 +1316,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
<ul class="blockList">
<li class="blockList">
<h4>postShipEdits</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.599">postShipEdits</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.600">postShipEdits</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
int batchSize)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#postShipEdits-java.util.List-int-">ReplicationSourceInterface</a></code></span></div>
<div class="block">Call this after the shipper thread ship some entries to peer cluster.</div>
@@ -1335,7 +1335,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
<ul class="blockList">
<li class="blockList">
<h4>getWALFileLengthProvider</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALFileLengthProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.608">getWALFileLengthProvider</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALFileLengthProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.609">getWALFileLengthProvider</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getWALFileLengthProvider--">getWALFileLengthProvider</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a></code></dd>
@@ -1350,7 +1350,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
<ul class="blockList">
<li class="blockList">
<h4>getServerWALsBelongTo</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.613">getServerWALsBelongTo</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.614">getServerWALsBelongTo</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getServerWALsBelongTo--">ReplicationSourceInterface</a></code></span></div>
<div class="block">The queue of WALs only belong to one region server. This will return the server name which all
WALs belong to.</div>
@@ -1368,7 +1368,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
<ul class="blockList">
<li class="blockList">
<h4>getServer</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.617">getServer</a>()</pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.618">getServer</a>()</pre>
</li>
</ul>
<a name="getQueueStorage--">
@@ -1377,7 +1377,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/region
<ul class="blockListLast">
<li class="blockList">
<h4>getQueueStorage</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.621">getQueueStorage</a>()</pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.622">getQueueStorage</a>()</pre>
</li>
</ul>
</li>
[07/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-frame.html
index 7303f51..c604218 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-frame.html
@@ -32,9 +32,10 @@
<li><a href="TestReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestReplicationThrottler</a></li>
<li><a href="TestReplicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestReplicator</a></li>
<li><a href="TestReplicator.FailureInjectingReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestReplicator.FailureInjectingReplicationEndpointForTest</a></li>
-<li><a href="TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></li>
<li><a href="TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestReplicator.ReplicationEndpointForTest</a></li>
<li><a href="TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestSerialReplicationChecker</a></li>
+<li><a href="TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestSerialReplicationEndpoint</a></li>
+<li><a href="TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestSerialReplicationEndpoint.TestEndpoint</a></li>
<li><a href="TestSourceFSConfigurationProvider.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestSourceFSConfigurationProvider</a></li>
<li><a href="TestWALEntrySinkFilter.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestWALEntrySinkFilter</a></li>
<li><a href="TestWALEntrySinkFilter.DevNullConnection.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestWALEntrySinkFilter.DevNullConnection</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html
index 9b27b42..fd9dcc8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html
@@ -173,40 +173,44 @@
<td class="colLast"> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest</a></td>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationChecker</a></td>
<td class="colLast"> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationChecker</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint</a></td>
<td class="colLast"> </td>
</tr>
<tr class="altColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSourceFSConfigurationProvider.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSourceFSConfigurationProvider</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint.TestEndpoint</a></td>
<td class="colLast"> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSourceFSConfigurationProvider.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSourceFSConfigurationProvider</a></td>
+<td class="colLast"> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestWALEntrySinkFilter</a></td>
<td class="colLast">
<div class="block">Simple test of sink-side wal entry filter facility.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.DevNullConnection.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestWALEntrySinkFilter.DevNullConnection</a></td>
<td class="colLast">
<div class="block">A DevNull Connection whose only purpose is checking what edits made it through.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.IfTimeIsGreaterThanBOUNDARYWALEntrySinkFilterImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestWALEntrySinkFilter.IfTimeIsGreaterThanBOUNDARYWALEntrySinkFilterImpl</a></td>
<td class="colLast">
<div class="block">Simple filter that will filter out any entry wholse writeTime is <= 5.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestWALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestWALEntryStream</a></td>
<td class="colLast"> </td>
</tr>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
index f7c6455..b47d481 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
@@ -94,6 +94,7 @@
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestReplicator.FailureInjectingReplicationEndpointForTest</span></a></li>
</ul>
</li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestSerialReplicationEndpoint.TestEndpoint</span></a></li>
</ul>
</li>
</ul>
@@ -138,13 +139,8 @@
</li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.DummyServer.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestReplicationSourceManager.DummyServer</span></a> (implements org.apache.hadoop.hbase.Server)</li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestReplicationThrottler</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</span></a> (implements org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface)</li>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</span></a>
-<ul>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest</span></a></li>
-</ul>
-</li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestSerialReplicationChecker</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestSerialReplicationEndpoint</span></a></li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSourceFSConfigurationProvider.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestSourceFSConfigurationProvider</span></a> (implements org.apache.hadoop.hbase.replication.regionserver.SourceFSConfigurationProvider)</li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestWALEntrySinkFilter</span></a></li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.DevNullConnection.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">TestWALEntrySinkFilter.DevNullConnection</span></a> (implements org.apache.hadoop.hbase.client.Connection)</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-use.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-use.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-use.html
index 0160222..2cc1058 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-use.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/package-use.html
@@ -107,9 +107,6 @@
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.ReplicationEndpointForTest.html#org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest</a> </td>
</tr>
<tr class="altColor">
-<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html#org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</a> </td>
-</tr>
-<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/TestWALEntryStream.PathWatcher.html#org.apache.hadoop.hbase.replication.regionserver">TestWALEntryStream.PathWatcher</a> </td>
</tr>
</tbody>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
index a57fd99..ecfaabf 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -253,10 +253,10 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/util/TestFSVisitor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestFSVisitor.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestFSVisitor.html
index b6165b7..9eb80f4 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/TestFSVisitor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/TestFSVisitor.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/hadoop/hbase/util/TestFSUtils.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/TestFSVisitor.html" target="_top">Frames</a></li>
@@ -452,7 +452,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/hadoop/hbase/util/TestFSUtils.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/TestFSVisitor.html" target="_top">Frames</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html
new file mode 100644
index 0000000..1e718e8
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html
@@ -0,0 +1,538 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestHBaseFsckCleanReplicationBarriers (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="TestHBaseFsckCleanReplicationBarriers (Apache HBase 3.0.0-SNAPSHOT Test API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":10,"i1":9,"i2":9,"i3":9,"i4":10,"i5":10,"i6":10,"i7":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestHBaseFsckCleanReplicationBarriers.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestFSVisitor.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" target="_top">Frames</a></li>
+<li><a href="TestHBaseFsckCleanReplicationBarriers.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li><a href="#field.summary">Field</a> | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#field.detail">Field</a> | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.util</div>
+<h2 title="Class TestHBaseFsckCleanReplicationBarriers" class="title">Class TestHBaseFsckCleanReplicationBarriers</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.util.TestHBaseFsckCleanReplicationBarriers</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.53">TestHBaseFsckCleanReplicationBarriers</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#COLUMN_FAMILY">COLUMN_FAMILY</a></span></code> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#PEER_1">PEER_1</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#PEER_2">PEER_2</a></span></code> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.replication.ReplicationQueueStorage</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#QUEUE_STORAGE">QUEUE_STORAGE</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#TABLE_NAME">TABLE_NAME</a></span></code> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#UTIL">UTIL</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#WAL_FILE_NAME">WAL_FILE_NAME</a></span></code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#TestHBaseFsckCleanReplicationBarriers--">TestHBaseFsckCleanReplicationBarriers</a></span>()</code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#addStateAndBarrier-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.master.RegionState.State-long...-">addStateAndBarrier</a></span>(org.apache.hadoop.hbase.client.RegionInfo region,
+ org.apache.hadoop.hbase.master.RegionState.State state,
+ long... barriers)</code> </td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#createPeer--">createPeer</a></span>()</code> </td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#setUp--">setUp</a></span>()</code> </td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#tearDown--">tearDown</a></span>()</code> </td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#testCleanReplicationBarrierWithDeletedTable--">testCleanReplicationBarrierWithDeletedTable</a></span>()</code> </td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#testCleanReplicationBarrierWithExistTable--">testCleanReplicationBarrierWithExistTable</a></span>()</code> </td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#testCleanReplicationBarrierWithNonExistTable--">testCleanReplicationBarrierWithNonExistTable</a></span>()</code> </td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#updatePushedSeqId-org.apache.hadoop.hbase.client.RegionInfo-long-">updatePushedSeqId</a></span>(org.apache.hadoop.hbase.client.RegionInfo region,
+ long seqId)</code> </td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="CLASS_RULE">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CLASS_RULE</h4>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.55">CLASS_RULE</a></pre>
+</li>
+</ul>
+<a name="UTIL">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>UTIL</h4>
+<pre>private static final <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.58">UTIL</a></pre>
+</li>
+</ul>
+<a name="PEER_1">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PEER_1</h4>
+<pre>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.60">PEER_1</a></pre>
+</li>
+</ul>
+<a name="PEER_2">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PEER_2</h4>
+<pre>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.60">PEER_2</a></pre>
+</li>
+</ul>
+<a name="QUEUE_STORAGE">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>QUEUE_STORAGE</h4>
+<pre>private static org.apache.hadoop.hbase.replication.ReplicationQueueStorage <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.62">QUEUE_STORAGE</a></pre>
+</li>
+</ul>
+<a name="WAL_FILE_NAME">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>WAL_FILE_NAME</h4>
+<pre>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.64">WAL_FILE_NAME</a></pre>
+</li>
+</ul>
+<a name="TABLE_NAME">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TABLE_NAME</h4>
+<pre>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.66">TABLE_NAME</a></pre>
+</li>
+</ul>
+<a name="COLUMN_FAMILY">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>COLUMN_FAMILY</h4>
+<pre>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.68">COLUMN_FAMILY</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestHBaseFsckCleanReplicationBarriers--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestHBaseFsckCleanReplicationBarriers</h4>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.53">TestHBaseFsckCleanReplicationBarriers</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="setUp--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setUp</h4>
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.71">setUp</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="tearDown--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tearDown</h4>
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.83">tearDown</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testCleanReplicationBarrierWithNonExistTable--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testCleanReplicationBarrierWithNonExistTable</h4>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.88">testCleanReplicationBarrierWithNonExistTable</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</a>,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</a></code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testCleanReplicationBarrierWithDeletedTable--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testCleanReplicationBarrierWithDeletedTable</h4>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.96">testCleanReplicationBarrierWithDeletedTable</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testCleanReplicationBarrierWithExistTable--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testCleanReplicationBarrierWithExistTable</h4>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.144">testCleanReplicationBarrierWithExistTable</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="createPeer--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createPeer</h4>
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.176">createPeer</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="addStateAndBarrier-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.master.RegionState.State-long...-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addStateAndBarrier</h4>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.183">addStateAndBarrier</a>(org.apache.hadoop.hbase.client.RegionInfo region,
+ org.apache.hadoop.hbase.master.RegionState.State state,
+ long... barriers)
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="updatePushedSeqId-org.apache.hadoop.hbase.client.RegionInfo-long-">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>updatePushedSeqId</h4>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.199">updatePushedSeqId</a>(org.apache.hadoop.hbase.client.RegionInfo region,
+ long seqId)
+ throws org.apache.hadoop.hbase.replication.ReplicationException</pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code>org.apache.hadoop.hbase.replication.ReplicationException</code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestHBaseFsckCleanReplicationBarriers.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestFSVisitor.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" target="_top">Frames</a></li>
+<li><a href="TestHBaseFsckCleanReplicationBarriers.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li>Nested | </li>
+<li><a href="#field.summary">Field</a> | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#field.detail">Field</a> | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html
index ee2aa8b..3967b16 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestFSVisitor.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
@@ -438,7 +438,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestFSVisitor.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/util/class-use/TestHBaseFsckCleanReplicationBarriers.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/class-use/TestHBaseFsckCleanReplicationBarriers.html b/testdevapidocs/org/apache/hadoop/hbase/util/class-use/TestHBaseFsckCleanReplicationBarriers.html
new file mode 100644
index 0000000..9f669b8
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/class-use/TestHBaseFsckCleanReplicationBarriers.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.util.TestHBaseFsckCleanReplicationBarriers (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class org.apache.hadoop.hbase.util.TestHBaseFsckCleanReplicationBarriers (Apache HBase 3.0.0-SNAPSHOT Test API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/util/class-use/TestHBaseFsckCleanReplicationBarriers.html" target="_top">Frames</a></li>
+<li><a href="TestHBaseFsckCleanReplicationBarriers.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.util.TestHBaseFsckCleanReplicationBarriers" class="title">Uses of Class<br>org.apache.hadoop.hbase.util.TestHBaseFsckCleanReplicationBarriers</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.util.TestHBaseFsckCleanReplicationBarriers</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/util/class-use/TestHBaseFsckCleanReplicationBarriers.html" target="_top">Frames</a></li>
+<li><a href="TestHBaseFsckCleanReplicationBarriers.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html b/testdevapidocs/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html
index f403144..d54fdd3 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9};
+var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
<li class="blockList">
<hr>
<br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.34">HbckTestingUtil</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.35">HbckTestingUtil</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
</li>
</ul>
@@ -175,13 +175,18 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#assertNoErrors-org.apache.hadoop.hbase.util.HBaseFsck-">assertNoErrors</a></span>(org.apache.hadoop.hbase.util.HBaseFsck fsck)</code> </td>
</tr>
<tr id="i2" class="altColor">
+<td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#cleanReplicationBarrier-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-">cleanReplicationBarrier</a></span>(org.apache.hadoop.conf.Configuration conf,
+ org.apache.hadoop.hbase.TableName table)</code> </td>
+</tr>
+<tr id="i3" class="rowColor">
<td class="colFirst"><code>static org.apache.hadoop.hbase.util.HBaseFsck</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#doFsck-org.apache.hadoop.conf.Configuration-boolean-">doFsck</a></span>(org.apache.hadoop.conf.Configuration conf,
boolean fix)</code> </td>
</tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
<td class="colFirst"><code>static org.apache.hadoop.hbase.util.HBaseFsck</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#doFsck-org.apache.hadoop.conf.Configuration-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-org.apache.hadoop.hbase.TableName-">doFsck</a></span>(org.apache.hadoop.conf.Configuration conf,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#doFsck-org.apache.hadoop.conf.Configuration-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-org.apache.hadoop.hbase.TableName-">doFsck</a></span>(org.apache.hadoop.conf.Configuration conf,
boolean fixAssignments,
boolean fixMeta,
boolean fixHdfsHoles,
@@ -194,22 +199,23 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
boolean fixEmptyMetaRegionInfo,
boolean fixTableLocks,
boolean fixReplication,
+ boolean cleanReplicationBarrier,
org.apache.hadoop.hbase.TableName table)</code> </td>
</tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
<td class="colFirst"><code>static org.apache.hadoop.hbase.util.HBaseFsck</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#doFsck-org.apache.hadoop.conf.Configuration-boolean-org.apache.hadoop.hbase.TableName-">doFsck</a></span>(org.apache.hadoop.conf.Configuration conf,
boolean fix,
org.apache.hadoop.hbase.TableName table)</code> </td>
</tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
<td class="colFirst"><code>static org.apache.hadoop.hbase.util.HBaseFsck</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#doHFileQuarantine-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-">doHFileQuarantine</a></span>(org.apache.hadoop.conf.Configuration conf,
org.apache.hadoop.hbase.TableName table)</code>
<div class="block">Runs hbck with the -sidelineCorruptHFiles option</div>
</td>
</tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
<td class="colFirst"><code>static boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#inconsistencyFound-org.apache.hadoop.hbase.util.HBaseFsck-">inconsistencyFound</a></span>(org.apache.hadoop.hbase.util.HBaseFsck fsck)</code> </td>
</tr>
@@ -241,7 +247,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>exec</h4>
-<pre>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.35">exec</a></pre>
+<pre>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.36">exec</a></pre>
</li>
</ul>
</li>
@@ -258,7 +264,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>HbckTestingUtil</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.34">HbckTestingUtil</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.35">HbckTestingUtil</a>()</pre>
</li>
</ul>
</li>
@@ -275,7 +281,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>doFsck</h4>
-<pre>public static org.apache.hadoop.hbase.util.HBaseFsck <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.36">doFsck</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public static org.apache.hadoop.hbase.util.HBaseFsck <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.37">doFsck</a>(org.apache.hadoop.conf.Configuration conf,
boolean fix)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
@@ -290,7 +296,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>doFsck</h4>
-<pre>public static org.apache.hadoop.hbase.util.HBaseFsck <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.41">doFsck</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public static org.apache.hadoop.hbase.util.HBaseFsck <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.42">doFsck</a>(org.apache.hadoop.conf.Configuration conf,
boolean fix,
org.apache.hadoop.hbase.TableName table)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -300,13 +306,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</dl>
</li>
</ul>
-<a name="doFsck-org.apache.hadoop.conf.Configuration-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-org.apache.hadoop.hbase.TableName-">
+<a name="doFsck-org.apache.hadoop.conf.Configuration-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-org.apache.hadoop.hbase.TableName-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>doFsck</h4>
-<pre>public static org.apache.hadoop.hbase.util.HBaseFsck <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.46">doFsck</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public static org.apache.hadoop.hbase.util.HBaseFsck <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.47">doFsck</a>(org.apache.hadoop.conf.Configuration conf,
boolean fixAssignments,
boolean fixMeta,
boolean fixHdfsHoles,
@@ -319,6 +325,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
boolean fixEmptyMetaRegionInfo,
boolean fixTableLocks,
boolean fixReplication,
+ boolean cleanReplicationBarrier,
org.apache.hadoop.hbase.TableName table)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
@@ -333,7 +340,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>doHFileQuarantine</h4>
-<pre>public static org.apache.hadoop.hbase.util.HBaseFsck <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.84">doHFileQuarantine</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public static org.apache.hadoop.hbase.util.HBaseFsck <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.86">doHFileQuarantine</a>(org.apache.hadoop.conf.Configuration conf,
org.apache.hadoop.hbase.TableName table)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Runs hbck with the -sidelineCorruptHFiles option</div>
@@ -347,13 +354,30 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</dl>
</li>
</ul>
+<a name="cleanReplicationBarrier-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>cleanReplicationBarrier</h4>
+<pre>public static boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.93">cleanReplicationBarrier</a>(org.apache.hadoop.conf.Configuration conf,
+ org.apache.hadoop.hbase.TableName table)
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</a></code></dd>
+</dl>
+</li>
+</ul>
<a name="inconsistencyFound-org.apache.hadoop.hbase.util.HBaseFsck-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>inconsistencyFound</h4>
-<pre>public static boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.91">inconsistencyFound</a>(org.apache.hadoop.hbase.util.HBaseFsck fsck)
+<pre>public static boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.103">inconsistencyFound</a>(org.apache.hadoop.hbase.util.HBaseFsck fsck)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -367,7 +391,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>assertNoErrors</h4>
-<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.96">assertNoErrors</a>(org.apache.hadoop.hbase.util.HBaseFsck fsck)
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.108">assertNoErrors</a>(org.apache.hadoop.hbase.util.HBaseFsck fsck)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -381,7 +405,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>assertErrors</h4>
-<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.101">assertErrors</a>(org.apache.hadoop.hbase.util.HBaseFsck fsck,
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.113">assertErrors</a>(org.apache.hadoop.hbase.util.HBaseFsck fsck,
org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE[] expectedErrors)</pre>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/util/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/util/package-frame.html
index 9d376c7..bd3a667 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/package-frame.html
@@ -90,6 +90,7 @@
<li><a href="TestFSTableDescriptors.FSTableDescriptorsTest.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestFSTableDescriptors.FSTableDescriptorsTest</a></li>
<li><a href="TestFSUtils.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestFSUtils</a></li>
<li><a href="TestFSVisitor.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestFSVisitor</a></li>
+<li><a href="TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestHBaseFsckCleanReplicationBarriers</a></li>
<li><a href="TestHBaseFsckComparator.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestHBaseFsckComparator</a></li>
<li><a href="TestHBaseFsckEncryption.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestHBaseFsckEncryption</a></li>
<li><a href="TestHBaseFsckMOB.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestHBaseFsckMOB</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/util/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/util/package-summary.html
index 32134c7..7bf25e8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/package-summary.html
@@ -476,173 +476,177 @@
</td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckCleanReplicationBarriers</a></td>
+<td class="colLast"> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckComparator</a></td>
<td class="colLast">
<div class="block">Test the comparator used by Hbck.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckEncryption</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckMOB.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckMOB</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckReplication</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHFileArchiveUtil.html" title="class in org.apache.hadoop.hbase.util">TestHFileArchiveUtil</a></td>
<td class="colLast">
<div class="block">Test that the utility works as expected</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestIdLock.html" title="class in org.apache.hadoop.hbase.util">TestIdLock</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestIdReadWriteLock.html" title="class in org.apache.hadoop.hbase.util">TestIdReadWriteLock</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestIncrementingEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">TestIncrementingEnvironmentEdge</a></td>
<td class="colLast">
<div class="block">Tests that the incrementing environment edge increments time instead of using
the default.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestJRubyFormat.html" title="class in org.apache.hadoop.hbase.util">TestJRubyFormat</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestJSONMetricUtil.html" title="class in org.apache.hadoop.hbase.util">TestJSONMetricUtil</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestKeyLocker.html" title="class in org.apache.hadoop.hbase.util">TestKeyLocker</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestLoadTestKVGenerator.html" title="class in org.apache.hadoop.hbase.util">TestLoadTestKVGenerator</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestMiniClusterLoadEncoded.html" title="class in org.apache.hadoop.hbase.util">TestMiniClusterLoadEncoded</a></td>
<td class="colLast">
<div class="block">Runs a load test on a mini HBase cluster with data block encoding turned on.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestMiniClusterLoadParallel.html" title="class in org.apache.hadoop.hbase.util">TestMiniClusterLoadParallel</a></td>
<td class="colLast">
<div class="block">A write/read/verify load test on a mini HBase cluster.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestMiniClusterLoadSequential.html" title="class in org.apache.hadoop.hbase.util">TestMiniClusterLoadSequential</a></td>
<td class="colLast">
<div class="block">A write/read/verify load test on a mini HBase cluster.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestOrder.html" title="class in org.apache.hadoop.hbase.util">TestOrder</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html" title="class in org.apache.hadoop.hbase.util">TestOrderedBytes</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionMover.html" title="class in org.apache.hadoop.hbase.util">TestRegionMover</a></td>
<td class="colLast">
<div class="block">Tests for Region Mover Load/Unload functionality with and without ack mode and also to test
exclude functionality useful for rack decommissioning</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util">TestRegionSplitCalculator</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionSplitCalculator.SimpleRange.html" title="class in org.apache.hadoop.hbase.util">TestRegionSplitCalculator.SimpleRange</a></td>
<td class="colLast">
<div class="block">This is range uses a user specified start and end keys.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionSplitter.html" title="class in org.apache.hadoop.hbase.util">TestRegionSplitter</a></td>
<td class="colLast">
<div class="block">Tests for <code>RegionSplitter</code>, which can create a pre-split table or do a
rolling split of an existing table.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRetryCounter.html" title="class in org.apache.hadoop.hbase.util">TestRetryCounter</a></td>
<td class="colLast">
<div class="block">Basic test for some old functionality we don't seem to have used but that looks nice.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestReusablePoolMap.html" title="class in org.apache.hadoop.hbase.util">TestReusablePoolMap</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRootPath.html" title="class in org.apache.hadoop.hbase.util">TestRootPath</a></td>
<td class="colLast">
<div class="block">Test requirement that root directory must be a URI</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRoundRobinPoolMap.html" title="class in org.apache.hadoop.hbase.util">TestRoundRobinPoolMap</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestShowProperties.html" title="class in org.apache.hadoop.hbase.util">TestShowProperties</a></td>
<td class="colLast">
<div class="block">This test is there to dump the properties.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestSimpleMutableByteRange.html" title="class in org.apache.hadoop.hbase.util">TestSimpleMutableByteRange</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestSimplePositionedMutableByteRange.html" title="class in org.apache.hadoop.hbase.util">TestSimplePositionedMutableByteRange</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestSortedList.html" title="class in org.apache.hadoop.hbase.util">TestSortedList</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestSortedList.StringComparator.html" title="class in org.apache.hadoop.hbase.util">TestSortedList.StringComparator</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestStealJobQueue.html" title="class in org.apache.hadoop.hbase.util">TestStealJobQueue</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestThreadLocalPoolMap.html" title="class in org.apache.hadoop.hbase.util">TestThreadLocalPoolMap</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestThreads.html" title="class in org.apache.hadoop.hbase.util">TestThreads</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestVersionInfo.html" title="class in org.apache.hadoop.hbase.util">TestVersionInfo</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestWeakObjectPool.html" title="class in org.apache.hadoop.hbase.util">TestWeakObjectPool</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TimeOffsetEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">TimeOffsetEnvironmentEdge</a></td>
<td class="colLast"> </td>
</tr>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 2933588..6ed61c6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -248,6 +248,7 @@
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/TestFSTableDescriptors.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestFSTableDescriptors</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/TestFSUtils.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestFSUtils</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/TestFSVisitor.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestFSVisitor</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestHBaseFsckCleanReplicationBarriers</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestHBaseFsckComparator</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestHBaseFsckEncryption</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestHBaseFsckReplication</span></a></li>
[30/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call() throws IOException {<a name="line.396"></a>
+<span c
<TRUNCATED>
[40/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
deleted file mode 100644
index d5f3932..0000000
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
+++ /dev/null
@@ -1,578 +0,0 @@
-<!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.replication.regionserver;<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.net.ConnectException;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.net.SocketTimeoutException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.net.UnknownHostException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Collections;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.Callable;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.CompletionService;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.ExecutionException;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.ExecutorCompletionService;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Future;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.LinkedBlockingQueue;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ThreadPoolExecutor;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.regex.Matcher;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.regex.Pattern;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.commons.lang3.StringUtils;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.fs.Path;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.Abortable;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.HConstants;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.TableName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.protobuf.ReplicationProtbufUtil;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.regionserver.ReplicationSinkManager.SinkPeer;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.slf4j.Logger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.slf4j.LoggerFactory;<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>/**<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * A {@link org.apache.hadoop.hbase.replication.ReplicationEndpoint}<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * implementation for replicating to another HBase cluster.<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * For the slave cluster it selects a random number of peers<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * using a replication ratio. For example, if replication ration = 0.1<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * and slave cluster has 100 region servers, 10 will be selected.<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * <p><a name="line.73"></a>
-<span class="sourceLineNo">074</span> * A stream is considered down when we cannot contact a region server on the<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * peer cluster for more than 55 seconds by default.<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * </p><a name="line.76"></a>
-<span class="sourceLineNo">077</span> */<a name="line.77"></a>
-<span class="sourceLineNo">078</span>@InterfaceAudience.Private<a name="line.78"></a>
-<span class="sourceLineNo">079</span>public class HBaseInterClusterReplicationEndpoint extends HBaseReplicationEndpoint {<a name="line.79"></a>
-<span class="sourceLineNo">080</span> private static final Logger LOG =<a name="line.80"></a>
-<span class="sourceLineNo">081</span> LoggerFactory.getLogger(HBaseInterClusterReplicationEndpoint.class);<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span> private static final long DEFAULT_MAX_TERMINATION_WAIT_MULTIPLIER = 2;<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span> private ClusterConnection conn;<a name="line.85"></a>
-<span class="sourceLineNo">086</span> private Configuration localConf;<a name="line.86"></a>
-<span class="sourceLineNo">087</span> private Configuration conf;<a name="line.87"></a>
-<span class="sourceLineNo">088</span> // How long should we sleep for each retry<a name="line.88"></a>
-<span class="sourceLineNo">089</span> private long sleepForRetries;<a name="line.89"></a>
-<span class="sourceLineNo">090</span> // Maximum number of retries before taking bold actions<a name="line.90"></a>
-<span class="sourceLineNo">091</span> private int maxRetriesMultiplier;<a name="line.91"></a>
-<span class="sourceLineNo">092</span> // Socket timeouts require even bolder actions since we don't want to DDOS<a name="line.92"></a>
-<span class="sourceLineNo">093</span> private int socketTimeoutMultiplier;<a name="line.93"></a>
-<span class="sourceLineNo">094</span> // Amount of time for shutdown to wait for all tasks to complete<a name="line.94"></a>
-<span class="sourceLineNo">095</span> private long maxTerminationWait;<a name="line.95"></a>
-<span class="sourceLineNo">096</span> // Size limit for replication RPCs, in bytes<a name="line.96"></a>
-<span class="sourceLineNo">097</span> private int replicationRpcLimit;<a name="line.97"></a>
-<span class="sourceLineNo">098</span> //Metrics for this source<a name="line.98"></a>
-<span class="sourceLineNo">099</span> private MetricsSource metrics;<a name="line.99"></a>
-<span class="sourceLineNo">100</span> // Handles connecting to peer region servers<a name="line.100"></a>
-<span class="sourceLineNo">101</span> private ReplicationSinkManager replicationSinkMgr;<a name="line.101"></a>
-<span class="sourceLineNo">102</span> private boolean peersSelected = false;<a name="line.102"></a>
-<span class="sourceLineNo">103</span> private String replicationClusterId = "";<a name="line.103"></a>
-<span class="sourceLineNo">104</span> private ThreadPoolExecutor exec;<a name="line.104"></a>
-<span class="sourceLineNo">105</span> private int maxThreads;<a name="line.105"></a>
-<span class="sourceLineNo">106</span> private Path baseNamespaceDir;<a name="line.106"></a>
-<span class="sourceLineNo">107</span> private Path hfileArchiveDir;<a name="line.107"></a>
-<span class="sourceLineNo">108</span> private boolean replicationBulkLoadDataEnabled;<a name="line.108"></a>
-<span class="sourceLineNo">109</span> private Abortable abortable;<a name="line.109"></a>
-<span class="sourceLineNo">110</span> private boolean dropOnDeletedTables;<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span> @Override<a name="line.112"></a>
-<span class="sourceLineNo">113</span> public void init(Context context) throws IOException {<a name="line.113"></a>
-<span class="sourceLineNo">114</span> super.init(context);<a name="line.114"></a>
-<span class="sourceLineNo">115</span> this.conf = HBaseConfiguration.create(ctx.getConfiguration());<a name="line.115"></a>
-<span class="sourceLineNo">116</span> this.localConf = HBaseConfiguration.create(ctx.getLocalConfiguration());<a name="line.116"></a>
-<span class="sourceLineNo">117</span> decorateConf();<a name="line.117"></a>
-<span class="sourceLineNo">118</span> this.maxRetriesMultiplier = this.conf.getInt("replication.source.maxretriesmultiplier", 300);<a name="line.118"></a>
-<span class="sourceLineNo">119</span> this.socketTimeoutMultiplier = this.conf.getInt("replication.source.socketTimeoutMultiplier",<a name="line.119"></a>
-<span class="sourceLineNo">120</span> maxRetriesMultiplier);<a name="line.120"></a>
-<span class="sourceLineNo">121</span> // A Replicator job is bound by the RPC timeout. We will wait this long for all Replicator<a name="line.121"></a>
-<span class="sourceLineNo">122</span> // tasks to terminate when doStop() is called.<a name="line.122"></a>
-<span class="sourceLineNo">123</span> long maxTerminationWaitMultiplier = this.conf.getLong(<a name="line.123"></a>
-<span class="sourceLineNo">124</span> "replication.source.maxterminationmultiplier",<a name="line.124"></a>
-<span class="sourceLineNo">125</span> DEFAULT_MAX_TERMINATION_WAIT_MULTIPLIER);<a name="line.125"></a>
-<span class="sourceLineNo">126</span> this.maxTerminationWait = maxTerminationWaitMultiplier *<a name="line.126"></a>
-<span class="sourceLineNo">127</span> this.conf.getLong(HConstants.HBASE_RPC_TIMEOUT_KEY, HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.127"></a>
-<span class="sourceLineNo">128</span> // TODO: This connection is replication specific or we should make it particular to<a name="line.128"></a>
-<span class="sourceLineNo">129</span> // replication and make replication specific settings such as compression or codec to use<a name="line.129"></a>
-<span class="sourceLineNo">130</span> // passing Cells.<a name="line.130"></a>
-<span class="sourceLineNo">131</span> this.conn = (ClusterConnection) ConnectionFactory.createConnection(this.conf);<a name="line.131"></a>
-<span class="sourceLineNo">132</span> this.sleepForRetries =<a name="line.132"></a>
-<span class="sourceLineNo">133</span> this.conf.getLong("replication.source.sleepforretries", 1000);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> this.metrics = context.getMetrics();<a name="line.134"></a>
-<span class="sourceLineNo">135</span> // ReplicationQueueInfo parses the peerId out of the znode for us<a name="line.135"></a>
-<span class="sourceLineNo">136</span> this.replicationSinkMgr = new ReplicationSinkManager(conn, ctx.getPeerId(), this, this.conf);<a name="line.136"></a>
-<span class="sourceLineNo">137</span> // per sink thread pool<a name="line.137"></a>
-<span class="sourceLineNo">138</span> this.maxThreads = this.conf.getInt(HConstants.REPLICATION_SOURCE_MAXTHREADS_KEY,<a name="line.138"></a>
-<span class="sourceLineNo">139</span> HConstants.REPLICATION_SOURCE_MAXTHREADS_DEFAULT);<a name="line.139"></a>
-<span class="sourceLineNo">140</span> this.exec = new ThreadPoolExecutor(maxThreads, maxThreads, 60, TimeUnit.SECONDS,<a name="line.140"></a>
-<span class="sourceLineNo">141</span> new LinkedBlockingQueue<>());<a name="line.141"></a>
-<span class="sourceLineNo">142</span> this.exec.allowCoreThreadTimeOut(true);<a name="line.142"></a>
-<span class="sourceLineNo">143</span> this.abortable = ctx.getAbortable();<a name="line.143"></a>
-<span class="sourceLineNo">144</span> // Set the size limit for replication RPCs to 95% of the max request size.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> // We could do with less slop if we have an accurate estimate of encoded size. Being<a name="line.145"></a>
-<span class="sourceLineNo">146</span> // conservative for now.<a name="line.146"></a>
-<span class="sourceLineNo">147</span> this.replicationRpcLimit = (int)(0.95 * conf.getLong(RpcServer.MAX_REQUEST_SIZE,<a name="line.147"></a>
-<span class="sourceLineNo">148</span> RpcServer.DEFAULT_MAX_REQUEST_SIZE));<a name="line.148"></a>
-<span class="sourceLineNo">149</span> this.dropOnDeletedTables =<a name="line.149"></a>
-<span class="sourceLineNo">150</span> this.conf.getBoolean(HConstants.REPLICATION_DROP_ON_DELETED_TABLE_KEY, false);<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span> this.replicationBulkLoadDataEnabled =<a name="line.152"></a>
-<span class="sourceLineNo">153</span> conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,<a name="line.153"></a>
-<span class="sourceLineNo">154</span> HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.154"></a>
-<span class="sourceLineNo">155</span> if (this.replicationBulkLoadDataEnabled) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> replicationClusterId = this.conf.get(HConstants.REPLICATION_CLUSTER_ID);<a name="line.156"></a>
-<span class="sourceLineNo">157</span> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> // Construct base namespace directory and hfile archive directory path<a name="line.158"></a>
-<span class="sourceLineNo">159</span> Path rootDir = FSUtils.getRootDir(conf);<a name="line.159"></a>
-<span class="sourceLineNo">160</span> Path baseNSDir = new Path(HConstants.BASE_NAMESPACE_DIR);<a name="line.160"></a>
-<span class="sourceLineNo">161</span> baseNamespaceDir = new Path(rootDir, baseNSDir);<a name="line.161"></a>
-<span class="sourceLineNo">162</span> hfileArchiveDir = new Path(rootDir, new Path(HConstants.HFILE_ARCHIVE_DIRECTORY, baseNSDir));<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> private void decorateConf() {<a name="line.165"></a>
-<span class="sourceLineNo">166</span> String replicationCodec = this.conf.get(HConstants.REPLICATION_CODEC_CONF_KEY);<a name="line.166"></a>
-<span class="sourceLineNo">167</span> if (StringUtils.isNotEmpty(replicationCodec)) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span> this.conf.set(HConstants.RPC_CODEC_CONF_KEY, replicationCodec);<a name="line.168"></a>
-<span class="sourceLineNo">169</span> }<a name="line.169"></a>
-<span class="sourceLineNo">170</span> }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span> private void connectToPeers() {<a name="line.172"></a>
-<span class="sourceLineNo">173</span> getRegionServers();<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span> int sleepMultiplier = 1;<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span> // Connect to peer cluster first, unless we have to stop<a name="line.177"></a>
-<span class="sourceLineNo">178</span> while (this.isRunning() && replicationSinkMgr.getNumSinks() == 0) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> replicationSinkMgr.chooseSinks();<a name="line.179"></a>
-<span class="sourceLineNo">180</span> if (this.isRunning() && replicationSinkMgr.getNumSinks() == 0) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span> if (sleepForRetries("Waiting for peers", sleepMultiplier)) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span> sleepMultiplier++;<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span> }<a name="line.184"></a>
-<span class="sourceLineNo">185</span> }<a name="line.185"></a>
-<span class="sourceLineNo">186</span> }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span> /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * Do the sleeping logic<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * @param msg Why we sleep<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * @return True if <code>sleepMultiplier</code> is &lt; <code>maxRetriesMultiplier</code><a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span> protected boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span> try {<a name="line.195"></a>
-<span class="sourceLineNo">196</span> if (LOG.isTraceEnabled()) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span> LOG.trace(msg + ", sleeping " + sleepForRetries + " times " + sleepMultiplier);<a name="line.197"></a>
-<span class="sourceLineNo">198</span> }<a name="line.198"></a>
-<span class="sourceLineNo">199</span> Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.199"></a>
-<span class="sourceLineNo">200</span> } catch (InterruptedException e) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> LOG.debug("Interrupted while sleeping between retries");<a name="line.201"></a>
-<span class="sourceLineNo">202</span> }<a name="line.202"></a>
-<span class="sourceLineNo">203</span> return sleepMultiplier < maxRetriesMultiplier;<a name="line.203"></a>
-<span class="sourceLineNo">204</span> }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span> private List<List<Entry>> createBatches(final List<Entry> entries) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span> int numSinks = Math.max(replicationSinkMgr.getNumSinks(), 1);<a name="line.207"></a>
-<span class="sourceLineNo">208</span> int n = Math.min(Math.min(this.maxThreads, entries.size()/100+1), numSinks);<a name="line.208"></a>
-<span class="sourceLineNo">209</span> // Maintains the current batch for a given partition index<a name="line.209"></a>
-<span class="sourceLineNo">210</span> Map<Integer, List<Entry>> entryMap = new HashMap<>(n);<a name="line.210"></a>
-<span class="sourceLineNo">211</span> List<List<Entry>> entryLists = new ArrayList<>();<a name="line.211"></a>
-<span class="sourceLineNo">212</span> int[] sizes = new int[n];<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span> for (int i = 0; i < n; i++) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span> entryMap.put(i, new ArrayList<Entry>(entries.size()/n+1));<a name="line.215"></a>
-<span class="sourceLineNo">216</span> }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span> for (Entry e: entries) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span> int index = Math.abs(Bytes.hashCode(e.getKey().getEncodedRegionName())%n);<a name="line.219"></a>
-<span class="sourceLineNo">220</span> int entrySize = (int)e.getKey().estimatedSerializedSizeOf() +<a name="line.220"></a>
-<span class="sourceLineNo">221</span> (int)e.getEdit().estimatedSerializedSizeOf();<a name="line.221"></a>
-<span class="sourceLineNo">222</span> // If this batch is oversized, add it to final list and initialize a new empty batch<a name="line.222"></a>
-<span class="sourceLineNo">223</span> if (sizes[index] > 0 /* must include at least one entry */ &&<a name="line.223"></a>
-<span class="sourceLineNo">224</span> sizes[index] + entrySize > replicationRpcLimit) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span> entryLists.add(entryMap.get(index));<a name="line.225"></a>
-<span class="sourceLineNo">226</span> entryMap.put(index, new ArrayList<Entry>());<a name="line.226"></a>
-<span class="sourceLineNo">227</span> sizes[index] = 0;<a name="line.227"></a>
-<span class="sourceLineNo">228</span> }<a name="line.228"></a>
-<span class="sourceLineNo">229</span> entryMap.get(index).add(e);<a name="line.229"></a>
-<span class="sourceLineNo">230</span> sizes[index] += entrySize;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> }<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span> entryLists.addAll(entryMap.values());<a name="line.233"></a>
-<span class="sourceLineNo">234</span> return entryLists;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> }<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span> private TableName parseTable(String msg) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span> // ... TableNotFoundException: '<table>'/n...<a name="line.238"></a>
-<span class="sourceLineNo">239</span> Pattern p = Pattern.compile("TableNotFoundException: \\'([\\S]*)\\'");<a name="line.239"></a>
-<span class="sourceLineNo">240</span> Matcher m = p.matcher(msg);<a name="line.240"></a>
-<span class="sourceLineNo">241</span> if (m.find()) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span> String table = m.group(1);<a name="line.242"></a>
-<span class="sourceLineNo">243</span> try {<a name="line.243"></a>
-<span class="sourceLineNo">244</span> // double check that table is a valid table name<a name="line.244"></a>
-<span class="sourceLineNo">245</span> TableName.valueOf(TableName.isLegalFullyQualifiedTableName(Bytes.toBytes(table)));<a name="line.245"></a>
-<span class="sourceLineNo">246</span> return TableName.valueOf(table);<a name="line.246"></a>
-<span class="sourceLineNo">247</span> } catch (IllegalArgumentException ignore) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span> }<a name="line.248"></a>
-<span class="sourceLineNo">249</span> }<a name="line.249"></a>
-<span class="sourceLineNo">250</span> return null;<a name="line.250"></a>
-<span class="sourceLineNo">251</span> }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span> // Filter a set of batches by TableName<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private List<List<Entry>> filterBatches(final List<List<Entry>> oldEntryList, TableName table) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span> List<List<Entry>> entryLists = new ArrayList<>();<a name="line.255"></a>
-<span class="sourceLineNo">256</span> for (List<Entry> entries : oldEntryList) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span> ArrayList<Entry> thisList = new ArrayList<Entry>(entries.size());<a name="line.257"></a>
-<span class="sourceLineNo">258</span> entryLists.add(thisList);<a name="line.258"></a>
-<span class="sourceLineNo">259</span> for (Entry e : entries) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> if (!e.getKey().getTableName().equals(table)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span> thisList.add(e);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> }<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span> }<a name="line.264"></a>
-<span class="sourceLineNo">265</span> return entryLists;<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> private void reconnectToPeerCluster() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> ClusterConnection connection = null;<a name="line.269"></a>
-<span class="sourceLineNo">270</span> try {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> connection = (ClusterConnection) ConnectionFactory.createConnection(this.conf);<a name="line.271"></a>
-<span class="sourceLineNo">272</span> } catch (IOException ioe) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span> LOG.warn("Failed to create connection for peer cluster", ioe);<a name="line.273"></a>
-<span class="sourceLineNo">274</span> }<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (connection != null) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> this.conn = connection;<a name="line.276"></a>
-<span class="sourceLineNo">277</span> }<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> /**<a name="line.280"></a>
-<span class="sourceLineNo">281</span> * Do the shipping logic<a name="line.281"></a>
-<span class="sourceLineNo">282</span> */<a name="line.282"></a>
-<span class="sourceLineNo">283</span> @Override<a name="line.283"></a>
-<span class="sourceLineNo">284</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span> CompletionService<Integer> pool = new ExecutorCompletionService<>(this.exec);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> List<List<Entry>> batches;<a name="line.286"></a>
-<span class="sourceLineNo">287</span> String walGroupId = replicateContext.getWalGroupId();<a name="line.287"></a>
-<span class="sourceLineNo">288</span> int sleepMultiplier = 1;<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span> if (!peersSelected && this.isRunning()) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span> connectToPeers();<a name="line.291"></a>
-<span class="sourceLineNo">292</span> peersSelected = true;<a name="line.292"></a>
-<span class="sourceLineNo">293</span> }<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span> int numSinks = replicationSinkMgr.getNumSinks();<a name="line.295"></a>
-<span class="sourceLineNo">296</span> if (numSinks == 0) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span> LOG.warn("No replication sinks found, returning without replicating. The source should retry"<a name="line.297"></a>
-<span class="sourceLineNo">298</span> + " with the same set of edits.");<a name="line.298"></a>
-<span class="sourceLineNo">299</span> return false;<a name="line.299"></a>
-<span class="sourceLineNo">300</span> }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span> batches = createBatches(replicateContext.getEntries());<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span> while (this.isRunning() && !exec.isShutdown()) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span> if (!isPeerEnabled()) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span> if (sleepForRetries("Replication is disabled", sleepMultiplier)) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> sleepMultiplier++;<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span> continue;<a name="line.309"></a>
-<span class="sourceLineNo">310</span> }<a name="line.310"></a>
-<span class="sourceLineNo">311</span> if (this.conn == null || this.conn.isClosed()) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span> reconnectToPeerCluster();<a name="line.312"></a>
-<span class="sourceLineNo">313</span> }<a name="line.313"></a>
-<span class="sourceLineNo">314</span> try {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> int futures = 0;<a name="line.315"></a>
-<span class="sourceLineNo">316</span> for (int i=0; i<batches.size(); i++) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span> List<Entry> entries = batches.get(i);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> if (!entries.isEmpty()) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span> if (LOG.isTraceEnabled()) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> LOG.trace("Submitting " + entries.size() +<a name="line.320"></a>
-<span class="sourceLineNo">321</span> " entries of total size " + replicateContext.getSize());<a name="line.321"></a>
-<span class="sourceLineNo">322</span> }<a name="line.322"></a>
-<span class="sourceLineNo">323</span> // RuntimeExceptions encountered here bubble up and are handled in ReplicationSource<a name="line.323"></a>
-<span class="sourceLineNo">324</span> pool.submit(createReplicator(entries, i));<a name="line.324"></a>
-<span class="sourceLineNo">325</span> futures++;<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> IOException iox = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span> long lastWriteTime = 0;<a name="line.330"></a>
-<span class="sourceLineNo">331</span> for (int i=0; i<futures; i++) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span> try {<a name="line.332"></a>
-<span class="sourceLineNo">333</span> // wait for all futures, remove successful parts<a name="line.333"></a>
-<span class="sourceLineNo">334</span> // (only the remaining parts will be retried)<a name="line.334"></a>
-<span class="sourceLineNo">335</span> Future<Integer> f = pool.take();<a name="line.335"></a>
-<span class="sourceLineNo">336</span> int index = f.get().intValue();<a name="line.336"></a>
-<span class="sourceLineNo">337</span> List<Entry> batch = batches.get(index);<a name="line.337"></a>
-<span class="sourceLineNo">338</span> batches.set(index, Collections.<Entry>emptyList()); // remove successful batch<a name="line.338"></a>
-<span class="sourceLineNo">339</span> // Find the most recent write time in the batch<a name="line.339"></a>
-<span class="sourceLineNo">340</span> long writeTime = batch.get(batch.size() - 1).getKey().getWriteTime();<a name="line.340"></a>
-<span class="sourceLineNo">341</span> if (writeTime > lastWriteTime) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span> lastWriteTime = writeTime;<a name="line.342"></a>
-<span class="sourceLineNo">343</span> }<a name="line.343"></a>
-<span class="sourceLineNo">344</span> } catch (InterruptedException ie) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span> iox = new IOException(ie);<a name="line.345"></a>
-<span class="sourceLineNo">346</span> } catch (ExecutionException ee) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> // cause must be an IOException<a name="line.347"></a>
-<span class="sourceLineNo">348</span> iox = (IOException)ee.getCause();<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span> if (iox != null) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span> // if we had any exceptions, try again<a name="line.352"></a>
-<span class="sourceLineNo">353</span> throw iox;<a name="line.353"></a>
-<span class="sourceLineNo">354</span> }<a name="line.354"></a>
-<span class="sourceLineNo">355</span> // update metrics<a name="line.355"></a>
-<span class="sourceLineNo">356</span> if (lastWriteTime > 0) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> this.metrics.setAgeOfLastShippedOp(lastWriteTime, walGroupId);<a name="line.357"></a>
-<span class="sourceLineNo">358</span> }<a name="line.358"></a>
-<span class="sourceLineNo">359</span> return true;<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> } catch (IOException ioe) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> // Didn't ship anything, but must still age the last time we did<a name="line.362"></a>
-<span class="sourceLineNo">363</span> this.metrics.refreshAgeOfLastShippedOp(walGroupId);<a name="line.363"></a>
-<span class="sourceLineNo">364</span> if (ioe instanceof RemoteException) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span> ioe = ((RemoteException) ioe).unwrapRemoteException();<a name="line.365"></a>
-<span class="sourceLineNo">366</span> LOG.warn("Can't replicate because of an error on the remote cluster: ", ioe);<a name="line.366"></a>
-<span class="sourceLineNo">367</span> if (ioe instanceof TableNotFoundException) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span> if (dropOnDeletedTables) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span> // this is a bit fragile, but cannot change how TNFE is serialized<a name="line.369"></a>
-<span class="sourceLineNo">370</span> // at least check whether the table name is legal<a name="line.370"></a>
-<span class="sourceLineNo">371</span> TableName table = parseTable(ioe.getMessage());<a name="line.371"></a>
-<span class="sourceLineNo">372</span> if (table != null) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span> try (Connection localConn =<a name="line.373"></a>
-<span class="sourceLineNo">374</span> ConnectionFactory.createConnection(ctx.getLocalConfiguration())) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span> if (!localConn.getAdmin().tableExists(table)) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> // Would potentially be better to retry in one of the outer loops<a name="line.376"></a>
-<span class="sourceLineNo">377</span> // and add a table filter there; but that would break the encapsulation,<a name="line.377"></a>
-<span class="sourceLineNo">378</span> // so we're doing the filtering here.<a name="line.378"></a>
-<span class="sourceLineNo">379</span> LOG.info("Missing table detected at sink, local table also does not exist, filtering edits for '"+table+"'");<a name="line.379"></a>
-<span class="sourceLineNo">380</span> batches = filterBatches(batches, table);<a name="line.380"></a>
-<span class="sourceLineNo">381</span> continue;<a name="line.381"></a>
-<span class="sourceLineNo">382</span> }<a name="line.382"></a>
-<span class="sourceLineNo">383</span> } catch (IOException iox) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span> LOG.warn("Exception checking for local table: ", iox);<a name="line.384"></a>
-<span class="sourceLineNo">385</span> }<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> // fall through and sleep below<a name="line.388"></a>
-<span class="sourceLineNo">389</span> } else {<a name="line.389"></a>
-<span class="sourceLineNo">390</span> LOG.warn("Peer encountered RemoteException, rechecking all sinks: ", ioe);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> replicationSinkMgr.chooseSinks();<a name="line.391"></a>
-<span class="sourceLineNo">392</span> }<a name="line.392"></a>
-<span class="sourceLineNo">393</span> } else {<a name="line.393"></a>
-<span class="sourceLineNo">394</span> if (ioe instanceof SocketTimeoutException) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span> // This exception means we waited for more than 60s and nothing<a name="line.395"></a>
-<span class="sourceLineNo">396</span> // happened, the cluster is alive and calling it right away<a name="line.396"></a>
-<span class="sourceLineNo">397</span> // even for a test just makes things worse.<a name="line.397"></a>
-<span class="sourceLineNo">398</span> sleepForRetries("Encountered a SocketTimeoutException. Since the " +<a name="line.398"></a>
-<span class="sourceLineNo">399</span> "call to the remote cluster timed out, which is usually " +<a name="line.399"></a>
-<span class="sourceLineNo">400</span> "caused by a machine failure or a massive slowdown",<a name="line.400"></a>
-<span class="sourceLineNo">401</span> this.socketTimeoutMultiplier);<a name="line.401"></a>
-<span class="sourceLineNo">402</span> } else if (ioe instanceof ConnectException || ioe instanceof UnknownHostException) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span> LOG.warn("Peer is unavailable, rechecking all sinks: ", ioe);<a name="line.403"></a>
-<span class="sourceLineNo">404</span> replicationSinkMgr.chooseSinks();<a name="line.404"></a>
-<span class="sourceLineNo">405</span> } else {<a name="line.405"></a>
-<span class="sourceLineNo">406</span> LOG.warn("Can't replicate because of a local or network error: ", ioe);<a name="line.406"></a>
-<span class="sourceLineNo">407</span> }<a name="line.407"></a>
-<span class="sourceLineNo">408</span> }<a name="line.408"></a>
-<span class="sourceLineNo">409</span> if (sleepForRetries("Since we are unable to replicate", sleepMultiplier)) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span> sleepMultiplier++;<a name="line.410"></a>
-<span class="sourceLineNo">411</span> }<a name="line.411"></a>
-<span class="sourceLineNo">412</span> }<a name="line.412"></a>
-<span class="sourceLineNo">413</span> }<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return false; // in case we exited before replicating<a name="line.414"></a>
-<span class="sourceLineNo">415</span> }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span> protected boolean isPeerEnabled() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span> return ctx.getReplicationPeer().isPeerEnabled();<a name="line.418"></a>
-<span class="sourceLineNo">419</span> }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span> @Override<a name="line.421"></a>
-<span class="sourceLineNo">422</span> protected void doStop() {<a name="line.422"></a>
-<span class="sourceLineNo">423</span> disconnect(); //don't call super.doStop()<a name="line.423"></a>
-<span class="sourceLineNo">424</span> if (this.conn != null) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> try {<a name="line.425"></a>
-<span class="sourceLineNo">426</span> this.conn.close();<a name="line.426"></a>
-<span class="sourceLineNo">427</span> this.conn = null;<a name="line.427"></a>
-<span class="sourceLineNo">428</span> } catch (IOException e) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span> LOG.warn("Failed to close the connection");<a name="line.429"></a>
-<span class="sourceLineNo">430</span> }<a name="line.430"></a>
-<span class="sourceLineNo">431</span> }<a name="line.431"></a>
-<span class="sourceLineNo">432</span> // Allow currently running replication tasks to finish<a name="line.432"></a>
-<span class="sourceLineNo">433</span> exec.shutdown();<a name="line.433"></a>
-<span class="sourceLineNo">434</span> try {<a name="line.434"></a>
-<span class="sourceLineNo">435</span> exec.awaitTermination(maxTerminationWait, TimeUnit.MILLISECONDS);<a name="line.435"></a>
-<span class="sourceLineNo">436</span> } catch (InterruptedException e) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span> }<a name="line.437"></a>
-<span class="sourceLineNo">438</span> // Abort if the tasks did not terminate in time<a name="line.438"></a>
-<span class="sourceLineNo">439</span> if (!exec.isTerminated()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> String errMsg = "HBaseInterClusterReplicationEndpoint termination failed. The " +<a name="line.440"></a>
-<span class="sourceLineNo">441</span> "ThreadPoolExecutor failed to finish all tasks within " + maxTerminationWait + "ms. " +<a name="line.441"></a>
-<span class="sourceLineNo">442</span> "Aborting to prevent Replication from deadlocking. See HBASE-16081.";<a name="line.442"></a>
-<span class="sourceLineNo">443</span> abortable.abort(errMsg, new IOException(errMsg));<a name="line.443"></a>
-<span class="sourceLineNo">444</span> }<a name="line.444"></a>
-<span class="sourceLineNo">445</span> notifyStopped();<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> @VisibleForTesting<a name="line.448"></a>
-<span class="sourceLineNo">449</span> protected Replicator createReplicator(List<Entry> entries, int ordinal) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span> return new Replicator(entries, ordinal);<a name="line.450"></a>
-<span class="sourceLineNo">451</span> }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span> @VisibleForTesting<a name="line.453"></a>
-<span class="sourceLineNo">454</span> protected class Replicator implements Callable<Integer> {<a name="line.454"></a>
-<span class="sourceLineNo">455</span> private List<Entry> entries;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> private int ordinal;<a name="line.456"></a>
-<span class="sourceLineNo">457</span> public Replicator(List<Entry> entries, int ordinal) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> this.entries = entries;<a name="line.458"></a>
-<span class="sourceLineNo">459</span> this.ordinal = ordinal;<a name="line.459"></a>
-<span class="sourceLineNo">460</span> }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span> protected void replicateEntries(BlockingInterface rrs, final List<Entry> batch,<a name="line.462"></a>
-<span class="sourceLineNo">463</span> String replicationClusterId, Path baseNamespaceDir, Path hfileArchiveDir)<a name="line.463"></a>
-<span class="sourceLineNo">464</span> throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (LOG.isTraceEnabled()) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> long size = 0;<a name="line.466"></a>
-<span class="sourceLineNo">467</span> for (Entry e: entries) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span> size += e.getKey().estimatedSerializedSizeOf();<a name="line.468"></a>
-<span class="sourceLineNo">469</span> size += e.getEdit().estimatedSerializedSizeOf();<a name="line.469"></a>
-<span class="sourceLineNo">470</span> }<a name="line.470"></a>
-<span class="sourceLineNo">471</span> LOG.trace("Replicating batch " + System.identityHashCode(entries) + " of " +<a name="line.471"></a>
-<span class="sourceLineNo">472</span> entries.size() + " entries with total size " + size + " bytes to " +<a name="line.472"></a>
-<span class="sourceLineNo">473</span> replicationClusterId);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> }<a name="line.474"></a>
-<span class="sourceLineNo">475</span> try {<a name="line.475"></a>
-<span class="sourceLineNo">476</span> ReplicationProtbufUtil.replicateWALEntry(rrs, batch.toArray(new Entry[batch.size()]),<a name="line.476"></a>
-<span class="sourceLineNo">477</span> replicationClusterId, baseNamespaceDir, hfileArchiveDir);<a name="line.477"></a>
-<span class="sourceLineNo">478</span> if (LOG.isTraceEnabled()) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.trace("Completed replicating batch " + System.identityHashCode(entries));<a name="line.479"></a>
-<span class="sourceLineNo">480</span> }<a name="line.480"></a>
-<span class="sourceLineNo">481</span> } catch (IOException e) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span> if (LOG.isTraceEnabled()) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span> LOG.trace("Failed replicating batch " + System.identityHashCode(entries), e);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> }<a name="line.484"></a>
-<span class="sourceLineNo">485</span> throw e;<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> @Override<a name="line.489"></a>
-<span class="sourceLineNo">490</span> public Integer call() throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span> SinkPeer sinkPeer = null;<a name="line.491"></a>
-<span class="sourceLineNo">492</span> try {<a name="line.492"></a>
-<span class="sourceLineNo">493</span> sinkPeer = replicationSinkMgr.getReplicationSink();<a name="line.493"></a>
-<span class="sourceLineNo">494</span> BlockingInterface rrs = sinkPeer.getRegionServer();<a name="line.494"></a>
-<span class="sourceLineNo">495</span> replicateEntries(rrs, entries, replicationClusterId, baseNamespaceDir, hfileArchiveDir);<a name="line.495"></a>
-<span class="sourceLineNo">496</span> replicationSinkMgr.reportSinkSuccess(sinkPeer);<a name="line.496"></a>
-<span class="sourceLineNo">497</span> return ordinal;<a name="line.497"></a>
-<span class="sourceLineNo">498</span> } catch (IOException ioe) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span> if (sinkPeer != null) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span> replicationSinkMgr.reportBadSink(sinkPeer);<a name="line.500"></a>
-<span class="sourceLineNo">501</span> }<a name="line.501"></a>
-<span class="sourceLineNo">502</span> throw ioe;<a name="line.502"></a>
-<span class="sourceLineNo">503</span> }<a name="line.503"></a>
-<span class="sourceLineNo">504</span> }<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>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>
[34/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span>
<TRUNCATED>
[32/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call() throws IOException {<a name="line.396"></a>
+<span c
<TRUNCATED>
[16/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call() throws IOException {<a name="line.396"></a>
+<s
<TRUNCATED>
[29/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call() throws IOException {<a name="line.396"></a>
+<span class="sourceLineNo">397</
<TRUNCATED>
[02/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html
deleted file mode 100644
index 7a938de..0000000
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html
+++ /dev/null
@@ -1,632 +0,0 @@
-<!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>package org.apache.hadoop.hbase.replication;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import static org.mockito.Mockito.mock;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.mockito.Mockito.verify;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.mockito.Mockito.when;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.List;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.UUID;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.Cell;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.Waiter;<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.RegionInfo;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.Table;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.junit.AfterClass;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.junit.Assert;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.junit.Before;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.BeforeClass;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.ClassRule;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Test;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.experimental.categories.Category;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.65"></a>
-<span class="sourceLineNo">066</span> */<a name="line.66"></a>
-<span class="sourceLineNo">067</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.67"></a>
-<span class="sourceLineNo">068</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span> @ClassRule<a name="line.70"></a>
-<span class="sourceLineNo">071</span> public static final HBaseClassTestRule CLASS_RULE =<a name="line.71"></a>
-<span class="sourceLineNo">072</span> HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span> private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span> static int numRegionServers;<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span> @BeforeClass<a name="line.78"></a>
-<span class="sourceLineNo">079</span> public static void setUpBeforeClass() throws Exception {<a name="line.79"></a>
-<span class="sourceLineNo">080</span> TestReplicationBase.setUpBeforeClass();<a name="line.80"></a>
-<span class="sourceLineNo">081</span> numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<a name="line.81"></a>
-<span class="sourceLineNo">082</span> }<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span> @AfterClass<a name="line.84"></a>
-<span class="sourceLineNo">085</span> public static void tearDownAfterClass() throws Exception {<a name="line.85"></a>
-<span class="sourceLineNo">086</span> TestReplicationBase.tearDownAfterClass();<a name="line.86"></a>
-<span class="sourceLineNo">087</span> // check stop is called<a name="line.87"></a>
-<span class="sourceLineNo">088</span> Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() > 0);<a name="line.88"></a>
-<span class="sourceLineNo">089</span> }<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> @Before<a name="line.91"></a>
-<span class="sourceLineNo">092</span> public void setup() throws Exception {<a name="line.92"></a>
-<span class="sourceLineNo">093</span> ReplicationEndpointForTest.contructedCount.set(0);<a name="line.93"></a>
-<span class="sourceLineNo">094</span> ReplicationEndpointForTest.startedCount.set(0);<a name="line.94"></a>
-<span class="sourceLineNo">095</span> ReplicationEndpointForTest.replicateCount.set(0);<a name="line.95"></a>
-<span class="sourceLineNo">096</span> ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.96"></a>
-<span class="sourceLineNo">097</span> ReplicationEndpointForTest.lastEntries = null;<a name="line.97"></a>
-<span class="sourceLineNo">098</span> final List<RegionServerThread> rsThreads =<a name="line.98"></a>
-<span class="sourceLineNo">099</span> utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.99"></a>
-<span class="sourceLineNo">100</span> for (RegionServerThread rs : rsThreads) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span> utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.101"></a>
-<span class="sourceLineNo">102</span> }<a name="line.102"></a>
-<span class="sourceLineNo">103</span> // Wait for all log roll to finish<a name="line.103"></a>
-<span class="sourceLineNo">104</span> utility1.waitFor(3000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.104"></a>
-<span class="sourceLineNo">105</span> @Override<a name="line.105"></a>
-<span class="sourceLineNo">106</span> public boolean evaluate() throws Exception {<a name="line.106"></a>
-<span class="sourceLineNo">107</span> for (RegionServerThread rs : rsThreads) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> return false;<a name="line.109"></a>
-<span class="sourceLineNo">110</span> }<a name="line.110"></a>
-<span class="sourceLineNo">111</span> }<a name="line.111"></a>
-<span class="sourceLineNo">112</span> return true;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span> @Override<a name="line.115"></a>
-<span class="sourceLineNo">116</span> public String explainFailure() throws Exception {<a name="line.116"></a>
-<span class="sourceLineNo">117</span> List<String> logRollInProgressRsList = new ArrayList<>();<a name="line.117"></a>
-<span class="sourceLineNo">118</span> for (RegionServerThread rs : rsThreads) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span> logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.120"></a>
-<span class="sourceLineNo">121</span> }<a name="line.121"></a>
-<span class="sourceLineNo">122</span> }<a name="line.122"></a>
-<span class="sourceLineNo">123</span> return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<a name="line.123"></a>
-<span class="sourceLineNo">124</span> }<a name="line.124"></a>
-<span class="sourceLineNo">125</span> });<a name="line.125"></a>
-<span class="sourceLineNo">126</span> }<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span> @Test<a name="line.128"></a>
-<span class="sourceLineNo">129</span> public void testCustomReplicationEndpoint() throws Exception {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> // test installing a custom replication endpoint other than the default one.<a name="line.130"></a>
-<span class="sourceLineNo">131</span> admin.addPeer("testCustomReplicationEndpoint",<a name="line.131"></a>
-<span class="sourceLineNo">132</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.132"></a>
-<span class="sourceLineNo">133</span> .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span> // check whether the class has been constructed and started<a name="line.135"></a>
-<span class="sourceLineNo">136</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> @Override<a name="line.137"></a>
-<span class="sourceLineNo">138</span> public boolean evaluate() throws Exception {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> return ReplicationEndpointForTest.contructedCount.get() >= numRegionServers;<a name="line.139"></a>
-<span class="sourceLineNo">140</span> }<a name="line.140"></a>
-<span class="sourceLineNo">141</span> });<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span> @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span> public boolean evaluate() throws Exception {<a name="line.145"></a>
-<span class="sourceLineNo">146</span> return ReplicationEndpointForTest.startedCount.get() >= numRegionServers;<a name="line.146"></a>
-<span class="sourceLineNo">147</span> }<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> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span> // now replicate some data.<a name="line.152"></a>
-<span class="sourceLineNo">153</span> doPut(Bytes.toBytes("row42"));<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span> public boolean evaluate() throws Exception {<a name="line.157"></a>
-<span class="sourceLineNo">158</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.158"></a>
-<span class="sourceLineNo">159</span> }<a name="line.159"></a>
-<span class="sourceLineNo">160</span> });<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span> doAssert(Bytes.toBytes("row42"));<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span> admin.removePeer("testCustomReplicationEndpoint");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span> @Test<a name="line.167"></a>
-<span class="sourceLineNo">168</span> public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.168"></a>
-<span class="sourceLineNo">169</span> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.169"></a>
-<span class="sourceLineNo">170</span> Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.170"></a>
-<span class="sourceLineNo">171</span> int peerCount = admin.getPeersCount();<a name="line.171"></a>
-<span class="sourceLineNo">172</span> final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.172"></a>
-<span class="sourceLineNo">173</span> admin.addPeer(id,<a name="line.173"></a>
-<span class="sourceLineNo">174</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.174"></a>
-<span class="sourceLineNo">175</span> .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.175"></a>
-<span class="sourceLineNo">176</span> // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.176"></a>
-<span class="sourceLineNo">177</span> // debug. Peer needs to be up for the edit to make it across. This wait on<a name="line.177"></a>
-<span class="sourceLineNo">178</span> // peer count seems to be a hack that has us not progress till peer is up.<a name="line.178"></a>
-<span class="sourceLineNo">179</span> if (admin.getPeersCount() <= peerCount) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> Threads.sleep(100);<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> // now replicate some data<a name="line.183"></a>
-<span class="sourceLineNo">184</span> doPut(row);<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.186"></a>
-<span class="sourceLineNo">187</span> @Override<a name="line.187"></a>
-<span class="sourceLineNo">188</span> public boolean evaluate() throws Exception {<a name="line.188"></a>
-<span class="sourceLineNo">189</span> // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.189"></a>
-<span class="sourceLineNo">190</span> // only send over one edit.<a name="line.190"></a>
-<span class="sourceLineNo">191</span> int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.191"></a>
-<span class="sourceLineNo">192</span> LOG.info("count=" + count);<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return ReplicationEndpointReturningFalse.replicated.get();<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span> });<a name="line.195"></a>
-<span class="sourceLineNo">196</span> if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span> throw ReplicationEndpointReturningFalse.ex.get();<a name="line.197"></a>
-<span class="sourceLineNo">198</span> }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span> admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<a name="line.200"></a>
-<span class="sourceLineNo">201</span> }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span> @Test<a name="line.203"></a>
-<span class="sourceLineNo">204</span> public void testInterClusterReplication() throws Exception {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> final String id = "testInterClusterReplication";<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span> List<HRegion> regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.207"></a>
-<span class="sourceLineNo">208</span> int totEdits = 0;<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> // Make sure edits are spread across regions because we do region based batching<a name="line.210"></a>
-<span class="sourceLineNo">211</span> // before shipping edits.<a name="line.211"></a>
-<span class="sourceLineNo">212</span> for(HRegion region: regions) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span> RegionInfo hri = region.getRegionInfo();<a name="line.213"></a>
-<span class="sourceLineNo">214</span> byte[] row = hri.getStartKey();<a name="line.214"></a>
-<span class="sourceLineNo">215</span> for (int i = 0; i < 100; i++) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span> if (row.length > 0) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span> Put put = new Put(row);<a name="line.217"></a>
-<span class="sourceLineNo">218</span> put.addColumn(famName, row, row);<a name="line.218"></a>
-<span class="sourceLineNo">219</span> region.put(put);<a name="line.219"></a>
-<span class="sourceLineNo">220</span> totEdits++;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> }<a name="line.221"></a>
-<span class="sourceLineNo">222</span> }<a name="line.222"></a>
-<span class="sourceLineNo">223</span> }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> admin.addPeer(id,<a name="line.225"></a>
-<span class="sourceLineNo">226</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.226"></a>
-<span class="sourceLineNo">227</span> .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.227"></a>
-<span class="sourceLineNo">228</span> null);<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span> final int numEdits = totEdits;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.231"></a>
-<span class="sourceLineNo">232</span> @Override<a name="line.232"></a>
-<span class="sourceLineNo">233</span> public boolean evaluate() throws Exception {<a name="line.233"></a>
-<span class="sourceLineNo">234</span> return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> }<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span> @Override<a name="line.237"></a>
-<span class="sourceLineNo">238</span> public String explainFailure() throws Exception {<a name="line.238"></a>
-<span class="sourceLineNo">239</span> String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.239"></a>
-<span class="sourceLineNo">240</span> + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return failure;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span> });<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> admin.removePeer("testInterClusterReplication");<a name="line.245"></a>
-<span class="sourceLineNo">246</span> utility1.deleteTableData(tableName);<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> @Test<a name="line.249"></a>
-<span class="sourceLineNo">250</span> public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.250"></a>
-<span class="sourceLineNo">251</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.251"></a>
-<span class="sourceLineNo">252</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.252"></a>
-<span class="sourceLineNo">253</span> //test that we can create mutliple WALFilters reflectively<a name="line.253"></a>
-<span class="sourceLineNo">254</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.254"></a>
-<span class="sourceLineNo">255</span> EverythingPassesWALEntryFilter.class.getName() +<a name="line.255"></a>
-<span class="sourceLineNo">256</span> "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.256"></a>
-<span class="sourceLineNo">257</span> admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.257"></a>
-<span class="sourceLineNo">258</span> // now replicate some data.<a name="line.258"></a>
-<span class="sourceLineNo">259</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> doPut(connection, Bytes.toBytes("row1"));<a name="line.260"></a>
-<span class="sourceLineNo">261</span> doPut(connection, row);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> doPut(connection, Bytes.toBytes("row2"));<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
-<span class="sourceLineNo">267</span> public boolean evaluate() throws Exception {<a name="line.267"></a>
-<span class="sourceLineNo">268</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.268"></a>
-<span class="sourceLineNo">269</span> }<a name="line.269"></a>
-<span class="sourceLineNo">270</span> });<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span> Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.272"></a>
-<span class="sourceLineNo">273</span> //make sure our reflectively created filter is in the filter chain<a name="line.273"></a>
-<span class="sourceLineNo">274</span> Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.274"></a>
-<span class="sourceLineNo">275</span> admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<a name="line.275"></a>
-<span class="sourceLineNo">276</span> }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span> @Test (expected=IOException.class)<a name="line.278"></a>
-<span class="sourceLineNo">279</span> public void testWALEntryFilterAddValidation() throws Exception {<a name="line.279"></a>
-<span class="sourceLineNo">280</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.280"></a>
-<span class="sourceLineNo">281</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.281"></a>
-<span class="sourceLineNo">282</span> //test that we can create mutliple WALFilters reflectively<a name="line.282"></a>
-<span class="sourceLineNo">283</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.283"></a>
-<span class="sourceLineNo">284</span> "IAmNotARealWalEntryFilter");<a name="line.284"></a>
-<span class="sourceLineNo">285</span> admin.addPeer("testWALEntryFilterAddValidation", rpc);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> @Test (expected=IOException.class)<a name="line.288"></a>
-<span class="sourceLineNo">289</span> public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.289"></a>
-<span class="sourceLineNo">290</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.290"></a>
-<span class="sourceLineNo">291</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.291"></a>
-<span class="sourceLineNo">292</span> //test that we can create mutliple WALFilters reflectively<a name="line.292"></a>
-<span class="sourceLineNo">293</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.293"></a>
-<span class="sourceLineNo">294</span> "IAmNotARealWalEntryFilter");<a name="line.294"></a>
-<span class="sourceLineNo">295</span> admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.295"></a>
-<span class="sourceLineNo">296</span> }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span> @Test<a name="line.299"></a>
-<span class="sourceLineNo">300</span> public void testMetricsSourceBaseSourcePassthrough(){<a name="line.300"></a>
-<span class="sourceLineNo">301</span> /*<a name="line.301"></a>
-<span class="sourceLineNo">302</span> The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.302"></a>
-<span class="sourceLineNo">303</span> and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.303"></a>
-<span class="sourceLineNo">304</span> Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.304"></a>
-<span class="sourceLineNo">305</span> allows for custom JMX metrics.<a name="line.305"></a>
-<span class="sourceLineNo">306</span> This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.306"></a>
-<span class="sourceLineNo">307</span> the two layers of wrapping to the actual BaseSource.<a name="line.307"></a>
-<span class="sourceLineNo">308</span> */<a name="line.308"></a>
-<span class="sourceLineNo">309</span> String id = "id";<a name="line.309"></a>
-<span class="sourceLineNo">310</span> DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.311"></a>
-<span class="sourceLineNo">312</span> when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.312"></a>
-<span class="sourceLineNo">313</span> MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.313"></a>
-<span class="sourceLineNo">314</span> when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span> MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.316"></a>
-<span class="sourceLineNo">317</span> MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> MetricsSource source = new MetricsSource(id, singleSourceSource, globalSourceSource);<a name="line.318"></a>
-<span class="sourceLineNo">319</span> String gaugeName = "gauge";<a name="line.319"></a>
-<span class="sourceLineNo">320</span> String singleGaugeName = "source.id." + gaugeName;<a name="line.320"></a>
-<span class="sourceLineNo">321</span> String globalGaugeName = "source." + gaugeName;<a name="line.321"></a>
-<span class="sourceLineNo">322</span> long delta = 1;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> String counterName = "counter";<a name="line.323"></a>
-<span class="sourceLineNo">324</span> String singleCounterName = "source.id." + counterName;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> String globalCounterName = "source." + counterName;<a name="line.325"></a>
-<span class="sourceLineNo">326</span> long count = 2;<a name="line.326"></a>
-<span class="sourceLineNo">327</span> source.decGauge(gaugeName, delta);<a name="line.327"></a>
-<span class="sourceLineNo">328</span> source.getMetricsContext();<a name="line.328"></a>
-<span class="sourceLineNo">329</span> source.getMetricsDescription();<a name="line.329"></a>
-<span class="sourceLineNo">330</span> source.getMetricsJmxContext();<a name="line.330"></a>
-<span class="sourceLineNo">331</span> source.getMetricsName();<a name="line.331"></a>
-<span class="sourceLineNo">332</span> source.incCounters(counterName, count);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> source.incGauge(gaugeName, delta);<a name="line.333"></a>
-<span class="sourceLineNo">334</span> source.init();<a name="line.334"></a>
-<span class="sourceLineNo">335</span> source.removeMetric(gaugeName);<a name="line.335"></a>
-<span class="sourceLineNo">336</span> source.setGauge(gaugeName, delta);<a name="line.336"></a>
-<span class="sourceLineNo">337</span> source.updateHistogram(counterName, count);<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.339"></a>
-<span class="sourceLineNo">340</span> verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.340"></a>
-<span class="sourceLineNo">341</span> verify(globalRms).getMetricsContext();<a name="line.341"></a>
-<span class="sourceLineNo">342</span> verify(globalRms).getMetricsJmxContext();<a name="line.342"></a>
-<span class="sourceLineNo">343</span> verify(globalRms).getMetricsName();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> verify(singleRms).incCounters(singleCounterName, count);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> verify(globalRms).incCounters(globalCounterName, count);<a name="line.345"></a>
-<span class="sourceLineNo">346</span> verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.346"></a>
-<span class="sourceLineNo">347</span> verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> verify(globalRms).init();<a name="line.348"></a>
-<span class="sourceLineNo">349</span> verify(singleRms).removeMetric(singleGaugeName);<a name="line.349"></a>
-<span class="sourceLineNo">350</span> verify(globalRms).removeMetric(globalGaugeName);<a name="line.350"></a>
-<span class="sourceLineNo">351</span> verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.351"></a>
-<span class="sourceLineNo">352</span> verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.352"></a>
-<span class="sourceLineNo">353</span> verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> verify(globalRms).updateHistogram(globalCounterName, count);<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 void doPut(byte[] row) throws IOException {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> doPut(connection, row);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> }<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> try (Table t = connection.getTable(tableName)) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span> Put put = new Put(row);<a name="line.365"></a>
-<span class="sourceLineNo">366</span> put.addColumn(famName, row, row);<a name="line.366"></a>
-<span class="sourceLineNo">367</span> t.put(put);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> }<a name="line.368"></a>
-<span class="sourceLineNo">369</span> }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span> private static void doAssert(byte[] row) throws Exception {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span> return; // first call<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span> Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<Cell> cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> Assert.assertEquals(1, cells.size());<a name="line.377"></a>
-<span class="sourceLineNo">378</span> Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.378"></a>
-<span class="sourceLineNo">379</span> cells.get(0).getRowLength(), row, 0, row.length));<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> static UUID uuid = UUID.randomUUID();<a name="line.383"></a>
-<span class="sourceLineNo">384</span> static AtomicInteger contructedCount = new AtomicInteger();<a name="line.384"></a>
-<span class="sourceLineNo">385</span> static AtomicInteger startedCount = new AtomicInteger();<a name="line.385"></a>
-<span class="sourceLineNo">386</span> static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.386"></a>
-<span class="sourceLineNo">387</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.387"></a>
-<span class="sourceLineNo">388</span> static volatile List<Entry> lastEntries = null;<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> public ReplicationEndpointForTest() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span> replicateCount.set(0);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> contructedCount.incrementAndGet();<a name="line.392"></a>
-<span class="sourceLineNo">393</span> }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span> public UUID getPeerUUID() {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return uuid;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> }<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span> @Override<a name="line.400"></a>
-<span class="sourceLineNo">401</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> replicateCount.incrementAndGet();<a name="line.402"></a>
-<span class="sourceLineNo">403</span> lastEntries = new ArrayList<>(replicateContext.entries);<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return true;<a name="line.404"></a>
-<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span> @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span> public void start() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span> startAsync();<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void stop() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> stopAsync();<a name="line.414"></a>
-<span class="sourceLineNo">415</span> }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span> @Override<a name="line.417"></a>
-<span class="sourceLineNo">418</span> protected void doStart() {<a name="line.418"></a>
-<span class="sourceLineNo">419</span> startedCount.incrementAndGet();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> notifyStarted();<a name="line.420"></a>
-<span class="sourceLineNo">421</span> }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span> @Override<a name="line.423"></a>
-<span class="sourceLineNo">424</span> protected void doStop() {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> stoppedCount.incrementAndGet();<a name="line.425"></a>
-<span class="sourceLineNo">426</span> notifyStopped();<a name="line.426"></a>
-<span class="sourceLineNo">427</span> }<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span> public static class InterClusterReplicationEndpointForTest<a name="line.430"></a>
-<span class="sourceLineNo">431</span> extends HBaseInterClusterReplicationEndpoint {<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.433"></a>
-<span class="sourceLineNo">434</span> static boolean failedOnce;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> public InterClusterReplicationEndpointForTest() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span> replicateCount.set(0);<a name="line.437"></a>
-<span class="sourceLineNo">438</span> }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span> @Override<a name="line.440"></a>
-<span class="sourceLineNo">441</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> boolean success = super.replicate(replicateContext);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> if (success) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> replicateCount.addAndGet(replicateContext.entries.size());<a name="line.444"></a>
-<span class="sourceLineNo">445</span> }<a name="line.445"></a>
-<span class="sourceLineNo">446</span> return success;<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> @Override<a name="line.449"></a>
-<span class="sourceLineNo">450</span> protected Replicator createReplicator(List<Entry> entries, int ordinal) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span> // Fail only once, we don't want to slow down the test.<a name="line.451"></a>
-<span class="sourceLineNo">452</span> if (failedOnce) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> return new DummyReplicator(entries, ordinal);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> } else {<a name="line.454"></a>
-<span class="sourceLineNo">455</span> failedOnce = true;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> return new FailingDummyReplicator(entries, ordinal);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> }<a name="line.457"></a>
-<span class="sourceLineNo">458</span> }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span> protected class DummyReplicator extends Replicator {<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span> private int ordinal;<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span> public DummyReplicator(List<Entry> entries, int ordinal) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> super(entries, ordinal);<a name="line.465"></a>
-<span class="sourceLineNo">466</span> this.ordinal = ordinal;<a name="line.466"></a>
-<span class="sourceLineNo">467</span> }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span> @Override<a name="line.469"></a>
-<span class="sourceLineNo">470</span> public Integer call() throws IOException {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> return ordinal;<a name="line.471"></a>
-<span class="sourceLineNo">472</span> }<a name="line.472"></a>
-<span class="sourceLineNo">473</span> }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span> protected class FailingDummyReplicator extends DummyReplicator {<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span> public FailingDummyReplicator(List<Entry> entries, int ordinal) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span> super(entries, ordinal);<a name="line.478"></a>
-<span class="sourceLineNo">479</span> }<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span> @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span> public Integer call() throws IOException {<a name="line.482"></a>
-<span class="sourceLineNo">483</span> throw new IOException("Sample Exception: Failed to replicate.");<a name="line.483"></a>
-<span class="sourceLineNo">484</span> }<a name="line.484"></a>
-<span class="sourceLineNo">485</span> }<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span> public static class ReplicationEndpointReturningFalse extends ReplicationEndpointForTest {<a name="line.488"></a>
-<span class="sourceLineNo">489</span> static int COUNT = 10;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> static AtomicReference<Exception> ex = new AtomicReference<>(null);<a name="line.490"></a>
-<span class="sourceLineNo">491</span> static AtomicBoolean replicated = new AtomicBoolean(false);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> @Override<a name="line.492"></a>
-<span class="sourceLineNo">493</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span> try {<a name="line.494"></a>
-<span class="sourceLineNo">495</span> // check row<a name="line.495"></a>
-<span class="sourceLineNo">496</span> doAssert(row);<a name="line.496"></a>
-<span class="sourceLineNo">497</span> } catch (Exception e) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span> ex.set(e);<a name="line.498"></a>
-<span class="sourceLineNo">499</span> }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span> super.replicate(replicateContext);<a name="line.501"></a>
-<span class="sourceLineNo">502</span> LOG.info("Replicated " + Bytes.toString(row) + ", count=" + replicateCount.get());<a name="line.502"></a>
-<span class="sourceLineNo">503</span><a name="line.503"></a>
-<span class="sourceLineNo">504</span> replicated.set(replicateCount.get() > COUNT); // first 10 times, we return false<a name="line.504"></a>
-<span class="sourceLineNo">505</span> return replicated.get();<a name="line.505"></a>
-<span class="sourceLineNo">506</span> }<a name="line.506"></a>
-<span class="sourceLineNo">507</span> }<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span> // return a WALEntry filter which only accepts "row", but not other rows<a name="line.509"></a>
-<span class="sourceLineNo">510</span> public static class ReplicationEndpointWithWALEntryFilter extends ReplicationEndpointForTest {<a name="line.510"></a>
-<span class="sourceLineNo">511</span> static AtomicReference<Exception> ex = new AtomicReference<>(null);<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> @Override<a name="line.513"></a>
-<span class="sourceLineNo">514</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span> try {<a name="line.515"></a>
-<span class="sourceLineNo">516</span> super.replicate(replicateContext);<a name="line.516"></a>
-<span class="sourceLineNo">517</span> doAssert(row);<a name="line.517"></a>
-<span class="sourceLineNo">518</span> } catch (Exception e) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span> ex.set(e);<a name="line.519"></a>
-<span class="sourceLineNo">520</span> }<a name="line.520"></a>
-<span class="sourceLineNo">521</span> return true;<a name="line.521"></a>
-<span class="sourceLineNo">522</span> }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span> @Override<a name="line.524"></a>
-<span class="sourceLineNo">525</span> public WALEntryFilter getWALEntryfilter() {<a name="line.525"></a>
-<span class="sourceLineNo">526</span> return new ChainWALEntryFilter(super.getWALEntryfilter(), new WALEntryFilter() {<a name="line.526"></a>
-<span class="sourceLineNo">527</span> @Override<a name="line.527"></a>
-<span class="sourceLineNo">528</span> public Entry filter(Entry entry) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span> ArrayList<Cell> cells = entry.getEdit().getCells();<a name="line.529"></a>
-<span class="sourceLineNo">530</span> int size = cells.size();<a name="line.530"></a>
-<span class="sourceLineNo">531</span> for (int i = size-1; i >= 0; i--) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span> Cell cell = cells.get(i);<a name="line.532"></a>
-<span class="sourceLineNo">533</span> if (!Bytes.equals(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),<a name="line.533"></a>
-<span class="sourceLineNo">534</span> row, 0, row.length)) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span> cells.remove(i);<a name="line.535"></a>
-<span class="sourceLineNo">536</span> }<a name="line.536"></a>
-<span class="sourceLineNo">537</span> }<a name="line.537"></a>
-<span class="sourceLineNo">538</span> return entry;<a name="line.538"></a>
-<span class="sourceLineNo">539</span> }<a name="line.539"></a>
-<span class="sourceLineNo">540</span> });<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> public static class EverythingPassesWALEntryFilter implements WALEntryFilter {<a name="line.544"></a>
-<span class="sourceLineNo">545</span> private static boolean passedEntry = false;<a name="line.545"></a>
-<span class="sourceLineNo">546</span> @Override<a name="line.546"></a>
-<span class="sourceLineNo">547</span> public Entry filter(Entry entry) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span> passedEntry = true;<a name="line.548"></a>
-<span class="sourceLineNo">549</span> return entry;<a name="line.549"></a>
-<span class="sourceLineNo">550</span> }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span> public static boolean hasPassedAnEntry(){<a name="line.552"></a>
-<span class="sourceLineNo">553</span> return passedEntry;<a name="line.553"></a>
-<span class="sourceLineNo">554</span> }<a name="line.554"></a>
-<span class="sourceLineNo">555</span> }<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span> public static class EverythingPassesWALEntryFilterSubclass extends EverythingPassesWALEntryFilter {<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span> }<a name="line.559"></a>
-<span class="sourceLineNo">560</span>}<a name="line.560"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>
[38/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html
index c2e0da8..16d68f4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html
@@ -157,27 +157,28 @@
<span class="sourceLineNo">149</span> Threads.sleep(100);// wait a short while for other worker thread to fully exit<a name="line.149"></a>
<span class="sourceLineNo">150</span> boolean allTasksDone = workerThreads.values().stream().allMatch(w -> w.isFinished());<a name="line.150"></a>
<span class="sourceLineNo">151</span> if (allTasksDone) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span> manager.removeRecoveredSource(this);<a name="line.152"></a>
-<span class="sourceLineNo">153</span> LOG.info("Finished recovering queue {} with the following stats: {}", queueId, getStats());<a name="line.153"></a>
-<span class="sourceLineNo">154</span> }<a name="line.154"></a>
-<span class="sourceLineNo">155</span> }<a name="line.155"></a>
-<span class="sourceLineNo">156</span> }<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span> @Override<a name="line.158"></a>
-<span class="sourceLineNo">159</span> public String getPeerId() {<a name="line.159"></a>
-<span class="sourceLineNo">160</span> return this.actualPeerId;<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> @Override<a name="line.163"></a>
-<span class="sourceLineNo">164</span> public ServerName getServerWALsBelongTo() {<a name="line.164"></a>
-<span class="sourceLineNo">165</span> return this.replicationQueueInfo.getDeadRegionServers().get(0);<a name="line.165"></a>
-<span class="sourceLineNo">166</span> }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span> @Override<a name="line.168"></a>
-<span class="sourceLineNo">169</span> public boolean isRecovered() {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> return true;<a name="line.170"></a>
-<span class="sourceLineNo">171</span> }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>}<a name="line.172"></a>
+<span class="sourceLineNo">152</span> this.getSourceMetrics().clear();<a name="line.152"></a>
+<span class="sourceLineNo">153</span> manager.removeRecoveredSource(this);<a name="line.153"></a>
+<span class="sourceLineNo">154</span> LOG.info("Finished recovering queue {} with the following stats: {}", queueId, getStats());<a name="line.154"></a>
+<span class="sourceLineNo">155</span> }<a name="line.155"></a>
+<span class="sourceLineNo">156</span> }<a name="line.156"></a>
+<span class="sourceLineNo">157</span> }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span> @Override<a name="line.159"></a>
+<span class="sourceLineNo">160</span> public String getPeerId() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span> return this.actualPeerId;<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> @Override<a name="line.164"></a>
+<span class="sourceLineNo">165</span> public ServerName getServerWALsBelongTo() {<a name="line.165"></a>
+<span class="sourceLineNo">166</span> return this.replicationQueueInfo.getDeadRegionServers().get(0);<a name="line.166"></a>
+<span class="sourceLineNo">167</span> }<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span> @Override<a name="line.169"></a>
+<span class="sourceLineNo">170</span> public boolean isRecovered() {<a name="line.170"></a>
+<span class="sourceLineNo">171</span> return true;<a name="line.171"></a>
+<span class="sourceLineNo">172</span> }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>}<a name="line.173"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
index 4eb9011..a99b4a7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html
@@ -527,109 +527,110 @@
<span class="sourceLineNo">519</span> }<a name="line.519"></a>
<span class="sourceLineNo">520</span> }<a name="line.520"></a>
<span class="sourceLineNo">521</span> }<a name="line.521"></a>
-<span class="sourceLineNo">522</span> }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span> @Override<a name="line.524"></a>
-<span class="sourceLineNo">525</span> public String getQueueId() {<a name="line.525"></a>
-<span class="sourceLineNo">526</span> return this.queueId;<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span> @Override<a name="line.529"></a>
-<span class="sourceLineNo">530</span> public String getPeerId() {<a name="line.530"></a>
-<span class="sourceLineNo">531</span> return this.peerId;<a name="line.531"></a>
-<span class="sourceLineNo">532</span> }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span> @Override<a name="line.534"></a>
-<span class="sourceLineNo">535</span> public Path getCurrentPath() {<a name="line.535"></a>
-<span class="sourceLineNo">536</span> // only for testing<a name="line.536"></a>
-<span class="sourceLineNo">537</span> for (ReplicationSourceShipper worker : workerThreads.values()) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span> if (worker.getCurrentPath() != null) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span> return worker.getCurrentPath();<a name="line.539"></a>
-<span class="sourceLineNo">540</span> }<a name="line.540"></a>
-<span class="sourceLineNo">541</span> }<a name="line.541"></a>
-<span class="sourceLineNo">542</span> return null;<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> @Override<a name="line.545"></a>
-<span class="sourceLineNo">546</span> public boolean isSourceActive() {<a name="line.546"></a>
-<span class="sourceLineNo">547</span> return !this.server.isStopped() && this.sourceRunning;<a name="line.547"></a>
-<span class="sourceLineNo">548</span> }<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span> /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span> * Comparator used to compare logs together based on their start time<a name="line.551"></a>
-<span class="sourceLineNo">552</span> */<a name="line.552"></a>
-<span class="sourceLineNo">553</span> public static class LogsComparator implements Comparator<Path> {<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span> @Override<a name="line.555"></a>
-<span class="sourceLineNo">556</span> public int compare(Path o1, Path o2) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span> return Long.compare(getTS(o1), getTS(o2));<a name="line.557"></a>
-<span class="sourceLineNo">558</span> }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span> /**<a name="line.560"></a>
-<span class="sourceLineNo">561</span> * Split a path to get the start time<a name="line.561"></a>
-<span class="sourceLineNo">562</span> * For example: 10.20.20.171%3A60020.1277499063250<a name="line.562"></a>
-<span class="sourceLineNo">563</span> * @param p path to split<a name="line.563"></a>
-<span class="sourceLineNo">564</span> * @return start time<a name="line.564"></a>
-<span class="sourceLineNo">565</span> */<a name="line.565"></a>
-<span class="sourceLineNo">566</span> private static long getTS(Path p) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span> int tsIndex = p.getName().lastIndexOf('.') + 1;<a name="line.567"></a>
-<span class="sourceLineNo">568</span> return Long.parseLong(p.getName().substring(tsIndex));<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> @Override<a name="line.572"></a>
-<span class="sourceLineNo">573</span> public String getStats() {<a name="line.573"></a>
-<span class="sourceLineNo">574</span> StringBuilder sb = new StringBuilder();<a name="line.574"></a>
-<span class="sourceLineNo">575</span> sb.append("Total replicated edits: ").append(totalReplicatedEdits)<a name="line.575"></a>
-<span class="sourceLineNo">576</span> .append(", current progress: \n");<a name="line.576"></a>
-<span class="sourceLineNo">577</span> for (Map.Entry<String, ReplicationSourceShipper> entry : workerThreads.entrySet()) {<a name="line.577"></a>
-<span class="sourceLineNo">578</span> String walGroupId = entry.getKey();<a name="line.578"></a>
-<span class="sourceLineNo">579</span> ReplicationSourceShipper worker = entry.getValue();<a name="line.579"></a>
-<span class="sourceLineNo">580</span> long position = worker.getCurrentPosition();<a name="line.580"></a>
-<span class="sourceLineNo">581</span> Path currentPath = worker.getCurrentPath();<a name="line.581"></a>
-<span class="sourceLineNo">582</span> sb.append("walGroup [").append(walGroupId).append("]: ");<a name="line.582"></a>
-<span class="sourceLineNo">583</span> if (currentPath != null) {<a name="line.583"></a>
-<span class="sourceLineNo">584</span> sb.append("currently replicating from: ").append(currentPath).append(" at position: ")<a name="line.584"></a>
-<span class="sourceLineNo">585</span> .append(position).append("\n");<a name="line.585"></a>
-<span class="sourceLineNo">586</span> } else {<a name="line.586"></a>
-<span class="sourceLineNo">587</span> sb.append("no replication ongoing, waiting for new log");<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> return sb.toString();<a name="line.590"></a>
-<span class="sourceLineNo">591</span> }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span> @Override<a name="line.593"></a>
-<span class="sourceLineNo">594</span> public MetricsSource getSourceMetrics() {<a name="line.594"></a>
-<span class="sourceLineNo">595</span> return this.metrics;<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span> @Override<a name="line.598"></a>
-<span class="sourceLineNo">599</span> public void postShipEdits(List<Entry> entries, int batchSize) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span> if (throttler.isEnabled()) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> throttler.addPushSize(batchSize);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> }<a name="line.602"></a>
-<span class="sourceLineNo">603</span> totalReplicatedEdits.addAndGet(entries.size());<a name="line.603"></a>
-<span class="sourceLineNo">604</span> totalBufferUsed.addAndGet(-batchSize);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> }<a name="line.605"></a>
-<span class="sourceLineNo">606</span><a name="line.606"></a>
-<span class="sourceLineNo">607</span> @Override<a name="line.607"></a>
-<span class="sourceLineNo">608</span> public WALFileLengthProvider getWALFileLengthProvider() {<a name="line.608"></a>
-<span class="sourceLineNo">609</span> return walFileLengthProvider;<a name="line.609"></a>
-<span class="sourceLineNo">610</span> }<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span> @Override<a name="line.612"></a>
-<span class="sourceLineNo">613</span> public ServerName getServerWALsBelongTo() {<a name="line.613"></a>
-<span class="sourceLineNo">614</span> return server.getServerName();<a name="line.614"></a>
-<span class="sourceLineNo">615</span> }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span> Server getServer() {<a name="line.617"></a>
-<span class="sourceLineNo">618</span> return server;<a name="line.618"></a>
-<span class="sourceLineNo">619</span> }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span> ReplicationQueueStorage getQueueStorage() {<a name="line.621"></a>
-<span class="sourceLineNo">622</span> return queueStorage;<a name="line.622"></a>
-<span class="sourceLineNo">623</span> }<a name="line.623"></a>
-<span class="sourceLineNo">624</span>}<a name="line.624"></a>
+<span class="sourceLineNo">522</span> this.metrics.clear();<a name="line.522"></a>
+<span class="sourceLineNo">523</span> }<a name="line.523"></a>
+<span class="sourceLineNo">524</span><a name="line.524"></a>
+<span class="sourceLineNo">525</span> @Override<a name="line.525"></a>
+<span class="sourceLineNo">526</span> public String getQueueId() {<a name="line.526"></a>
+<span class="sourceLineNo">527</span> return this.queueId;<a name="line.527"></a>
+<span class="sourceLineNo">528</span> }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span> @Override<a name="line.530"></a>
+<span class="sourceLineNo">531</span> public String getPeerId() {<a name="line.531"></a>
+<span class="sourceLineNo">532</span> return this.peerId;<a name="line.532"></a>
+<span class="sourceLineNo">533</span> }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span> @Override<a name="line.535"></a>
+<span class="sourceLineNo">536</span> public Path getCurrentPath() {<a name="line.536"></a>
+<span class="sourceLineNo">537</span> // only for testing<a name="line.537"></a>
+<span class="sourceLineNo">538</span> for (ReplicationSourceShipper worker : workerThreads.values()) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span> if (worker.getCurrentPath() != null) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span> return worker.getCurrentPath();<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> return null;<a name="line.543"></a>
+<span class="sourceLineNo">544</span> }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span> @Override<a name="line.546"></a>
+<span class="sourceLineNo">547</span> public boolean isSourceActive() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span> return !this.server.isStopped() && this.sourceRunning;<a name="line.548"></a>
+<span class="sourceLineNo">549</span> }<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span> /**<a name="line.551"></a>
+<span class="sourceLineNo">552</span> * Comparator used to compare logs together based on their start time<a name="line.552"></a>
+<span class="sourceLineNo">553</span> */<a name="line.553"></a>
+<span class="sourceLineNo">554</span> public static class LogsComparator implements Comparator<Path> {<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span> @Override<a name="line.556"></a>
+<span class="sourceLineNo">557</span> public int compare(Path o1, Path o2) {<a name="line.557"></a>
+<span class="sourceLineNo">558</span> return Long.compare(getTS(o1), getTS(o2));<a name="line.558"></a>
+<span class="sourceLineNo">559</span> }<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span> /**<a name="line.561"></a>
+<span class="sourceLineNo">562</span> * Split a path to get the start time<a name="line.562"></a>
+<span class="sourceLineNo">563</span> * For example: 10.20.20.171%3A60020.1277499063250<a name="line.563"></a>
+<span class="sourceLineNo">564</span> * @param p path to split<a name="line.564"></a>
+<span class="sourceLineNo">565</span> * @return start time<a name="line.565"></a>
+<span class="sourceLineNo">566</span> */<a name="line.566"></a>
+<span class="sourceLineNo">567</span> private static long getTS(Path p) {<a name="line.567"></a>
+<span class="sourceLineNo">568</span> int tsIndex = p.getName().lastIndexOf('.') + 1;<a name="line.568"></a>
+<span class="sourceLineNo">569</span> return Long.parseLong(p.getName().substring(tsIndex));<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> @Override<a name="line.573"></a>
+<span class="sourceLineNo">574</span> public String getStats() {<a name="line.574"></a>
+<span class="sourceLineNo">575</span> StringBuilder sb = new StringBuilder();<a name="line.575"></a>
+<span class="sourceLineNo">576</span> sb.append("Total replicated edits: ").append(totalReplicatedEdits)<a name="line.576"></a>
+<span class="sourceLineNo">577</span> .append(", current progress: \n");<a name="line.577"></a>
+<span class="sourceLineNo">578</span> for (Map.Entry<String, ReplicationSourceShipper> entry : workerThreads.entrySet()) {<a name="line.578"></a>
+<span class="sourceLineNo">579</span> String walGroupId = entry.getKey();<a name="line.579"></a>
+<span class="sourceLineNo">580</span> ReplicationSourceShipper worker = entry.getValue();<a name="line.580"></a>
+<span class="sourceLineNo">581</span> long position = worker.getCurrentPosition();<a name="line.581"></a>
+<span class="sourceLineNo">582</span> Path currentPath = worker.getCurrentPath();<a name="line.582"></a>
+<span class="sourceLineNo">583</span> sb.append("walGroup [").append(walGroupId).append("]: ");<a name="line.583"></a>
+<span class="sourceLineNo">584</span> if (currentPath != null) {<a name="line.584"></a>
+<span class="sourceLineNo">585</span> sb.append("currently replicating from: ").append(currentPath).append(" at position: ")<a name="line.585"></a>
+<span class="sourceLineNo">586</span> .append(position).append("\n");<a name="line.586"></a>
+<span class="sourceLineNo">587</span> } else {<a name="line.587"></a>
+<span class="sourceLineNo">588</span> sb.append("no replication ongoing, waiting for new log");<a name="line.588"></a>
+<span class="sourceLineNo">589</span> }<a name="line.589"></a>
+<span class="sourceLineNo">590</span> }<a name="line.590"></a>
+<span class="sourceLineNo">591</span> return sb.toString();<a name="line.591"></a>
+<span class="sourceLineNo">592</span> }<a name="line.592"></a>
+<span class="sourceLineNo">593</span><a name="line.593"></a>
+<span class="sourceLineNo">594</span> @Override<a name="line.594"></a>
+<span class="sourceLineNo">595</span> public MetricsSource getSourceMetrics() {<a name="line.595"></a>
+<span class="sourceLineNo">596</span> return this.metrics;<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> @Override<a name="line.599"></a>
+<span class="sourceLineNo">600</span> public void postShipEdits(List<Entry> entries, int batchSize) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span> if (throttler.isEnabled()) {<a name="line.601"></a>
+<span class="sourceLineNo">602</span> throttler.addPushSize(batchSize);<a name="line.602"></a>
+<span class="sourceLineNo">603</span> }<a name="line.603"></a>
+<span class="sourceLineNo">604</span> totalReplicatedEdits.addAndGet(entries.size());<a name="line.604"></a>
+<span class="sourceLineNo">605</span> totalBufferUsed.addAndGet(-batchSize);<a name="line.605"></a>
+<span class="sourceLineNo">606</span> }<a name="line.606"></a>
+<span class="sourceLineNo">607</span><a name="line.607"></a>
+<span class="sourceLineNo">608</span> @Override<a name="line.608"></a>
+<span class="sourceLineNo">609</span> public WALFileLengthProvider getWALFileLengthProvider() {<a name="line.609"></a>
+<span class="sourceLineNo">610</span> return walFileLengthProvider;<a name="line.610"></a>
+<span class="sourceLineNo">611</span> }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span> @Override<a name="line.613"></a>
+<span class="sourceLineNo">614</span> public ServerName getServerWALsBelongTo() {<a name="line.614"></a>
+<span class="sourceLineNo">615</span> return server.getServerName();<a name="line.615"></a>
+<span class="sourceLineNo">616</span> }<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span> Server getServer() {<a name="line.618"></a>
+<span class="sourceLineNo">619</span> return server;<a name="line.619"></a>
+<span class="sourceLineNo">620</span> }<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span> ReplicationQueueStorage getQueueStorage() {<a name="line.622"></a>
+<span class="sourceLineNo">623</span> return queueStorage;<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>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
index 4eb9011..a99b4a7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
@@ -527,109 +527,110 @@
<span class="sourceLineNo">519</span> }<a name="line.519"></a>
<span class="sourceLineNo">520</span> }<a name="line.520"></a>
<span class="sourceLineNo">521</span> }<a name="line.521"></a>
-<span class="sourceLineNo">522</span> }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span> @Override<a name="line.524"></a>
-<span class="sourceLineNo">525</span> public String getQueueId() {<a name="line.525"></a>
-<span class="sourceLineNo">526</span> return this.queueId;<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span> @Override<a name="line.529"></a>
-<span class="sourceLineNo">530</span> public String getPeerId() {<a name="line.530"></a>
-<span class="sourceLineNo">531</span> return this.peerId;<a name="line.531"></a>
-<span class="sourceLineNo">532</span> }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span> @Override<a name="line.534"></a>
-<span class="sourceLineNo">535</span> public Path getCurrentPath() {<a name="line.535"></a>
-<span class="sourceLineNo">536</span> // only for testing<a name="line.536"></a>
-<span class="sourceLineNo">537</span> for (ReplicationSourceShipper worker : workerThreads.values()) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span> if (worker.getCurrentPath() != null) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span> return worker.getCurrentPath();<a name="line.539"></a>
-<span class="sourceLineNo">540</span> }<a name="line.540"></a>
-<span class="sourceLineNo">541</span> }<a name="line.541"></a>
-<span class="sourceLineNo">542</span> return null;<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> @Override<a name="line.545"></a>
-<span class="sourceLineNo">546</span> public boolean isSourceActive() {<a name="line.546"></a>
-<span class="sourceLineNo">547</span> return !this.server.isStopped() && this.sourceRunning;<a name="line.547"></a>
-<span class="sourceLineNo">548</span> }<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span> /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span> * Comparator used to compare logs together based on their start time<a name="line.551"></a>
-<span class="sourceLineNo">552</span> */<a name="line.552"></a>
-<span class="sourceLineNo">553</span> public static class LogsComparator implements Comparator<Path> {<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span> @Override<a name="line.555"></a>
-<span class="sourceLineNo">556</span> public int compare(Path o1, Path o2) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span> return Long.compare(getTS(o1), getTS(o2));<a name="line.557"></a>
-<span class="sourceLineNo">558</span> }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span> /**<a name="line.560"></a>
-<span class="sourceLineNo">561</span> * Split a path to get the start time<a name="line.561"></a>
-<span class="sourceLineNo">562</span> * For example: 10.20.20.171%3A60020.1277499063250<a name="line.562"></a>
-<span class="sourceLineNo">563</span> * @param p path to split<a name="line.563"></a>
-<span class="sourceLineNo">564</span> * @return start time<a name="line.564"></a>
-<span class="sourceLineNo">565</span> */<a name="line.565"></a>
-<span class="sourceLineNo">566</span> private static long getTS(Path p) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span> int tsIndex = p.getName().lastIndexOf('.') + 1;<a name="line.567"></a>
-<span class="sourceLineNo">568</span> return Long.parseLong(p.getName().substring(tsIndex));<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> @Override<a name="line.572"></a>
-<span class="sourceLineNo">573</span> public String getStats() {<a name="line.573"></a>
-<span class="sourceLineNo">574</span> StringBuilder sb = new StringBuilder();<a name="line.574"></a>
-<span class="sourceLineNo">575</span> sb.append("Total replicated edits: ").append(totalReplicatedEdits)<a name="line.575"></a>
-<span class="sourceLineNo">576</span> .append(", current progress: \n");<a name="line.576"></a>
-<span class="sourceLineNo">577</span> for (Map.Entry<String, ReplicationSourceShipper> entry : workerThreads.entrySet()) {<a name="line.577"></a>
-<span class="sourceLineNo">578</span> String walGroupId = entry.getKey();<a name="line.578"></a>
-<span class="sourceLineNo">579</span> ReplicationSourceShipper worker = entry.getValue();<a name="line.579"></a>
-<span class="sourceLineNo">580</span> long position = worker.getCurrentPosition();<a name="line.580"></a>
-<span class="sourceLineNo">581</span> Path currentPath = worker.getCurrentPath();<a name="line.581"></a>
-<span class="sourceLineNo">582</span> sb.append("walGroup [").append(walGroupId).append("]: ");<a name="line.582"></a>
-<span class="sourceLineNo">583</span> if (currentPath != null) {<a name="line.583"></a>
-<span class="sourceLineNo">584</span> sb.append("currently replicating from: ").append(currentPath).append(" at position: ")<a name="line.584"></a>
-<span class="sourceLineNo">585</span> .append(position).append("\n");<a name="line.585"></a>
-<span class="sourceLineNo">586</span> } else {<a name="line.586"></a>
-<span class="sourceLineNo">587</span> sb.append("no replication ongoing, waiting for new log");<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> return sb.toString();<a name="line.590"></a>
-<span class="sourceLineNo">591</span> }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span> @Override<a name="line.593"></a>
-<span class="sourceLineNo">594</span> public MetricsSource getSourceMetrics() {<a name="line.594"></a>
-<span class="sourceLineNo">595</span> return this.metrics;<a name="line.595"></a>
-<span class="sourceLineNo">596</span> }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span> @Override<a name="line.598"></a>
-<span class="sourceLineNo">599</span> public void postShipEdits(List<Entry> entries, int batchSize) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span> if (throttler.isEnabled()) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span> throttler.addPushSize(batchSize);<a name="line.601"></a>
-<span class="sourceLineNo">602</span> }<a name="line.602"></a>
-<span class="sourceLineNo">603</span> totalReplicatedEdits.addAndGet(entries.size());<a name="line.603"></a>
-<span class="sourceLineNo">604</span> totalBufferUsed.addAndGet(-batchSize);<a name="line.604"></a>
-<span class="sourceLineNo">605</span> }<a name="line.605"></a>
-<span class="sourceLineNo">606</span><a name="line.606"></a>
-<span class="sourceLineNo">607</span> @Override<a name="line.607"></a>
-<span class="sourceLineNo">608</span> public WALFileLengthProvider getWALFileLengthProvider() {<a name="line.608"></a>
-<span class="sourceLineNo">609</span> return walFileLengthProvider;<a name="line.609"></a>
-<span class="sourceLineNo">610</span> }<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span> @Override<a name="line.612"></a>
-<span class="sourceLineNo">613</span> public ServerName getServerWALsBelongTo() {<a name="line.613"></a>
-<span class="sourceLineNo">614</span> return server.getServerName();<a name="line.614"></a>
-<span class="sourceLineNo">615</span> }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span> Server getServer() {<a name="line.617"></a>
-<span class="sourceLineNo">618</span> return server;<a name="line.618"></a>
-<span class="sourceLineNo">619</span> }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span> ReplicationQueueStorage getQueueStorage() {<a name="line.621"></a>
-<span class="sourceLineNo">622</span> return queueStorage;<a name="line.622"></a>
-<span class="sourceLineNo">623</span> }<a name="line.623"></a>
-<span class="sourceLineNo">624</span>}<a name="line.624"></a>
+<span class="sourceLineNo">522</span> this.metrics.clear();<a name="line.522"></a>
+<span class="sourceLineNo">523</span> }<a name="line.523"></a>
+<span class="sourceLineNo">524</span><a name="line.524"></a>
+<span class="sourceLineNo">525</span> @Override<a name="line.525"></a>
+<span class="sourceLineNo">526</span> public String getQueueId() {<a name="line.526"></a>
+<span class="sourceLineNo">527</span> return this.queueId;<a name="line.527"></a>
+<span class="sourceLineNo">528</span> }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span> @Override<a name="line.530"></a>
+<span class="sourceLineNo">531</span> public String getPeerId() {<a name="line.531"></a>
+<span class="sourceLineNo">532</span> return this.peerId;<a name="line.532"></a>
+<span class="sourceLineNo">533</span> }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span> @Override<a name="line.535"></a>
+<span class="sourceLineNo">536</span> public Path getCurrentPath() {<a name="line.536"></a>
+<span class="sourceLineNo">537</span> // only for testing<a name="line.537"></a>
+<span class="sourceLineNo">538</span> for (ReplicationSourceShipper worker : workerThreads.values()) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span> if (worker.getCurrentPath() != null) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span> return worker.getCurrentPath();<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> return null;<a name="line.543"></a>
+<span class="sourceLineNo">544</span> }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span> @Override<a name="line.546"></a>
+<span class="sourceLineNo">547</span> public boolean isSourceActive() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span> return !this.server.isStopped() && this.sourceRunning;<a name="line.548"></a>
+<span class="sourceLineNo">549</span> }<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span> /**<a name="line.551"></a>
+<span class="sourceLineNo">552</span> * Comparator used to compare logs together based on their start time<a name="line.552"></a>
+<span class="sourceLineNo">553</span> */<a name="line.553"></a>
+<span class="sourceLineNo">554</span> public static class LogsComparator implements Comparator<Path> {<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span> @Override<a name="line.556"></a>
+<span class="sourceLineNo">557</span> public int compare(Path o1, Path o2) {<a name="line.557"></a>
+<span class="sourceLineNo">558</span> return Long.compare(getTS(o1), getTS(o2));<a name="line.558"></a>
+<span class="sourceLineNo">559</span> }<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span> /**<a name="line.561"></a>
+<span class="sourceLineNo">562</span> * Split a path to get the start time<a name="line.562"></a>
+<span class="sourceLineNo">563</span> * For example: 10.20.20.171%3A60020.1277499063250<a name="line.563"></a>
+<span class="sourceLineNo">564</span> * @param p path to split<a name="line.564"></a>
+<span class="sourceLineNo">565</span> * @return start time<a name="line.565"></a>
+<span class="sourceLineNo">566</span> */<a name="line.566"></a>
+<span class="sourceLineNo">567</span> private static long getTS(Path p) {<a name="line.567"></a>
+<span class="sourceLineNo">568</span> int tsIndex = p.getName().lastIndexOf('.') + 1;<a name="line.568"></a>
+<span class="sourceLineNo">569</span> return Long.parseLong(p.getName().substring(tsIndex));<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> @Override<a name="line.573"></a>
+<span class="sourceLineNo">574</span> public String getStats() {<a name="line.574"></a>
+<span class="sourceLineNo">575</span> StringBuilder sb = new StringBuilder();<a name="line.575"></a>
+<span class="sourceLineNo">576</span> sb.append("Total replicated edits: ").append(totalReplicatedEdits)<a name="line.576"></a>
+<span class="sourceLineNo">577</span> .append(", current progress: \n");<a name="line.577"></a>
+<span class="sourceLineNo">578</span> for (Map.Entry<String, ReplicationSourceShipper> entry : workerThreads.entrySet()) {<a name="line.578"></a>
+<span class="sourceLineNo">579</span> String walGroupId = entry.getKey();<a name="line.579"></a>
+<span class="sourceLineNo">580</span> ReplicationSourceShipper worker = entry.getValue();<a name="line.580"></a>
+<span class="sourceLineNo">581</span> long position = worker.getCurrentPosition();<a name="line.581"></a>
+<span class="sourceLineNo">582</span> Path currentPath = worker.getCurrentPath();<a name="line.582"></a>
+<span class="sourceLineNo">583</span> sb.append("walGroup [").append(walGroupId).append("]: ");<a name="line.583"></a>
+<span class="sourceLineNo">584</span> if (currentPath != null) {<a name="line.584"></a>
+<span class="sourceLineNo">585</span> sb.append("currently replicating from: ").append(currentPath).append(" at position: ")<a name="line.585"></a>
+<span class="sourceLineNo">586</span> .append(position).append("\n");<a name="line.586"></a>
+<span class="sourceLineNo">587</span> } else {<a name="line.587"></a>
+<span class="sourceLineNo">588</span> sb.append("no replication ongoing, waiting for new log");<a name="line.588"></a>
+<span class="sourceLineNo">589</span> }<a name="line.589"></a>
+<span class="sourceLineNo">590</span> }<a name="line.590"></a>
+<span class="sourceLineNo">591</span> return sb.toString();<a name="line.591"></a>
+<span class="sourceLineNo">592</span> }<a name="line.592"></a>
+<span class="sourceLineNo">593</span><a name="line.593"></a>
+<span class="sourceLineNo">594</span> @Override<a name="line.594"></a>
+<span class="sourceLineNo">595</span> public MetricsSource getSourceMetrics() {<a name="line.595"></a>
+<span class="sourceLineNo">596</span> return this.metrics;<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> @Override<a name="line.599"></a>
+<span class="sourceLineNo">600</span> public void postShipEdits(List<Entry> entries, int batchSize) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span> if (throttler.isEnabled()) {<a name="line.601"></a>
+<span class="sourceLineNo">602</span> throttler.addPushSize(batchSize);<a name="line.602"></a>
+<span class="sourceLineNo">603</span> }<a name="line.603"></a>
+<span class="sourceLineNo">604</span> totalReplicatedEdits.addAndGet(entries.size());<a name="line.604"></a>
+<span class="sourceLineNo">605</span> totalBufferUsed.addAndGet(-batchSize);<a name="line.605"></a>
+<span class="sourceLineNo">606</span> }<a name="line.606"></a>
+<span class="sourceLineNo">607</span><a name="line.607"></a>
+<span class="sourceLineNo">608</span> @Override<a name="line.608"></a>
+<span class="sourceLineNo">609</span> public WALFileLengthProvider getWALFileLengthProvider() {<a name="line.609"></a>
+<span class="sourceLineNo">610</span> return walFileLengthProvider;<a name="line.610"></a>
+<span class="sourceLineNo">611</span> }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span> @Override<a name="line.613"></a>
+<span class="sourceLineNo">614</span> public ServerName getServerWALsBelongTo() {<a name="line.614"></a>
+<span class="sourceLineNo">615</span> return server.getServerName();<a name="line.615"></a>
+<span class="sourceLineNo">616</span> }<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span> Server getServer() {<a name="line.618"></a>
+<span class="sourceLineNo">619</span> return server;<a name="line.619"></a>
+<span class="sourceLineNo">620</span> }<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span> ReplicationQueueStorage getQueueStorage() {<a name="line.622"></a>
+<span class="sourceLineNo">623</span> return queueStorage;<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>
[09/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html
index 386285f..ae1e807 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html" target="_top">Frames</a></li>
@@ -74,14 +74,14 @@ var activeTableTab = "activeTableTab";
<div>
<ul class="subNavList">
<li>Summary: </li>
-<li><a href="#nested.class.summary">Nested</a> | </li>
-<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.replication.BaseReplicationEndpoint">Field</a> | </li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a> | </li>
+<li><a href="#field.summary">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
-<li>Field | </li>
+<li><a href="#field.detail">Field</a> | </li>
<li><a href="#constructor.detail">Constr</a> | </li>
<li><a href="#method.detail">Method</a></li>
</ul>
@@ -142,7 +142,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.316">TestReplicator.FailureInjectingReplicationEndpointForTest</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.244">TestReplicator.FailureInjectingReplicationEndpointForTest</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest</a></pre>
</li>
</ul>
@@ -156,35 +156,6 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionser
<!-- -->
</a>
<h3>Nested Class Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
-<caption><span>Nested Classes</span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Class and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>(package private) static class </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></span></code> </td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>class </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest</a></span></code> </td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.regionserver.TestReplicator.ReplicationEndpointForTest">
-<!-- -->
-</a>
-<h3>Nested classes/interfaces inherited from class org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</a></code></li>
-</ul>
-<ul class="blockList">
-<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint">
-<!-- -->
-</a>
-<h3>Nested classes/interfaces inherited from class org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</h3>
-<code>org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator</code></li>
-</ul>
<ul class="blockList">
<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">
<!-- -->
@@ -214,6 +185,24 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionser
<!-- -->
</a>
<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html#failNext">failNext</a></span></code> </td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.replication.regionserver.TestReplicator.ReplicationEndpointForTest">
+<!-- -->
+</a>
+<h3>Fields inherited from class org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#batchCount">batchCount</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#entriesCount">entriesCount</a></code></li>
+</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.replication.BaseReplicationEndpoint">
<!-- -->
@@ -253,7 +242,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionser
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
-<td class="colFirst"><code>protected org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator</code></td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html#createReplicator-java.util.List-int-">createReplicator</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
int ordinal)</code> </td>
</tr>
@@ -270,7 +259,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionser
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</h3>
-<code>doStop, init, isPeerEnabled, sleepForRetries</code></li>
+<code>doStop, init, isPeerEnabled, replicateEntries, sleepForRetries</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">
@@ -315,6 +304,23 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionser
<div class="details">
<ul class="blockList">
<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="failNext">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>failNext</h4>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html#line.246">failNext</a></pre>
+</li>
+</ul>
+</li>
+</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
@@ -327,7 +333,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionser
<ul class="blockListLast">
<li class="blockList">
<h4>FailureInjectingReplicationEndpointForTest</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html#line.316">FailureInjectingReplicationEndpointForTest</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html#line.244">FailureInjectingReplicationEndpointForTest</a>()</pre>
</li>
</ul>
</li>
@@ -344,8 +350,8 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionser
<ul class="blockListLast">
<li class="blockList">
<h4>createReplicator</h4>
-<pre>protected org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html#line.472">createReplicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
- int ordinal)</pre>
+<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html#line.249">createReplicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
+ int ordinal)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#createReplicator-java.util.List-int-">createReplicator</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest</a></code></dd>
@@ -381,7 +387,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionser
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html" target="_top">Frames</a></li>
@@ -405,14 +411,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionser
<div>
<ul class="subNavList">
<li>Summary: </li>
-<li><a href="#nested.class.summary">Nested</a> | </li>
-<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.replication.BaseReplicationEndpoint">Field</a> | </li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a> | </li>
+<li><a href="#field.summary">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
-<li>Field | </li>
+<li><a href="#field.detail">Field</a> | </li>
<li><a href="#constructor.detail">Constr</a> | </li>
<li><a href="#method.detail">Method</a></li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html
deleted file mode 100644
index 034fdae..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html
+++ /dev/null
@@ -1,299 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TestReplicator.ReplicationEndpointForTest.ReplicatorForTest (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
- try {
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="TestReplicator.ReplicationEndpointForTest.ReplicatorForTest (Apache HBase 3.0.0-SNAPSHOT Test API)";
- }
- }
- catch(err) {
- }
-//-->
-var methods = {"i0":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" target="_top">Frames</a></li>
-<li><a href="TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_top");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary: </li>
-<li>Nested | </li>
-<li>Field | </li>
-<li><a href="#constructor.summary">Constr</a> | </li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail: </li>
-<li>Field | </li>
-<li><a href="#constructor.detail">Constr</a> | </li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!-- -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.replication.regionserver</div>
-<h2 title="Class TestReplicator.ReplicationEndpointForTest.ReplicatorForTest" class="title">Class TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.replication.regionserver.TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></dd>
-</dl>
-<dl>
-<dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest</a></dd>
-</dl>
-<dl>
-<dt>Enclosing class:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest</a></dd>
-</dl>
-<hr>
-<br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.268">TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</a>
-extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!-- -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html#ReplicatorForTest-java.util.List-int-">ReplicatorForTest</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
- int ordinal)</code> </td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!-- -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html#replicateEntries-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-java.util.List-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">replicateEntries</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface rrs,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> replicationClusterId,
- org.apache.hadoop.fs.Path baseNamespaceDir,
- org.apache.hadoop.fs.Path hfileArchiveDir)</code> </td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!-- -->
-</a>
-<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!-- -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="ReplicatorForTest-java.util.List-int-">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>ReplicatorForTest</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html#line.270">ReplicatorForTest</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
- int ordinal)</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!-- -->
-</a>
-<h3>Method Detail</h3>
-<a name="replicateEntries-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-java.util.List-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>replicateEntries</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html#line.275">replicateEntries</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface rrs,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> replicationClusterId,
- org.apache.hadoop.fs.Path baseNamespaceDir,
- org.apache.hadoop.fs.Path hfileArchiveDir)
- throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" target="_top">Frames</a></li>
-<li><a href="TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_bottom");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary: </li>
-<li>Nested | </li>
-<li>Field | </li>
-<li><a href="#constructor.summary">Constr</a> | </li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail: </li>
-<li>Field | </li>
-<li><a href="#constructor.detail">Constr</a> | </li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!-- -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html
index 478f8f2..ace24be 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html
@@ -49,8 +49,8 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" target="_top">Frames</a></li>
@@ -74,7 +74,7 @@ var activeTableTab = "activeTableTab";
<div>
<ul class="subNavList">
<li>Summary: </li>
-<li><a href="#nested.class.summary">Nested</a> | </li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a> | </li>
<li><a href="#field.summary">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
@@ -141,7 +141,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.222">TestReplicator.ReplicationEndpointForTest</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.175">TestReplicator.ReplicationEndpointForTest</a>
extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</pre>
</li>
</ul>
@@ -155,24 +155,6 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<!-- -->
</a>
<h3>Nested Class Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
-<caption><span>Nested Classes</span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Class and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>class </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</a></span></code> </td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint">
-<!-- -->
-</a>
-<h3>Nested classes/interfaces inherited from class org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</h3>
-<code>org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator</code></li>
-</ul>
<ul class="blockList">
<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">
<!-- -->
@@ -209,11 +191,11 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a></code></td>
+<td class="colFirst"><code>protected static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#batchCount">batchCount</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code>private static int</code></td>
+<td class="colFirst"><code>protected static int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#entriesCount">entriesCount</a></span></code> </td>
</tr>
<tr class="altColor">
@@ -268,7 +250,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#await--">await</a></span>()</code> </td>
</tr>
<tr id="i1" class="rowColor">
-<td class="colFirst"><code>protected org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator</code></td>
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#createReplicator-java.util.List-int-">createReplicator</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
int ordinal)</code> </td>
</tr>
@@ -306,7 +288,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</h3>
-<code>doStop, init, isPeerEnabled, sleepForRetries</code></li>
+<code>doStop, init, isPeerEnabled, replicateEntries, sleepForRetries</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">
@@ -363,7 +345,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockList">
<li class="blockList">
<h4>batchCount</h4>
-<pre>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.224">batchCount</a></pre>
+<pre>protected static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.177">batchCount</a></pre>
</li>
</ul>
<a name="entriesCount">
@@ -372,7 +354,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockList">
<li class="blockList">
<h4>entriesCount</h4>
-<pre>private static int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.225">entriesCount</a></pre>
+<pre>protected static int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.178">entriesCount</a></pre>
</li>
</ul>
<a name="latch">
@@ -381,7 +363,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockList">
<li class="blockList">
<h4>latch</h4>
-<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.226">latch</a></pre>
+<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.179">latch</a></pre>
</li>
</ul>
<a name="useLatch">
@@ -390,7 +372,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockListLast">
<li class="blockList">
<h4>useLatch</h4>
-<pre>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.227">useLatch</a></pre>
+<pre>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.180">useLatch</a></pre>
</li>
</ul>
</li>
@@ -407,7 +389,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockListLast">
<li class="blockList">
<h4>ReplicationEndpointForTest</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.222">ReplicationEndpointForTest</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.175">ReplicationEndpointForTest</a>()</pre>
</li>
</ul>
</li>
@@ -424,7 +406,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockList">
<li class="blockList">
<h4>resume</h4>
-<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.229">resume</a>()</pre>
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.182">resume</a>()</pre>
</li>
</ul>
<a name="pause--">
@@ -433,7 +415,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockList">
<li class="blockList">
<h4>pause</h4>
-<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.236">pause</a>()</pre>
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.189">pause</a>()</pre>
</li>
</ul>
<a name="await--">
@@ -442,7 +424,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockList">
<li class="blockList">
<h4>await</h4>
-<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.240">await</a>()
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.193">await</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -456,7 +438,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockList">
<li class="blockList">
<h4>getBatchCount</h4>
-<pre>public static int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.250">getBatchCount</a>()</pre>
+<pre>public static int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.203">getBatchCount</a>()</pre>
</li>
</ul>
<a name="setBatchCount-int-">
@@ -465,7 +447,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockList">
<li class="blockList">
<h4>setBatchCount</h4>
-<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.254">setBatchCount</a>(int i)</pre>
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.207">setBatchCount</a>(int i)</pre>
</li>
</ul>
<a name="getEntriesCount--">
@@ -474,7 +456,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockList">
<li class="blockList">
<h4>getEntriesCount</h4>
-<pre>public static int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.259">getEntriesCount</a>()</pre>
+<pre>public static int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.212">getEntriesCount</a>()</pre>
</li>
</ul>
<a name="setEntriesCount-int-">
@@ -483,7 +465,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockList">
<li class="blockList">
<h4>setEntriesCount</h4>
-<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.263">setEntriesCount</a>(int i)</pre>
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.216">setEntriesCount</a>(int i)</pre>
</li>
</ul>
<a name="replicate-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-">
@@ -492,7 +474,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockList">
<li class="blockList">
<h4>replicate</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.301">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext replicateContext)</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.222">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext replicateContext)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>replicate</code> in interface <code>org.apache.hadoop.hbase.replication.ReplicationEndpoint</code></dd>
@@ -507,8 +489,8 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<ul class="blockListLast">
<li class="blockList">
<h4>createReplicator</h4>
-<pre>protected org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.311">createReplicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
- int ordinal)</pre>
+<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.232">createReplicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
+ int ordinal)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>createReplicator</code> in class <code>org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</code></dd>
@@ -543,8 +525,8 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" target="_top">Frames</a></li>
@@ -568,7 +550,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
<div>
<ul class="subNavList">
<li>Summary: </li>
-<li><a href="#nested.class.summary">Nested</a> | </li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a> | </li>
<li><a href="#field.summary">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html
index d81f347..6607e94 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
<li class="blockList">
<hr>
<br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.93">TestReplicator</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.50">TestReplicator</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></pre>
</li>
</ul>
@@ -264,7 +264,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<ul class="blockList">
<li class="blockList">
<h4>CLASS_RULE</h4>
-<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.96">CLASS_RULE</a></pre>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.53">CLASS_RULE</a></pre>
</li>
</ul>
<a name="LOG">
@@ -273,7 +273,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.99">LOG</a></pre>
+<pre>static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.56">LOG</a></pre>
</li>
</ul>
<a name="NUM_ROWS">
@@ -282,7 +282,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<ul class="blockListLast">
<li class="blockList">
<h4>NUM_ROWS</h4>
-<pre>static final int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.100">NUM_ROWS</a></pre>
+<pre>static final int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.57">NUM_ROWS</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.replication.regionserver.TestReplicator.NUM_ROWS">Constant Field Values</a></dd>
@@ -303,7 +303,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<ul class="blockListLast">
<li class="blockList">
<h4>TestReplicator</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.93">TestReplicator</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.50">TestReplicator</a>()</pre>
</li>
</ul>
</li>
@@ -320,7 +320,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<ul class="blockList">
<li class="blockList">
<h4>setUpBeforeClass</h4>
-<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.103">setUpBeforeClass</a>()
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.60">setUpBeforeClass</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -334,7 +334,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<ul class="blockList">
<li class="blockList">
<h4>testReplicatorBatching</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.111">testReplicatorBatching</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.67">testReplicatorBatching</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -348,7 +348,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<ul class="blockList">
<li class="blockList">
<h4>testReplicatorWithErrors</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.162">testReplicatorWithErrors</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.117">testReplicatorWithErrors</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -362,7 +362,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<ul class="blockList">
<li class="blockList">
<h4>tearDownAfterClass</h4>
-<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.212">tearDownAfterClass</a>()
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.165">tearDownAfterClass</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -376,7 +376,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<ul class="blockListLast">
<li class="blockList">
<h4>truncateTable</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.216">truncateTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> util,
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.169">truncateTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> util,
org.apache.hadoop.hbase.TableName tablename)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html
index ec67a85..d2a3810 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html
@@ -49,8 +49,8 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSourceFSConfigurationProvider.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" target="_top">Frames</a></li>
@@ -655,8 +655,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSourceFSConfigurationProvider.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" target="_top">Frames</a></li>
[41/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 59c95fc..bf2f539 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -532,14 +532,14 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.Entry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.Entry.html b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.Entry.html
index f862989..296589b 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.Entry.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.Entry.html
@@ -370,10 +370,6 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>></code></td>
-<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.Replicator.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#entries">entries</a></span></code> </td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>></code></td>
<td class="colLast"><span class="typeNameLabel">WALEntryBatch.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html#walEntries">walEntries</a></span></code> </td>
</tr>
</tbody>
@@ -412,7 +408,18 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
<tbody>
<tr class="altColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>></code></td>
-<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createBatches-java.util.List-">createBatches</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</code> </td>
+<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createBatches-java.util.List-">createBatches</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</code>
+<div class="block">Divide the entries into multiple batches, so that we can replicate each batch in a thread pool
+ concurrently.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>></code></td>
+<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createParallelBatches-java.util.List-">createParallelBatches</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</code> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>></code></td>
+<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createSerialBatches-java.util.List-">createSerialBatches</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>></code></td>
@@ -460,16 +467,20 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
<td class="colLast"><span class="typeNameLabel">ReplicationSourceWALReader.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#getEntrySize-org.apache.hadoop.hbase.wal.WAL.Entry-">getEntrySize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> entry)</code> </td>
</tr>
<tr class="altColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#getEstimatedEntrySize-org.apache.hadoop.hbase.wal.WAL.Entry-">getEstimatedEntrySize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> e)</code> </td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">RegionReplicaReplicationEndpoint.RegionReplicaOutputSink.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.RegionReplicaOutputSink.html#keepRegionEvent-org.apache.hadoop.hbase.wal.WAL.Entry-">keepRegionEvent</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> entry)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><span class="typeNameLabel">ReplicationSourceWALReader.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#updateBatchStats-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-org.apache.hadoop.hbase.wal.WAL.Entry-long-">updateBatchStats</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a> batch,
<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> entry,
long entrySize)</code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><span class="typeNameLabel">SerialReplicationChecker.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SerialReplicationChecker.html#waitUntilCanPush-org.apache.hadoop.hbase.wal.WAL.Entry-org.apache.hadoop.hbase.Cell-">waitUntilCanPush</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a> entry,
<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstCellInEdit)</code> </td>
@@ -492,12 +503,23 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>></code></td>
-<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createBatches-java.util.List-">createBatches</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</code> </td>
+<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createBatches-java.util.List-">createBatches</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</code>
+<div class="block">Divide the entries into multiple batches, so that we can replicate each batch in a thread pool
+ concurrently.</div>
+</td>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a></code></td>
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>></code></td>
+<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createParallelBatches-java.util.List-">createParallelBatches</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></code></td>
<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createReplicator-java.util.List-int-">createReplicator</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
- int ordinal)</code> </td>
+ int batchIndex)</code> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>></code></td>
+<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createSerialBatches-java.util.List-">createSerialBatches</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>></code></td>
@@ -505,32 +527,40 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)</code> </td>
</tr>
<tr class="altColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#parallelReplicate-java.util.concurrent.CompletionService-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-java.util.List-">parallelReplicate</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionService.html?is-external=true" title="class or interface in java.util.concurrent">CompletionService</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> pool,
+ <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a> replicateContext,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>> batches)</code> </td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><span class="typeNameLabel">ReplicationSourceInterface.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#postShipEdits-java.util.List-int-">postShipEdits</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
int batchSize)</code>
<div class="block">Call this after the shipper thread ship some entries to peer cluster.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><span class="typeNameLabel">ReplicationSource.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#postShipEdits-java.util.List-int-">postShipEdits</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
int batchSize)</code> </td>
</tr>
-<tr class="altColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.Replicator.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#replicateEntries-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-java.util.List-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">replicateEntries</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface rrs,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> batch,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> replicationClusterId,
- org.apache.hadoop.fs.Path baseNamespaceDir,
- org.apache.hadoop.fs.Path hfileArchiveDir)</code> </td>
-</tr>
<tr class="rowColor">
+<td class="colFirst"><code>protected int</code></td>
+<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#replicateEntries-java.util.List-int-">replicateEntries</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
+ int batchIndex)</code> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><span class="typeNameLabel">RegionReplicaReplicationEndpoint.RegionReplicaOutputSink.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.RegionReplicaOutputSink.html#requiresReplication-org.apache.hadoop.hbase.TableName-java.util.List-">requiresReplication</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries)</code>
<div class="block">returns true if the specified entry must be replicated.</div>
</td>
</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#serialReplicateRegionEntries-java.util.List-int-">serialReplicateRegionEntries</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
+ int batchIndex)</code> </td>
+</tr>
</tbody>
</table>
<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
@@ -549,10 +579,6 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> skippedEntries)</code> </td>
</tr>
-<tr class="rowColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#Replicator-java.util.List-int-">Replicator</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
- int ordinal)</code> </td>
-</tr>
</tbody>
</table>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index 5e84ab8..cd48105 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -1803,7 +1803,6 @@
<li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.WorkItemRegion</span></a> (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><V>)</li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsckRepair.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsckRepair</span></a></li>
<li type="circle">org.apache.hadoop.hbase.thrift.<a href="org/apache/hadoop/hbase/thrift/HbaseHandlerMetricsProxy.html" title="class in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">HbaseHandlerMetricsProxy</span></a> (implements java.lang.reflect.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/InvocationHandler.html?is-external=true" title="class or interface in java.lang.reflect">InvocationHandler</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">HBaseInterClusterReplicationEndpoint.Replicator</span></a> (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><V>)</li>
<li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseInterfaceAudience.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseInterfaceAudience</span></a></li>
<li type="circle">org.apache.hadoop.hbase.log.<a href="org/apache/hadoop/hbase/log/HBaseMarkers.html" title="class in org.apache.hadoop.hbase.log"><span class="typeNameLink">HBaseMarkers</span></a></li>
<li type="circle">org.apache.hadoop.hbase.metrics.impl.<a href="org/apache/hadoop/hbase/metrics/impl/HBaseMetrics2HadoopMetricsAdapter.html" title="class in org.apache.hadoop.hbase.metrics.impl"><span class="typeNameLink">HBaseMetrics2HadoopMetricsAdapter</span></a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 69ab5ed..0423a39 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,11 +16,11 @@
<span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
<span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
<span class="sourceLineNo">010</span> public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
-<span class="sourceLineNo">011</span> public static final String revision = "4cb444e77b41cdb733544770a471068256d65bbe";<a name="line.11"></a>
+<span class="sourceLineNo">011</span> public static final String revision = "87f5b5f3411d96c31b4cb61b9a57ced22be91d1f";<a name="line.11"></a>
<span class="sourceLineNo">012</span> public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span> public static final String date = "Thu May 3 14:39:11 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span> public static final String date = "Fri May 4 14:39:10 UTC 2018";<a name="line.13"></a>
<span class="sourceLineNo">014</span> public static final String url = "git://jenkins-websites1.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span> public static final String srcChecksum = "b65d69cf3ec7b334d9360592429adf77";<a name="line.15"></a>
+<span class="sourceLineNo">015</span> public static final String srcChecksum = "9cfe3eb8d49902aafbb6d8066c40fb45";<a name="line.15"></a>
<span class="sourceLineNo">016</span>}<a name="line.16"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationEndpoint.Context.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationEndpoint.Context.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationEndpoint.Context.html
index 08158be..2a3a3ba 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationEndpoint.Context.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationEndpoint.Context.html
@@ -125,7 +125,7 @@
<span class="sourceLineNo">117</span> /**<a name="line.117"></a>
<span class="sourceLineNo">118</span> * Initialize the replication endpoint with the given context.<a name="line.118"></a>
<span class="sourceLineNo">119</span> * @param context replication context<a name="line.119"></a>
-<span class="sourceLineNo">120</span> * @throws IOException<a name="line.120"></a>
+<span class="sourceLineNo">120</span> * @throws IOException error occur when initialize the endpoint.<a name="line.120"></a>
<span class="sourceLineNo">121</span> */<a name="line.121"></a>
<span class="sourceLineNo">122</span> void init(Context context) throws IOException;<a name="line.122"></a>
<span class="sourceLineNo">123</span><a name="line.123"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html
index 08158be..2a3a3ba 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html
@@ -125,7 +125,7 @@
<span class="sourceLineNo">117</span> /**<a name="line.117"></a>
<span class="sourceLineNo">118</span> * Initialize the replication endpoint with the given context.<a name="line.118"></a>
<span class="sourceLineNo">119</span> * @param context replication context<a name="line.119"></a>
-<span class="sourceLineNo">120</span> * @throws IOException<a name="line.120"></a>
+<span class="sourceLineNo">120</span> * @throws IOException error occur when initialize the endpoint.<a name="line.120"></a>
<span class="sourceLineNo">121</span> */<a name="line.121"></a>
<span class="sourceLineNo">122</span> void init(Context context) throws IOException;<a name="line.122"></a>
<span class="sourceLineNo">123</span><a name="line.123"></a>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationEndpoint.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationEndpoint.html
index 08158be..2a3a3ba 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationEndpoint.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationEndpoint.html
@@ -125,7 +125,7 @@
<span class="sourceLineNo">117</span> /**<a name="line.117"></a>
<span class="sourceLineNo">118</span> * Initialize the replication endpoint with the given context.<a name="line.118"></a>
<span class="sourceLineNo">119</span> * @param context replication context<a name="line.119"></a>
-<span class="sourceLineNo">120</span> * @throws IOException<a name="line.120"></a>
+<span class="sourceLineNo">120</span> * @throws IOException error occur when initialize the endpoint.<a name="line.120"></a>
<span class="sourceLineNo">121</span> */<a name="line.121"></a>
<span class="sourceLineNo">122</span> void init(Context context) throws IOException;<a name="line.122"></a>
<span class="sourceLineNo">123</span><a name="line.123"></a>
[43/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
index 4836401..5929a03 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
@@ -126,7 +126,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2881">HBaseFsck.TableInfo.IntegrityFixSuggester</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2893">HBaseFsck.TableInfo.IntegrityFixSuggester</a>
extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html" title="class in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandlerImpl</a></pre>
</li>
</ul>
@@ -267,7 +267,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
<ul class="blockListLast">
<li class="blockList">
<h4>errors</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2882">errors</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2894">errors</a></pre>
</li>
</ul>
</li>
@@ -284,7 +284,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
<ul class="blockListLast">
<li class="blockList">
<h4>IntegrityFixSuggester</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2884">IntegrityFixSuggester</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a> ti,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2896">IntegrityFixSuggester</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a> ti,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> errors)</pre>
</li>
</ul>
@@ -302,7 +302,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
<ul class="blockList">
<li class="blockList">
<h4>handleRegionStartKeyNotEmpty</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2890">handleRegionStartKeyNotEmpty</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hi)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2902">handleRegionStartKeyNotEmpty</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hi)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html#handleRegionStartKeyNotEmpty-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">TableIntegrityErrorHandlerImpl</a></code></span></div>
<div class="block">Callback for handling case where a Table has a first region that does not
@@ -327,7 +327,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
<ul class="blockList">
<li class="blockList">
<h4>handleRegionEndKeyNotEmpty</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2898">handleRegionEndKeyNotEmpty</a>(byte[] curEndKey)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2910">handleRegionEndKeyNotEmpty</a>(byte[] curEndKey)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html#handleRegionEndKeyNotEmpty-byte:A-">TableIntegrityErrorHandlerImpl</a></code></span></div>
<div class="block">Callback for handling case where a Table has a last region that does not
@@ -351,7 +351,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
<ul class="blockList">
<li class="blockList">
<h4>handleDegenerateRegion</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2905">handleDegenerateRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hi)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2917">handleDegenerateRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hi)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html#handleDegenerateRegion-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">TableIntegrityErrorHandlerImpl</a></code></span></div>
<div class="block">Callback for handling a region that has the same start and end key.</div>
@@ -373,7 +373,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
<ul class="blockList">
<li class="blockList">
<h4>handleDuplicateStartKeys</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2911">handleDuplicateStartKeys</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> r1,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2923">handleDuplicateStartKeys</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> r1,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> r2)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html#handleDuplicateStartKeys-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">TableIntegrityErrorHandlerImpl</a></code></span></div>
@@ -398,7 +398,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
<ul class="blockList">
<li class="blockList">
<h4>handleSplit</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2923">handleSplit</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> r1,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2935">handleSplit</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> r1,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> r2)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html#handleSplit-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">TableIntegrityErrorHandler</a></code></span></div>
@@ -419,7 +419,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
<ul class="blockList">
<li class="blockList">
<h4>handleOverlapInRegionChain</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2935">handleOverlapInRegionChain</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hi1,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2947">handleOverlapInRegionChain</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hi1,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hi2)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html#handleOverlapInRegionChain-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">TableIntegrityErrorHandlerImpl</a></code></span></div>
@@ -446,7 +446,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrity
<ul class="blockListLast">
<li class="blockList">
<h4>handleHoleInRegionChain</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2942">handleHoleInRegionChain</a>(byte[] holeStart,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2954">handleHoleInRegionChain</a>(byte[] holeStart,
byte[] holeStop)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html#handleHoleInRegionChain-byte:A-byte:A-">TableIntegrityErrorHandlerImpl</a></code></span></div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
index 67a9310..52a06c6 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2786">HBaseFsck.TableInfo</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2798">HBaseFsck.TableInfo</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">Maintain information about a particular table.</div>
</li>
@@ -293,7 +293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>tableName</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2787">tableName</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2799">tableName</a></pre>
</li>
</ul>
<a name="deployedOn">
@@ -302,7 +302,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>deployedOn</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2788">deployedOn</a></pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util">TreeSet</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2800">deployedOn</a></pre>
</li>
</ul>
<a name="backwards">
@@ -311,7 +311,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>backwards</h4>
-<pre>final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2791">backwards</a></pre>
+<pre>final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2803">backwards</a></pre>
</li>
</ul>
<a name="sidelinedRegions">
@@ -320,7 +320,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>sidelinedRegions</h4>
-<pre>final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><org.apache.hadoop.fs.Path,<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2794">sidelinedRegions</a></pre>
+<pre>final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><org.apache.hadoop.fs.Path,<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2806">sidelinedRegions</a></pre>
</li>
</ul>
<a name="sc">
@@ -329,7 +329,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>sc</h4>
-<pre>final <a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util">RegionSplitCalculator</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2797">sc</a></pre>
+<pre>final <a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util">RegionSplitCalculator</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2809">sc</a></pre>
</li>
</ul>
<a name="htds">
@@ -338,7 +338,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>htds</h4>
-<pre>final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2800">htds</a></pre>
+<pre>final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2812">htds</a></pre>
</li>
</ul>
<a name="overlapGroups">
@@ -347,7 +347,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>overlapGroups</h4>
-<pre>final org.apache.hbase.thirdparty.com.google.common.collect.Multimap<byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2803">overlapGroups</a></pre>
+<pre>final org.apache.hbase.thirdparty.com.google.common.collect.Multimap<byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2815">overlapGroups</a></pre>
</li>
</ul>
<a name="regionsFromMeta">
@@ -356,7 +356,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>regionsFromMeta</h4>
-<pre>private org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList<<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2807">regionsFromMeta</a></pre>
+<pre>private org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList<<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2819">regionsFromMeta</a></pre>
</li>
</ul>
</li>
@@ -373,7 +373,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>TableInfo</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2809">TableInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> name)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2821">TableInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> name)</pre>
</li>
</ul>
</li>
@@ -390,7 +390,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getHTD</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2817">getHTD</a>()</pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2829">getHTD</a>()</pre>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>descriptor common to all regions. null if are none or multiple!</dd>
@@ -403,7 +403,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>addRegionInfo</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2827">addRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hir)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2839">addRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hir)</pre>
</li>
</ul>
<a name="addServer-org.apache.hadoop.hbase.ServerName-">
@@ -412,7 +412,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>addServer</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2852">addServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2864">addServer</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server)</pre>
</li>
</ul>
<a name="getName--">
@@ -421,7 +421,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getName</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2856">getName</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2868">getName</a>()</pre>
</li>
</ul>
<a name="getNumRegions--">
@@ -430,7 +430,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getNumRegions</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2860">getNumRegions</a>()</pre>
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2872">getNumRegions</a>()</pre>
</li>
</ul>
<a name="getRegionsFromMeta--">
@@ -439,7 +439,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getRegionsFromMeta</h4>
-<pre>public org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList<<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2864">getRegionsFromMeta</a>()</pre>
+<pre>public org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList<<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2876">getRegionsFromMeta</a>()</pre>
</li>
</ul>
<a name="checkRegionChain-org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler-">
@@ -448,7 +448,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>checkRegionChain</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.3319">checkRegionChain</a>(<a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html" title="interface in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandler</a> handler)
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.3331">checkRegionChain</a>(<a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html" title="interface in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandler</a> handler)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Check the region chain (from META) of this table. We are looking for
holes, overlaps, and cycles.</div>
@@ -466,7 +466,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>handleOverlapsParallel</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.3449">handleOverlapsParallel</a>(<a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html" title="interface in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandler</a> handler,
+<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.3461">handleOverlapsParallel</a>(<a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html" title="interface in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandler</a> handler,
byte[] prevKey)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
@@ -481,7 +481,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>dump</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.3486">dump</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a><byte[]> splits,
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.3498">dump</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a><byte[]> splits,
org.apache.hbase.thirdparty.com.google.common.collect.Multimap<byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> regions)</pre>
<div class="block">This dumps data in a visually reasonable way for visual debugging</div>
<dl>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
index dbc855f..eb36d53 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4348">HBaseFsck.WorkItemHdfsDir</a>
+<pre>class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4359">HBaseFsck.WorkItemHdfsDir</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>></pre>
<div class="block">Contact hdfs and get all information about specified table directory into
@@ -218,7 +218,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockList">
<li class="blockList">
<h4>tableDir</h4>
-<pre>private org.apache.hadoop.fs.FileStatus <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4349">tableDir</a></pre>
+<pre>private org.apache.hadoop.fs.FileStatus <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4360">tableDir</a></pre>
</li>
</ul>
<a name="errors">
@@ -227,7 +227,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockList">
<li class="blockList">
<h4>errors</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4350">errors</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4361">errors</a></pre>
</li>
</ul>
<a name="fs">
@@ -236,7 +236,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>fs</h4>
-<pre>private org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4351">fs</a></pre>
+<pre>private org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4362">fs</a></pre>
</li>
</ul>
</li>
@@ -253,7 +253,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>WorkItemHdfsDir</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4353">WorkItemHdfsDir</a>(org.apache.hadoop.fs.FileSystem fs,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4364">WorkItemHdfsDir</a>(org.apache.hadoop.fs.FileSystem fs,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> errors,
org.apache.hadoop.fs.FileStatus status)</pre>
</li>
@@ -272,7 +272,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>call</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4361">call</a>()
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4372">call</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</a></pre>
<dl>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
index 9a926cc..81541f9 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4468">HBaseFsck.WorkItemHdfsRegionInfo</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4479">HBaseFsck.WorkItemHdfsRegionInfo</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>></pre>
<div class="block">Contact hdfs and get all information about specified table directory into
@@ -218,7 +218,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockList">
<li class="blockList">
<h4>hbi</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4469">hbi</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4480">hbi</a></pre>
</li>
</ul>
<a name="hbck">
@@ -227,7 +227,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockList">
<li class="blockList">
<h4>hbck</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4470">hbck</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4481">hbck</a></pre>
</li>
</ul>
<a name="errors">
@@ -236,7 +236,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>errors</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4471">errors</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4482">errors</a></pre>
</li>
</ul>
</li>
@@ -253,7 +253,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>WorkItemHdfsRegionInfo</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4473">WorkItemHdfsRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hbi,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4484">WorkItemHdfsRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hbi,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a> hbck,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> errors)</pre>
</li>
@@ -272,7 +272,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>call</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4480">call</a>()
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4491">call</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
index 8ef61a1..c3990e8 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2767">HBaseFsck.WorkItemOverlapMerge</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2779">HBaseFsck.WorkItemOverlapMerge</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>></pre>
</li>
@@ -211,7 +211,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockList">
<li class="blockList">
<h4>handler</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html" title="interface in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandler</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2768">handler</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html" title="interface in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandler</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2780">handler</a></pre>
</li>
</ul>
<a name="overlapgroup">
@@ -220,7 +220,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>overlapgroup</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2769">overlapgroup</a></pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2781">overlapgroup</a></pre>
</li>
</ul>
</li>
@@ -237,7 +237,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>WorkItemOverlapMerge</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2771">WorkItemOverlapMerge</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> overlapgroup,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2783">WorkItemOverlapMerge</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> overlapgroup,
<a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html" title="interface in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandler</a> handler)</pre>
</li>
</ul>
@@ -255,7 +255,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>call</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2777">call</a>()
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2789">call</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
index cba31d9..59d5325 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4283">HBaseFsck.WorkItemRegion</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4294">HBaseFsck.WorkItemRegion</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>></pre>
<div class="block">Contact a region server and get all information from it</div>
@@ -226,7 +226,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockList">
<li class="blockList">
<h4>hbck</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4284">hbck</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4295">hbck</a></pre>
</li>
</ul>
<a name="rsinfo">
@@ -235,7 +235,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockList">
<li class="blockList">
<h4>rsinfo</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4285">rsinfo</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4296">rsinfo</a></pre>
</li>
</ul>
<a name="errors">
@@ -244,7 +244,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockList">
<li class="blockList">
<h4>errors</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4286">errors</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4297">errors</a></pre>
</li>
</ul>
<a name="connection">
@@ -253,7 +253,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>connection</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4287">connection</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4298">connection</a></pre>
</li>
</ul>
</li>
@@ -270,7 +270,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>WorkItemRegion</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4289">WorkItemRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a> hbck,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4300">WorkItemRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a> hbck,
<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> info,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> errors,
<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> connection)</pre>
@@ -290,7 +290,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockList">
<li class="blockList">
<h4>call</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4298">call</a>()
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4309">call</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -306,7 +306,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>filterRegions</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4332">filterRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> regions)</pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4343">filterRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>> regions)</pre>
</li>
</ul>
</li>
[28/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call() throws IOException {<a name="line.396"></a>
+<span class="sourceLineNo">
<TRUNCATED>
[22/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSD
<TRUNCATED>
[46/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
index a3f0da3..af0be80 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.628">ReplicationSourceManager.NodeFailoverWorker</a>
+<pre>class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.626">ReplicationSourceManager.NodeFailoverWorker</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></pre>
<div class="block">Class responsible to setup new ReplicationSources to take care of the queues from dead region
servers.</div>
@@ -250,7 +250,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
<ul class="blockList">
<li class="blockList">
<h4>deadRS</h4>
-<pre>private final <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.630">deadRS</a></pre>
+<pre>private final <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.628">deadRS</a></pre>
</li>
</ul>
<a name="peersSnapshot">
@@ -259,7 +259,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
<ul class="blockListLast">
<li class="blockList">
<h4>peersSnapshot</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.638">peersSnapshot</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.636">peersSnapshot</a></pre>
</li>
</ul>
</li>
@@ -276,7 +276,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
<ul class="blockListLast">
<li class="blockList">
<h4>NodeFailoverWorker</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.641">NodeFailoverWorker</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> deadRS)</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.639">NodeFailoverWorker</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> deadRS)</pre>
</li>
</ul>
</li>
@@ -293,7 +293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
<ul class="blockList">
<li class="blockList">
<h4>isOldPeer</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.647">isOldPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.645">isOldPeer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a> newPeerRef)</pre>
</li>
</ul>
@@ -303,7 +303,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
<ul class="blockListLast">
<li class="blockList">
<h4>run</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.653">run</a>()</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.651">run</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code> in interface <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
index db0500a..416b1e7 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html?is-external=true" title="class or interface in java.lang">@FunctionalInterface</a>
-private static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.450">ReplicationSourceManager.ReplicationQueueOperation</a></pre>
+private static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.448">ReplicationSourceManager.ReplicationQueueOperation</a></pre>
</li>
</ul>
</div>
@@ -154,7 +154,7 @@ private static interface <a href="../../../../../../src-html/org/apache/hadoop/h
<ul class="blockListLast">
<li class="blockList">
<h4>exec</h4>
-<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html#line.451">exec</a>()
+<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html#line.449">exec</a>()
throws <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
index 7a257e4..be50be5 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
@@ -931,7 +931,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>removeSource</h4>
-<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.432">removeSource</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a> src)</pre>
+<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.431">removeSource</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a> src)</pre>
<div class="block">Clear the metrics and related replication queue of the specified old source</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -945,7 +945,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>deleteQueue</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.445">deleteQueue</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> queueId)</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.443">deleteQueue</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> queueId)</pre>
<div class="block">Delete a complete queue of wals associated with a replication source</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -959,7 +959,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>abortWhenFail</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.454">abortWhenFail</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.ReplicationQueueOperation</a> op)</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.452">abortWhenFail</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.ReplicationQueueOperation</a> op)</pre>
</li>
</ul>
<a name="throwIOExceptionWhenFail-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceManager.ReplicationQueueOperation-">
@@ -968,7 +968,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>throwIOExceptionWhenFail</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.462">throwIOExceptionWhenFail</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.ReplicationQueueOperation</a> op)
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.460">throwIOExceptionWhenFail</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.ReplicationQueueOperation</a> op)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -982,7 +982,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>abortAndThrowIOExceptionWhenFail</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.470">abortAndThrowIOExceptionWhenFail</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.ReplicationQueueOperation</a> op)
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.468">abortAndThrowIOExceptionWhenFail</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.ReplicationQueueOperation</a> op)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -996,7 +996,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>logPositionAndCleanOldLogs</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.486">logPositionAndCleanOldLogs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> queueId,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.484">logPositionAndCleanOldLogs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> queueId,
boolean queueRecovered,
<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a> entryBatch)</pre>
<div class="block">This method will log the current position to storage. And also clean old logs from the
@@ -1015,7 +1015,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>cleanOldLogs</h4>
-<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.503">cleanOldLogs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> log,
+<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.501">cleanOldLogs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> log,
boolean inclusive,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> queueId,
boolean queueRecovered)</pre>
@@ -1036,7 +1036,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>cleanOldLogs</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.521">cleanOldLogs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> wals,
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.519">cleanOldLogs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> wals,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
boolean inclusive,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> id)</pre>
@@ -1048,7 +1048,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>preLogRoll</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.535">preLogRoll</a>(org.apache.hadoop.fs.Path newLog)
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.533">preLogRoll</a>(org.apache.hadoop.fs.Path newLog)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -1062,7 +1062,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>postLogRoll</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.593">postLogRoll</a>(org.apache.hadoop.fs.Path newLog)
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.591">postLogRoll</a>(org.apache.hadoop.fs.Path newLog)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -1076,7 +1076,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>regionServerRemoved</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.601">regionServerRemoved</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> regionserver)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.599">regionServerRemoved</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> regionserver)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationListener.html#regionServerRemoved-java.lang.String-">ReplicationListener</a></code></span></div>
<div class="block">A region server has been removed from the local cluster</div>
<dl>
@@ -1093,7 +1093,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>transferQueues</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.611">transferQueues</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> deadRS)</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.609">transferQueues</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> deadRS)</pre>
<div class="block">Transfer all the queues of the specified to this region server. First it tries to grab a lock
and if it works it will move the old queues and finally will delete the old queues.
<p>
@@ -1106,7 +1106,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>join</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.762">join</a>()</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.760">join</a>()</pre>
<div class="block">Terminate the replication on this region server</div>
</li>
</ul>
@@ -1116,7 +1116,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>getWALs</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource
Manager.html#line.774">getWALs</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource
Manager.html#line.772">getWALs</a>()</pre>
<div class="block">Get a copy of the wals of the normal sources on this rs</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -1130,7 +1130,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>getWalsByIdRecoveredQueues</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
#line.783">getWalsByIdRecoveredQueues</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>>>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
#line.781">getWalsByIdRecoveredQueues</a>()</pre>
<div class="block">Get a copy of the wals of the recovered sources on this rs</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -1144,7 +1144,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>getSources</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.791">getSources</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.789">getSources</a>()</pre>
<div class="block">Get a list of all the normal sources of this rs</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -1158,7 +1158,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>getOldSources</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.799">getOldSources</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.797">getOldSources</a>()</pre>
<div class="block">Get a list of all the recovered sources of this rs</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -1172,7 +1172,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>getSource</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.808">getSource</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.806">getSource</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)</pre>
<div class="block">Get the normal source for a given peer</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -1186,7 +1186,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>getAllQueues</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.813">getAllQueues</a>()
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.811">getAllQueues</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -1200,7 +1200,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>getSizeOfLatestPath</h4>
-<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.824">getSizeOfLatestPath</a>()</pre>
+<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.822">getSizeOfLatestPath</a>()</pre>
</li>
</ul>
<a name="getTotalBufferUsed--">
@@ -1209,7 +1209,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>getTotalBufferUsed</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.831">getTotalBufferUsed</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.829">getTotalBufferUsed</a>()</pre>
</li>
</ul>
<a name="getOldLogDir--">
@@ -1218,7 +1218,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>getOldLogDir</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.839">getOldLogDir</a>()</pre>
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.837">getOldLogDir</a>()</pre>
<div class="block">Get the directory where wals are archived</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -1232,7 +1232,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>getLogDir</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.847">getLogDir</a>()</pre>
+<pre>public org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.845">getLogDir</a>()</pre>
<div class="block">Get the directory where wals are stored by their RSs</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -1246,7 +1246,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>getFs</h4>
-<pre>public org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.855">getFs</a>()</pre>
+<pre>public org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.853">getFs</a>()</pre>
<div class="block">Get the handle on the local file system</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -1260,7 +1260,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>getReplicationPeers</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.863">getReplicationPeers</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.861">getReplicationPeers</a>()</pre>
<div class="block">Get the ReplicationPeers used by this ReplicationSourceManager</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -1274,7 +1274,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>getStats</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.870">getStats</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.868">getStats</a>()</pre>
<div class="block">Get a string representation of all the sources' metrics</div>
</li>
</ul>
@@ -1284,7 +1284,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>addHFileRefs</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.883">addHFileRefs</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.881">addHFileRefs</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
byte[] family,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path>> pairs)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1300,7 +1300,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockList">
<li class="blockList">
<h4>cleanUpHFileRefs</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.890">cleanUpHFileRefs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.888">cleanUpHFileRefs</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> files)</pre>
</li>
</ul>
@@ -1310,7 +1310,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<ul class="blockListLast">
<li class="blockList">
<h4>activeFailoverTaskCount</h4>
-<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.894">activeFailoverTaskCount</a>()</pre>
+<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.892">activeFailoverTaskCount</a>()</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/HBaseInterClusterReplicationEndpoint.Replicator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/HBaseInterClusterReplicationEndpoint.Replicator.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/HBaseInterClusterReplicationEndpoint.Replicator.html
deleted file mode 100644
index b53fdaf..0000000
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/HBaseInterClusterReplicationEndpoint.Replicator.html
+++ /dev/null
@@ -1,166 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
- try {
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator (Apache HBase 3.0.0-SNAPSHOT API)";
- }
- }
- catch(err) {
- }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/HBaseInterClusterReplicationEndpoint.Replicator.html" target="_top">Frames</a></li>
-<li><a href="HBaseInterClusterReplicationEndpoint.Replicator.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_top");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!-- -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator" class="title">Uses of Class<br>org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator</h2>
-</div>
-<div class="classUseContainer">
-<ul class="blockList">
-<li class="blockList">
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
-<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a></span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Package</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver</a></td>
-<td class="colLast"> </td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase.replication.regionserver">
-<!-- -->
-</a>
-<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a> in <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a> that return <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a></span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a></code></td>
-<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createReplicator-java.util.List-int-">createReplicator</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
- int ordinal)</code> </td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/HBaseInterClusterReplicationEndpoint.Replicator.html" target="_top">Frames</a></li>
-<li><a href="HBaseInterClusterReplicationEndpoint.Replicator.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_bottom");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!-- -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html
index 8ea2f54..1fa6e4d 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html
@@ -179,72 +179,72 @@
implementation for replicating to another HBase cluster.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HFileReplicator</a></td>
<td class="colLast">
<div class="block">It is used for replicating HFile entries.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationGlobalSourceSource</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSinkSourceImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSinkSourceImpl</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceFactoryImpl</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceImpl</a></td>
<td class="colLast">
<div class="block">Hadoop2 implementation of MetricsReplicationSource.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSourceImpl</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSink</a></td>
<td class="colLast">
<div class="block">This class is for maintaining the various replication statistics for a sink and publishing them
through the metrics interfaces.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a></td>
<td class="colLast">
<div class="block">This class is for maintaining the various replication statistics for a source and publishing them
through the metrics interfaces.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/PeerProcedureHandlerImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver">PeerProcedureHandlerImpl</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">RecoveredReplicationSource</a></td>
<td class="colLast">
<div class="block">Class that handles the recovered source of a replication stream, which is transfered from
another dead region server.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSourceShipper.html" title="class in org.apache.hadoop.hbase.replication.regionserver">RecoveredReplicationSourceShipper</a></td>
<td class="colLast">
<div class="block">Used by a <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><code>RecoveredReplicationSource</code></a>.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RefreshPeerCallable.html" title="class in org.apache.hadoop.hbase.replication.regionserver">RefreshPeerCallable</a></td>
<td class="colLast">
<div class="block">The callable executed at RS side to refresh the peer config/state.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">RegionReplicaReplicationEndpoint</a></td>
<td class="colLast">
<div class="block">A <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html" title="interface in org.apache.hadoop.hbase.replication"><code>ReplicationEndpoint</code></a> endpoint
@@ -252,49 +252,49 @@
of regions.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.RegionReplicaOutputSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">RegionReplicaReplicationEndpoint.RegionReplicaOutputSink</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.RegionReplicaReplayCallable.html" title="class in org.apache.hadoop.hbase.replication.regionserver">RegionReplicaReplicationEndpoint.RegionReplicaReplayCallable</a></td>
<td class="colLast">
<div class="block">Calls replay on the passed edits for the given set of entries belonging to the region.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.RegionReplicaSinkWriter.html" title="class in org.apache.hadoop.hbase.replication.regionserver">RegionReplicaReplicationEndpoint.RegionReplicaSinkWriter</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.RetryingRpcCallable.html" title="class in org.apache.hadoop.hbase.replication.regionserver">RegionReplicaReplicationEndpoint.RetryingRpcCallable</a><V></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></td>
<td class="colLast">
<div class="block">Gateway to Replication.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication.ReplicationStatisticsTask</a></td>
<td class="colLast">
<div class="block">Statistics task.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a></td>
<td class="colLast">
<div class="block">This class is used for exporting some of the info from replication metrics</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationObserver.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationObserver</a></td>
<td class="colLast">
<div class="block">An Observer to add HFile References to replication queue.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a></td>
<td class="colLast">
<div class="block">
@@ -302,71 +302,71 @@
from another cluster.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager</a></td>
<td class="colLast">
<div class="block">Maintains a collection of peers to replicate to, and randomly selects a
single peer to replicate to per set of data to replicate.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager.SinkPeer</a></td>
<td class="colLast">
<div class="block">Wraps a replication region server sink to provide the ability to identify
it.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSource</a></td>
<td class="colLast">
<div class="block">Class that handles the source of a replication stream.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSource.LogsComparator</a></td>
<td class="colLast">
<div class="block">Comparator used to compare logs together based on their start time</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceFactory.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceFactory</a></td>
<td class="colLast">
<div class="block">Constructs a <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver"><code>ReplicationSourceInterface</code></a></div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a></td>
<td class="colLast">
<div class="block">This class is responsible to manage all the replication sources.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper</a></td>
<td class="colLast">
<div class="block">This thread reads entries from a queue and ships them.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALActionListener.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALActionListener</a></td>
<td class="colLast">
<div class="block">Used to receive new wals.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a></td>
<td class="colLast">
<div class="block">Reads and filters WAL entries, groups the filtered entries into batches, and puts the batches
onto a queue</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSyncUp</a></td>
<td class="colLast">
<div class="block">In a scenario of Replication based Disaster/Recovery, when hbase Master-Cluster crashes, this
tool is used to sync-up the delta from Master to Slave using the info from ZooKeeper.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationThrottler</a></td>
<td class="colLast">
<div class="block">Per-peer per-node throttling controller for replication: enabled if
@@ -374,7 +374,7 @@
to peer within each cycle won't exceed 'bandwidth' bytes</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver">SerialReplicationChecker</a></td>
<td class="colLast">
<div class="block">
@@ -382,19 +382,19 @@
order.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SerialReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">SerialReplicationSourceWALReader</a></td>
<td class="colLast">
<div class="block">WAL reader for a serial replication peer.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a></td>
<td class="colLast">
<div class="block">Holds a batch of WAL entries to replicate, along with some statistics</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a></td>
<td class="colLast">
<div class="block">Streaming access to WAL entries.</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
index 5efcbb8..193a3a3032 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
@@ -110,7 +110,6 @@
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.DumpOptions.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">DumpReplicationQueues.DumpOptions</span></a></li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">DumpReplicationQueues.WarnOnlyAbortable</span></a> (implements org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a>)</li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">DumpReplicationQueues.WarnOnlyStoppable</span></a> (implements org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">HBaseInterClusterReplicationEndpoint.Replicator</span></a> (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><V>)</li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">HFileReplicator</span></a></li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.Copier.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">HFileReplicator.Copier</span></a> (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><V>)</li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationGlobalSourceSource</span></a> (implements org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a>)</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-use.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-use.html
index 2d19ce13..a9311b6 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-use.html
@@ -177,157 +177,154 @@
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/DumpReplicationQueues.DumpOptions.html#org.apache.hadoop.hbase.replication.regionserver">DumpReplicationQueues.DumpOptions</a> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/HBaseInterClusterReplicationEndpoint.Replicator.html#org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a> </td>
-</tr>
-<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/MetricsReplicationSinkSource.html#org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSinkSource</a> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/MetricsReplicationSource.html#org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSource</a>
<div class="block">Provides access to gauges and counters.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/MetricsReplicationSourceFactory.html#org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceFactory</a> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/MetricsReplicationSourceFactoryImpl.SourceHolder.html#org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceFactoryImpl.SourceHolder</a> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/MetricsReplicationSourceImpl.html#org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceImpl</a>
<div class="block">Hadoop2 implementation of MetricsReplicationSource.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/MetricsReplicationSourceSource.html#org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationSourceSource</a> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/MetricsSink.html#org.apache.hadoop.hbase.replication.regionserver">MetricsSink</a>
<div class="block">This class is for maintaining the various replication statistics for a sink and publishing them
through the metrics interfaces.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/MetricsSource.html#org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a>
<div class="block">This class is for maintaining the various replication statistics for a source and publishing them
through the metrics interfaces.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/PeerProcedureHandler.html#org.apache.hadoop.hbase.replication.regionserver">PeerProcedureHandler</a>
<div class="block">A handler for modifying replication peer in peer procedures.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/RecoveredReplicationSource.html#org.apache.hadoop.hbase.replication.regionserver">RecoveredReplicationSource</a>
<div class="block">Class that handles the recovered source of a replication stream, which is transfered from
another dead region server.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/RecoveredReplicationSourceShipper.html#org.apache.hadoop.hbase.replication.regionserver">RecoveredReplicationSourceShipper</a>
<div class="block">Used by a <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><code>RecoveredReplicationSource</code></a>.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/RegionReplicaReplicationEndpoint.RegionReplicaOutputSink.html#org.apache.hadoop.hbase.replication.regionserver">RegionReplicaReplicationEndpoint.RegionReplicaOutputSink</a> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/RegionReplicaReplicationEndpoint.RegionReplicaSinkWriter.html#org.apache.hadoop.hbase.replication.regionserver">RegionReplicaReplicationEndpoint.RegionReplicaSinkWriter</a> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationLoad.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a>
<div class="block">This class is used for exporting some of the info from replication metrics</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSink.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a>
<div class="block">
This class is responsible for replicating the edits coming
from another cluster.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSinkManager.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager</a>
<div class="block">Maintains a collection of peers to replicate to, and randomly selects a
single peer to replicate to per set of data to replicate.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSinkManager.SinkPeer.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager.SinkPeer</a>
<div class="block">Wraps a replication region server sink to provide the ability to identify
it.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSource.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSource</a>
<div class="block">Class that handles the source of a replication stream.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceInterface.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>
<div class="block">Interface that defines a replication source</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceManager.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a>
<div class="block">This class is responsible to manage all the replication sources.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceManager.ReplicationQueueOperation.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.ReplicationQueueOperation</a> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceShipper.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper</a>
<div class="block">This thread reads entries from a queue and ships them.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceShipper.WorkerState.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceWALReader.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a>
<div class="block">Reads and filters WAL entries, groups the filtered entries into batches, and puts the batches
onto a queue</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationThrottler.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationThrottler</a>
<div class="block">Per-peer per-node throttling controller for replication: enabled if
bandwidth > 0, a cycle = 100ms, by throttling we guarantee data pushed
to peer within each cycle won't exceed 'bandwidth' bytes</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/SerialReplicationChecker.html#org.apache.hadoop.hbase.replication.regionserver">SerialReplicationChecker</a>
<div class="block">
Helper class to determine whether we can push a given WAL entry without breaking the replication
order.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/SourceFSConfigurationProvider.html#org.apache.hadoop.hbase.replication.regionserver">SourceFSConfigurationProvider</a>
<div class="block">Interface that defines how a region server in peer cluster will get source cluster file system
configurations.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/WALEntryBatch.html#org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>
<div class="block">Holds a batch of WAL entries to replicate, along with some statistics</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/WALEntrySinkFilter.html#org.apache.hadoop.hbase.replication.regionserver">WALEntrySinkFilter</a>
<div class="block">Implementations are installed on a Replication Sink called from inside
ReplicationSink#replicateEntries to filter replicated WALEntries based off WALEntry attributes.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/WALEntryStream.html#org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>
<div class="block">Streaming access to WAL entries.</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/WALFileLengthProvider.html#org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a>
<div class="block">Used by replication to prevent replicating unacked log entries.</div>
</td>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index 034077c..c20ff47 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -110,8 +110,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index f6d74ff..5a7e325 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -137,9 +137,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
</ul>
</li>
</ul>
[45/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 67b7e3a..dfa02b5 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -191,9 +191,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/security/visibility/VisibilityReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/visibility/VisibilityReplicationEndpoint.html b/devapidocs/org/apache/hadoop/hbase/security/visibility/VisibilityReplicationEndpoint.html
index d0f87bf..29b4f34 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/visibility/VisibilityReplicationEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/visibility/VisibilityReplicationEndpoint.html
@@ -379,7 +379,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/replication/Replic
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - replication context</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - error occur when initialize the endpoint.</dd>
</dl>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 272b207..8e41b8e 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -198,8 +198,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftServerRunner.ImplType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
index 1adeadd..5fb98ee 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2057">HBaseFsck.CheckRegionConsistencyWorkItem</a>
+<pre>class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2069">HBaseFsck.CheckRegionConsistencyWorkItem</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>></pre>
</li>
@@ -211,7 +211,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockList">
<li class="blockList">
<h4>key</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html#line.2058">key</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html#line.2070">key</a></pre>
</li>
</ul>
<a name="hbi">
@@ -220,7 +220,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>hbi</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html#line.2059">hbi</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html#line.2071">hbi</a></pre>
</li>
</ul>
</li>
@@ -237,7 +237,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>CheckRegionConsistencyWorkItem</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html#line.2061">CheckRegionConsistencyWorkItem</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html#line.2073">CheckRegionConsistencyWorkItem</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> key,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hbi)</pre>
</li>
</ul>
@@ -255,7 +255,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>call</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html#line.2067">call</a>()
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html#line.2079">call</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
index 0a79330..55e73f4 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4118">HBaseFsck.ErrorReporter.ERROR_CODE</a>
+<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4130">HBaseFsck.ErrorReporter.ERROR_CODE</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>></pre>
</li>
</ul>
@@ -166,87 +166,90 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?i
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#HOLE_IN_REGION_CHAIN">HOLE_IN_REGION_CHAIN</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#LAST_REGION_ENDKEY_NOT_EMPTY">LAST_REGION_ENDKEY_NOT_EMPTY</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#INVALID_TABLE">INVALID_TABLE</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#LINGERING_HFILELINK">LINGERING_HFILELINK</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#LAST_REGION_ENDKEY_NOT_EMPTY">LAST_REGION_ENDKEY_NOT_EMPTY</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#LINGERING_REFERENCE_HFILE">LINGERING_REFERENCE_HFILE</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#LINGERING_HFILELINK">LINGERING_HFILELINK</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#LINGERING_SPLIT_PARENT">LINGERING_SPLIT_PARENT</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#LINGERING_REFERENCE_HFILE">LINGERING_REFERENCE_HFILE</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#MULTI_DEPLOYED">MULTI_DEPLOYED</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#LINGERING_SPLIT_PARENT">LINGERING_SPLIT_PARENT</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#MULTI_META_REGION">MULTI_META_REGION</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#MULTI_DEPLOYED">MULTI_DEPLOYED</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NO_META_REGION">NO_META_REGION</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#MULTI_META_REGION">MULTI_META_REGION</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NO_TABLE_STATE">NO_TABLE_STATE</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NO_META_REGION">NO_META_REGION</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NO_TABLEINFO_FILE">NO_TABLEINFO_FILE</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NO_TABLE_STATE">NO_TABLE_STATE</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NO_VERSION_FILE">NO_VERSION_FILE</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NO_TABLEINFO_FILE">NO_TABLEINFO_FILE</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NOT_DEPLOYED">NOT_DEPLOYED</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NO_VERSION_FILE">NO_VERSION_FILE</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NOT_IN_HDFS">NOT_IN_HDFS</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NOT_DEPLOYED">NOT_DEPLOYED</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NOT_IN_HDFS_OR_DEPLOYED">NOT_IN_HDFS_OR_DEPLOYED</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NOT_IN_HDFS">NOT_IN_HDFS</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NOT_IN_META">NOT_IN_META</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NOT_IN_HDFS_OR_DEPLOYED">NOT_IN_HDFS_OR_DEPLOYED</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NOT_IN_META_HDFS">NOT_IN_META_HDFS</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NOT_IN_META">NOT_IN_META</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NOT_IN_META_OR_DEPLOYED">NOT_IN_META_OR_DEPLOYED</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NOT_IN_META_HDFS">NOT_IN_META_HDFS</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NULL_META_REGION">NULL_META_REGION</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NOT_IN_META_OR_DEPLOYED">NOT_IN_META_OR_DEPLOYED</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#ORPHAN_HDFS_REGION">ORPHAN_HDFS_REGION</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#NULL_META_REGION">NULL_META_REGION</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#ORPHAN_TABLE_STATE">ORPHAN_TABLE_STATE</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#ORPHAN_HDFS_REGION">ORPHAN_HDFS_REGION</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#OVERLAP_IN_REGION_CHAIN">OVERLAP_IN_REGION_CHAIN</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#ORPHAN_TABLE_STATE">ORPHAN_TABLE_STATE</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#REGION_CYCLE">REGION_CYCLE</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#OVERLAP_IN_REGION_CHAIN">OVERLAP_IN_REGION_CHAIN</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#RS_CONNECT_FAILURE">RS_CONNECT_FAILURE</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#REGION_CYCLE">REGION_CYCLE</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#SERVER_DOES_NOT_MATCH_META">SERVER_DOES_NOT_MATCH_META</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#RS_CONNECT_FAILURE">RS_CONNECT_FAILURE</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#SHOULD_NOT_BE_DEPLOYED">SHOULD_NOT_BE_DEPLOYED</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#SERVER_DOES_NOT_MATCH_META">SERVER_DOES_NOT_MATCH_META</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#UNDELETED_REPLICATION_QUEUE">UNDELETED_REPLICATION_QUEUE</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#SHOULD_NOT_BE_DEPLOYED">SHOULD_NOT_BE_DEPLOYED</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#UNKNOWN">UNKNOWN</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#UNDELETED_REPLICATION_QUEUE">UNDELETED_REPLICATION_QUEUE</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#UNSUPPORTED_OPTION">UNSUPPORTED_OPTION</a></span></code> </td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#UNKNOWN">UNKNOWN</a></span></code> </td>
</tr>
<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#UNSUPPORTED_OPTION">UNSUPPORTED_OPTION</a></span></code> </td>
+</tr>
+<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#WRONG_USAGE">WRONG_USAGE</a></span></code> </td>
</tr>
</table>
@@ -312,7 +315,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>UNKNOWN</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4119">UNKNOWN</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4131">UNKNOWN</a></pre>
</li>
</ul>
<a name="NO_META_REGION">
@@ -321,7 +324,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>NO_META_REGION</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4119">NO_META_REGION</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4131">NO_META_REGION</a></pre>
</li>
</ul>
<a name="NULL_META_REGION">
@@ -330,7 +333,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>NULL_META_REGION</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4119">NULL_META_REGION</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4131">NULL_META_REGION</a></pre>
</li>
</ul>
<a name="NO_VERSION_FILE">
@@ -339,7 +342,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>NO_VERSION_FILE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4119">NO_VERSION_FILE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4131">NO_VERSION_FILE</a></pre>
</li>
</ul>
<a name="NOT_IN_META_HDFS">
@@ -348,7 +351,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>NOT_IN_META_HDFS</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4119">NOT_IN_META_HDFS</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4131">NOT_IN_META_HDFS</a></pre>
</li>
</ul>
<a name="NOT_IN_META">
@@ -357,7 +360,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>NOT_IN_META</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4119">NOT_IN_META</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4131">NOT_IN_META</a></pre>
</li>
</ul>
<a name="NOT_IN_META_OR_DEPLOYED">
@@ -366,7 +369,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>NOT_IN_META_OR_DEPLOYED</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4120">NOT_IN_META_OR_DEPLOYED</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4132">NOT_IN_META_OR_DEPLOYED</a></pre>
</li>
</ul>
<a name="NOT_IN_HDFS_OR_DEPLOYED">
@@ -375,7 +378,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>NOT_IN_HDFS_OR_DEPLOYED</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4120">NOT_IN_HDFS_OR_DEPLOYED</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4132">NOT_IN_HDFS_OR_DEPLOYED</a></pre>
</li>
</ul>
<a name="NOT_IN_HDFS">
@@ -384,7 +387,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>NOT_IN_HDFS</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4120">NOT_IN_HDFS</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4132">NOT_IN_HDFS</a></pre>
</li>
</ul>
<a name="SERVER_DOES_NOT_MATCH_META">
@@ -393,7 +396,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>SERVER_DOES_NOT_MATCH_META</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4120">SERVER_DOES_NOT_MATCH_META</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4132">SERVER_DOES_NOT_MATCH_META</a></pre>
</li>
</ul>
<a name="NOT_DEPLOYED">
@@ -402,7 +405,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>NOT_DEPLOYED</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4121">NOT_DEPLOYED</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4133">NOT_DEPLOYED</a></pre>
</li>
</ul>
<a name="MULTI_DEPLOYED">
@@ -411,7 +414,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>MULTI_DEPLOYED</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4122">MULTI_DEPLOYED</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4133">MULTI_DEPLOYED</a></pre>
</li>
</ul>
<a name="SHOULD_NOT_BE_DEPLOYED">
@@ -420,7 +423,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>SHOULD_NOT_BE_DEPLOYED</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4122">SHOULD_NOT_BE_DEPLOYED</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4133">SHOULD_NOT_BE_DEPLOYED</a></pre>
</li>
</ul>
<a name="MULTI_META_REGION">
@@ -429,7 +432,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>MULTI_META_REGION</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4122">MULTI_META_REGION</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4133">MULTI_META_REGION</a></pre>
</li>
</ul>
<a name="RS_CONNECT_FAILURE">
@@ -438,7 +441,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>RS_CONNECT_FAILURE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4122">RS_CONNECT_FAILURE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4133">RS_CONNECT_FAILURE</a></pre>
</li>
</ul>
<a name="FIRST_REGION_STARTKEY_NOT_EMPTY">
@@ -447,7 +450,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>FIRST_REGION_STARTKEY_NOT_EMPTY</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4123">FIRST_REGION_STARTKEY_NOT_EMPTY</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4134">FIRST_REGION_STARTKEY_NOT_EMPTY</a></pre>
</li>
</ul>
<a name="LAST_REGION_ENDKEY_NOT_EMPTY">
@@ -456,7 +459,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>LAST_REGION_ENDKEY_NOT_EMPTY</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4123">LAST_REGION_ENDKEY_NOT_EMPTY</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4134">LAST_REGION_ENDKEY_NOT_EMPTY</a></pre>
</li>
</ul>
<a name="DUPE_STARTKEYS">
@@ -465,7 +468,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>DUPE_STARTKEYS</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4123">DUPE_STARTKEYS</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4134">DUPE_STARTKEYS</a></pre>
</li>
</ul>
<a name="HOLE_IN_REGION_CHAIN">
@@ -474,7 +477,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>HOLE_IN_REGION_CHAIN</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4124">HOLE_IN_REGION_CHAIN</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4135">HOLE_IN_REGION_CHAIN</a></pre>
</li>
</ul>
<a name="OVERLAP_IN_REGION_CHAIN">
@@ -483,7 +486,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>OVERLAP_IN_REGION_CHAIN</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4124">OVERLAP_IN_REGION_CHAIN</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4135">OVERLAP_IN_REGION_CHAIN</a></pre>
</li>
</ul>
<a name="REGION_CYCLE">
@@ -492,7 +495,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>REGION_CYCLE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4124">REGION_CYCLE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4135">REGION_CYCLE</a></pre>
</li>
</ul>
<a name="DEGENERATE_REGION">
@@ -501,7 +504,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>DEGENERATE_REGION</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4124">DEGENERATE_REGION</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4135">DEGENERATE_REGION</a></pre>
</li>
</ul>
<a name="ORPHAN_HDFS_REGION">
@@ -510,7 +513,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>ORPHAN_HDFS_REGION</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4125">ORPHAN_HDFS_REGION</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4136">ORPHAN_HDFS_REGION</a></pre>
</li>
</ul>
<a name="LINGERING_SPLIT_PARENT">
@@ -519,7 +522,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>LINGERING_SPLIT_PARENT</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4125">LINGERING_SPLIT_PARENT</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4136">LINGERING_SPLIT_PARENT</a></pre>
</li>
</ul>
<a name="NO_TABLEINFO_FILE">
@@ -528,7 +531,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>NO_TABLEINFO_FILE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4125">NO_TABLEINFO_FILE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4136">NO_TABLEINFO_FILE</a></pre>
</li>
</ul>
<a name="LINGERING_REFERENCE_HFILE">
@@ -537,7 +540,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>LINGERING_REFERENCE_HFILE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4125">LINGERING_REFERENCE_HFILE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4136">LINGERING_REFERENCE_HFILE</a></pre>
</li>
</ul>
<a name="LINGERING_HFILELINK">
@@ -546,7 +549,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>LINGERING_HFILELINK</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4126">LINGERING_HFILELINK</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4137">LINGERING_HFILELINK</a></pre>
</li>
</ul>
<a name="WRONG_USAGE">
@@ -555,7 +558,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>WRONG_USAGE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4126">WRONG_USAGE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4137">WRONG_USAGE</a></pre>
</li>
</ul>
<a name="EMPTY_META_CELL">
@@ -564,7 +567,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>EMPTY_META_CELL</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4126">EMPTY_META_CELL</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4137">EMPTY_META_CELL</a></pre>
</li>
</ul>
<a name="EXPIRED_TABLE_LOCK">
@@ -573,7 +576,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>EXPIRED_TABLE_LOCK</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4126">EXPIRED_TABLE_LOCK</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4137">EXPIRED_TABLE_LOCK</a></pre>
</li>
</ul>
<a name="BOUNDARIES_ERROR">
@@ -582,7 +585,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>BOUNDARIES_ERROR</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4126">BOUNDARIES_ERROR</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4137">BOUNDARIES_ERROR</a></pre>
</li>
</ul>
<a name="ORPHAN_TABLE_STATE">
@@ -591,7 +594,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>ORPHAN_TABLE_STATE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4127">ORPHAN_TABLE_STATE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4138">ORPHAN_TABLE_STATE</a></pre>
</li>
</ul>
<a name="NO_TABLE_STATE">
@@ -600,7 +603,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>NO_TABLE_STATE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4127">NO_TABLE_STATE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4138">NO_TABLE_STATE</a></pre>
</li>
</ul>
<a name="UNDELETED_REPLICATION_QUEUE">
@@ -609,7 +612,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>UNDELETED_REPLICATION_QUEUE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4127">UNDELETED_REPLICATION_QUEUE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4138">UNDELETED_REPLICATION_QUEUE</a></pre>
</li>
</ul>
<a name="DUPE_ENDKEYS">
@@ -618,16 +621,25 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>DUPE_ENDKEYS</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4127">DUPE_ENDKEYS</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4138">DUPE_ENDKEYS</a></pre>
</li>
</ul>
<a name="UNSUPPORTED_OPTION">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
<h4>UNSUPPORTED_OPTION</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4128">UNSUPPORTED_OPTION</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4139">UNSUPPORTED_OPTION</a></pre>
+</li>
+</ul>
+<a name="INVALID_TABLE">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>INVALID_TABLE</h4>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.4139">INVALID_TABLE</a></pre>
</li>
</ul>
</li>
@@ -644,7 +656,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>values</h4>
-<pre>public static <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.3842">values</a>()</pre>
+<pre>public static <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.3854">values</a>()</pre>
<div class="block">Returns an array containing the constants of this enum type, in
the order they are declared. This method may be used to iterate
over the constants as follows:
@@ -664,7 +676,7 @@ for (HBaseFsck.ErrorReporter.ERROR_CODE c : HBaseFsck.ErrorReporter.ERROR_CODE.v
<ul class="blockListLast">
<li class="blockList">
<h4>valueOf</h4>
-<pre>public static <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.3842">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</pre>
+<pre>public static <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.3854">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</pre>
<div class="block">Returns the enum constant of this type with the specified name.
The string must match <i>exactly</i> an identifier used to declare an
enum constant in this type. (Extraneous whitespace characters are
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
index d3d2c95..09c8ba2 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4117">HBaseFsck.ErrorReporter</a></pre>
+<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4129">HBaseFsck.ErrorReporter</a></pre>
</li>
</ul>
</div>
@@ -234,7 +234,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>clear</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4130">clear</a>()</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4141">clear</a>()</pre>
</li>
</ul>
<a name="report-java.lang.String-">
@@ -243,7 +243,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>report</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4131">report</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4142">report</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
</li>
</ul>
<a name="reportError-java.lang.String-">
@@ -252,7 +252,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>reportError</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4132">reportError</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4143">reportError</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
</li>
</ul>
<a name="reportError-org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE-java.lang.String-">
@@ -261,7 +261,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>reportError</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4133">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4144">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
</li>
</ul>
@@ -271,7 +271,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>reportError</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4134">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4145">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a> table)</pre>
</li>
@@ -282,7 +282,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>reportError</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4135">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4146">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a> table,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> info)</pre>
@@ -294,7 +294,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>reportError</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4136">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4147">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a> table,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> info1,
@@ -307,7 +307,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>summarize</h4>
-<pre>int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4143">summarize</a>()</pre>
+<pre>int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4154">summarize</a>()</pre>
</li>
</ul>
<a name="detail-java.lang.String-">
@@ -316,7 +316,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>detail</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4144">detail</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> details)</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4155">detail</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> details)</pre>
</li>
</ul>
<a name="getErrorList--">
@@ -325,7 +325,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>getErrorList</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4145">getErrorList</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4156">getErrorList</a>()</pre>
</li>
</ul>
<a name="progress--">
@@ -334,7 +334,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>progress</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4146">progress</a>()</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4157">progress</a>()</pre>
</li>
</ul>
<a name="print-java.lang.String-">
@@ -343,7 +343,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>print</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4147">print</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4158">print</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
</li>
</ul>
<a name="resetErrors--">
@@ -352,7 +352,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<h4>resetErrors</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4148">resetErrors</a>()</pre>
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4159">resetErrors</a>()</pre>
</li>
</ul>
<a name="tableHasErrors-org.apache.hadoop.hbase.util.HBaseFsck.TableInfo-">
@@ -361,7 +361,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockListLast">
<li class="blockList">
<h4>tableHasErrors</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4149">tableHasErrors</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a> table)</pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4160">tableHasErrors</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a> table)</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
index 1d97ed8..b6f87f8 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.379">HBaseFsck.FileLockCallable</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.389">HBaseFsck.FileLockCallable</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><org.apache.hadoop.fs.FSDataOutputStream></pre>
</li>
@@ -212,7 +212,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>retryCounter</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html#line.380">retryCounter</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html#line.390">retryCounter</a></pre>
</li>
</ul>
</li>
@@ -229,7 +229,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>FileLockCallable</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html#line.382">FileLockCallable</a>(<a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> retryCounter)</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html#line.392">FileLockCallable</a>(<a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> retryCounter)</pre>
</li>
</ul>
</li>
@@ -246,7 +246,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockList">
<li class="blockList">
<h4>call</h4>
-<pre>public org.apache.hadoop.fs.FSDataOutputStream <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html#line.386">call</a>()
+<pre>public org.apache.hadoop.fs.FSDataOutputStream <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html#line.396">call</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -262,7 +262,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurre
<ul class="blockListLast">
<li class="blockList">
<h4>createFileWithRetries</h4>
-<pre>private org.apache.hadoop.fs.FSDataOutputStream <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html#line.407">createFileWithRetries</a>(org.apache.hadoop.fs.FileSystem fs,
+<pre>private org.apache.hadoop.fs.FSDataOutputStream <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html#line.417">createFileWithRetries</a>(org.apache.hadoop.fs.FileSystem fs,
org.apache.hadoop.fs.Path hbckLockFilePath,
org.apache.hadoop.fs.permission.FsPermission defaultPerms)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
index e5088ab..74fd1fe 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4878">HBaseFsck.HBaseFsckTool</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4897">HBaseFsck.HBaseFsckTool</a>
extends org.apache.hadoop.conf.Configured
implements org.apache.hadoop.util.Tool</pre>
<div class="block">This is a Tool wrapper that gathers -Dxxx=yyy configuration settings from the command line.</div>
@@ -207,7 +207,7 @@ implements org.apache.hadoop.util.Tool</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>HBaseFsckTool</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html#line.4879">HBaseFsckTool</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html#line.4898">HBaseFsckTool</a>(org.apache.hadoop.conf.Configuration conf)</pre>
</li>
</ul>
</li>
@@ -224,7 +224,7 @@ implements org.apache.hadoop.util.Tool</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>run</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html#line.4881">run</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html#line.4900">run</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
[05/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
index 7a938de..43a87b6 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
@@ -33,539 +33,515 @@
<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.util.List;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.util.UUID;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.Cell;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.Waiter;<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.RegionInfo;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.Table;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.junit.AfterClass;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.junit.Assert;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.junit.Before;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.BeforeClass;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.ClassRule;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Test;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.experimental.categories.Category;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.65"></a>
-<span class="sourceLineNo">066</span> */<a name="line.66"></a>
-<span class="sourceLineNo">067</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.67"></a>
-<span class="sourceLineNo">068</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span> @ClassRule<a name="line.70"></a>
-<span class="sourceLineNo">071</span> public static final HBaseClassTestRule CLASS_RULE =<a name="line.71"></a>
-<span class="sourceLineNo">072</span> HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span> private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span> static int numRegionServers;<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span> @BeforeClass<a name="line.78"></a>
-<span class="sourceLineNo">079</span> public static void setUpBeforeClass() throws Exception {<a name="line.79"></a>
-<span class="sourceLineNo">080</span> TestReplicationBase.setUpBeforeClass();<a name="line.80"></a>
-<span class="sourceLineNo">081</span> numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<a name="line.81"></a>
-<span class="sourceLineNo">082</span> }<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span> @AfterClass<a name="line.84"></a>
-<span class="sourceLineNo">085</span> public static void tearDownAfterClass() throws Exception {<a name="line.85"></a>
-<span class="sourceLineNo">086</span> TestReplicationBase.tearDownAfterClass();<a name="line.86"></a>
-<span class="sourceLineNo">087</span> // check stop is called<a name="line.87"></a>
-<span class="sourceLineNo">088</span> Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() > 0);<a name="line.88"></a>
-<span class="sourceLineNo">089</span> }<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> @Before<a name="line.91"></a>
-<span class="sourceLineNo">092</span> public void setup() throws Exception {<a name="line.92"></a>
-<span class="sourceLineNo">093</span> ReplicationEndpointForTest.contructedCount.set(0);<a name="line.93"></a>
-<span class="sourceLineNo">094</span> ReplicationEndpointForTest.startedCount.set(0);<a name="line.94"></a>
-<span class="sourceLineNo">095</span> ReplicationEndpointForTest.replicateCount.set(0);<a name="line.95"></a>
-<span class="sourceLineNo">096</span> ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.96"></a>
-<span class="sourceLineNo">097</span> ReplicationEndpointForTest.lastEntries = null;<a name="line.97"></a>
-<span class="sourceLineNo">098</span> final List<RegionServerThread> rsThreads =<a name="line.98"></a>
-<span class="sourceLineNo">099</span> utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.99"></a>
-<span class="sourceLineNo">100</span> for (RegionServerThread rs : rsThreads) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span> utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.101"></a>
-<span class="sourceLineNo">102</span> }<a name="line.102"></a>
-<span class="sourceLineNo">103</span> // Wait for all log roll to finish<a name="line.103"></a>
-<span class="sourceLineNo">104</span> utility1.waitFor(3000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.104"></a>
-<span class="sourceLineNo">105</span> @Override<a name="line.105"></a>
-<span class="sourceLineNo">106</span> public boolean evaluate() throws Exception {<a name="line.106"></a>
-<span class="sourceLineNo">107</span> for (RegionServerThread rs : rsThreads) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> return false;<a name="line.109"></a>
-<span class="sourceLineNo">110</span> }<a name="line.110"></a>
-<span class="sourceLineNo">111</span> }<a name="line.111"></a>
-<span class="sourceLineNo">112</span> return true;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span> @Override<a name="line.115"></a>
-<span class="sourceLineNo">116</span> public String explainFailure() throws Exception {<a name="line.116"></a>
-<span class="sourceLineNo">117</span> List<String> logRollInProgressRsList = new ArrayList<>();<a name="line.117"></a>
-<span class="sourceLineNo">118</span> for (RegionServerThread rs : rsThreads) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span> logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.120"></a>
-<span class="sourceLineNo">121</span> }<a name="line.121"></a>
-<span class="sourceLineNo">122</span> }<a name="line.122"></a>
-<span class="sourceLineNo">123</span> return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<a name="line.123"></a>
-<span class="sourceLineNo">124</span> }<a name="line.124"></a>
-<span class="sourceLineNo">125</span> });<a name="line.125"></a>
-<span class="sourceLineNo">126</span> }<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span> @Test<a name="line.128"></a>
-<span class="sourceLineNo">129</span> public void testCustomReplicationEndpoint() throws Exception {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> // test installing a custom replication endpoint other than the default one.<a name="line.130"></a>
-<span class="sourceLineNo">131</span> admin.addPeer("testCustomReplicationEndpoint",<a name="line.131"></a>
-<span class="sourceLineNo">132</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.132"></a>
-<span class="sourceLineNo">133</span> .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span> // check whether the class has been constructed and started<a name="line.135"></a>
-<span class="sourceLineNo">136</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> @Override<a name="line.137"></a>
-<span class="sourceLineNo">138</span> public boolean evaluate() throws Exception {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> return ReplicationEndpointForTest.contructedCount.get() >= numRegionServers;<a name="line.139"></a>
-<span class="sourceLineNo">140</span> }<a name="line.140"></a>
-<span class="sourceLineNo">141</span> });<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span> @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span> public boolean evaluate() throws Exception {<a name="line.145"></a>
-<span class="sourceLineNo">146</span> return ReplicationEndpointForTest.startedCount.get() >= numRegionServers;<a name="line.146"></a>
-<span class="sourceLineNo">147</span> }<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> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span> // now replicate some data.<a name="line.152"></a>
-<span class="sourceLineNo">153</span> doPut(Bytes.toBytes("row42"));<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span> public boolean evaluate() throws Exception {<a name="line.157"></a>
-<span class="sourceLineNo">158</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.158"></a>
-<span class="sourceLineNo">159</span> }<a name="line.159"></a>
-<span class="sourceLineNo">160</span> });<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span> doAssert(Bytes.toBytes("row42"));<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span> admin.removePeer("testCustomReplicationEndpoint");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span> @Test<a name="line.167"></a>
-<span class="sourceLineNo">168</span> public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.168"></a>
-<span class="sourceLineNo">169</span> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.169"></a>
-<span class="sourceLineNo">170</span> Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.170"></a>
-<span class="sourceLineNo">171</span> int peerCount = admin.getPeersCount();<a name="line.171"></a>
-<span class="sourceLineNo">172</span> final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.172"></a>
-<span class="sourceLineNo">173</span> admin.addPeer(id,<a name="line.173"></a>
-<span class="sourceLineNo">174</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.174"></a>
-<span class="sourceLineNo">175</span> .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.175"></a>
-<span class="sourceLineNo">176</span> // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.176"></a>
-<span class="sourceLineNo">177</span> // debug. Peer needs to be up for the edit to make it across. This wait on<a name="line.177"></a>
-<span class="sourceLineNo">178</span> // peer count seems to be a hack that has us not progress till peer is up.<a name="line.178"></a>
-<span class="sourceLineNo">179</span> if (admin.getPeersCount() <= peerCount) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> Threads.sleep(100);<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> // now replicate some data<a name="line.183"></a>
-<span class="sourceLineNo">184</span> doPut(row);<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.186"></a>
-<span class="sourceLineNo">187</span> @Override<a name="line.187"></a>
-<span class="sourceLineNo">188</span> public boolean evaluate() throws Exception {<a name="line.188"></a>
-<span class="sourceLineNo">189</span> // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.189"></a>
-<span class="sourceLineNo">190</span> // only send over one edit.<a name="line.190"></a>
-<span class="sourceLineNo">191</span> int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.191"></a>
-<span class="sourceLineNo">192</span> LOG.info("count=" + count);<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return ReplicationEndpointReturningFalse.replicated.get();<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span> });<a name="line.195"></a>
-<span class="sourceLineNo">196</span> if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span> throw ReplicationEndpointReturningFalse.ex.get();<a name="line.197"></a>
-<span class="sourceLineNo">198</span> }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span> admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<a name="line.200"></a>
-<span class="sourceLineNo">201</span> }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span> @Test<a name="line.203"></a>
-<span class="sourceLineNo">204</span> public void testInterClusterReplication() throws Exception {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> final String id = "testInterClusterReplication";<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span> List<HRegion> regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.207"></a>
-<span class="sourceLineNo">208</span> int totEdits = 0;<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> // Make sure edits are spread across regions because we do region based batching<a name="line.210"></a>
-<span class="sourceLineNo">211</span> // before shipping edits.<a name="line.211"></a>
-<span class="sourceLineNo">212</span> for(HRegion region: regions) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span> RegionInfo hri = region.getRegionInfo();<a name="line.213"></a>
-<span class="sourceLineNo">214</span> byte[] row = hri.getStartKey();<a name="line.214"></a>
-<span class="sourceLineNo">215</span> for (int i = 0; i < 100; i++) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span> if (row.length > 0) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span> Put put = new Put(row);<a name="line.217"></a>
-<span class="sourceLineNo">218</span> put.addColumn(famName, row, row);<a name="line.218"></a>
-<span class="sourceLineNo">219</span> region.put(put);<a name="line.219"></a>
-<span class="sourceLineNo">220</span> totEdits++;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> }<a name="line.221"></a>
-<span class="sourceLineNo">222</span> }<a name="line.222"></a>
-<span class="sourceLineNo">223</span> }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> admin.addPeer(id,<a name="line.225"></a>
-<span class="sourceLineNo">226</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.226"></a>
-<span class="sourceLineNo">227</span> .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.227"></a>
-<span class="sourceLineNo">228</span> null);<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span> final int numEdits = totEdits;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.231"></a>
-<span class="sourceLineNo">232</span> @Override<a name="line.232"></a>
-<span class="sourceLineNo">233</span> public boolean evaluate() throws Exception {<a name="line.233"></a>
-<span class="sourceLineNo">234</span> return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> }<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span> @Override<a name="line.237"></a>
-<span class="sourceLineNo">238</span> public String explainFailure() throws Exception {<a name="line.238"></a>
-<span class="sourceLineNo">239</span> String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.239"></a>
-<span class="sourceLineNo">240</span> + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return failure;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span> });<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> admin.removePeer("testInterClusterReplication");<a name="line.245"></a>
-<span class="sourceLineNo">246</span> utility1.deleteTableData(tableName);<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> @Test<a name="line.249"></a>
-<span class="sourceLineNo">250</span> public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.250"></a>
-<span class="sourceLineNo">251</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.251"></a>
-<span class="sourceLineNo">252</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.252"></a>
-<span class="sourceLineNo">253</span> //test that we can create mutliple WALFilters reflectively<a name="line.253"></a>
-<span class="sourceLineNo">254</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.254"></a>
-<span class="sourceLineNo">255</span> EverythingPassesWALEntryFilter.class.getName() +<a name="line.255"></a>
-<span class="sourceLineNo">256</span> "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.256"></a>
-<span class="sourceLineNo">257</span> admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.257"></a>
-<span class="sourceLineNo">258</span> // now replicate some data.<a name="line.258"></a>
-<span class="sourceLineNo">259</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> doPut(connection, Bytes.toBytes("row1"));<a name="line.260"></a>
-<span class="sourceLineNo">261</span> doPut(connection, row);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> doPut(connection, Bytes.toBytes("row2"));<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
-<span class="sourceLineNo">267</span> public boolean evaluate() throws Exception {<a name="line.267"></a>
-<span class="sourceLineNo">268</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.268"></a>
-<span class="sourceLineNo">269</span> }<a name="line.269"></a>
-<span class="sourceLineNo">270</span> });<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span> Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.272"></a>
-<span class="sourceLineNo">273</span> //make sure our reflectively created filter is in the filter chain<a name="line.273"></a>
-<span class="sourceLineNo">274</span> Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.274"></a>
-<span class="sourceLineNo">275</span> admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<a name="line.275"></a>
-<span class="sourceLineNo">276</span> }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span> @Test (expected=IOException.class)<a name="line.278"></a>
-<span class="sourceLineNo">279</span> public void testWALEntryFilterAddValidation() throws Exception {<a name="line.279"></a>
-<span class="sourceLineNo">280</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.280"></a>
-<span class="sourceLineNo">281</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.281"></a>
-<span class="sourceLineNo">282</span> //test that we can create mutliple WALFilters reflectively<a name="line.282"></a>
-<span class="sourceLineNo">283</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.283"></a>
-<span class="sourceLineNo">284</span> "IAmNotARealWalEntryFilter");<a name="line.284"></a>
-<span class="sourceLineNo">285</span> admin.addPeer("testWALEntryFilterAddValidation", rpc);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> @Test (expected=IOException.class)<a name="line.288"></a>
-<span class="sourceLineNo">289</span> public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.289"></a>
-<span class="sourceLineNo">290</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.290"></a>
-<span class="sourceLineNo">291</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.291"></a>
-<span class="sourceLineNo">292</span> //test that we can create mutliple WALFilters reflectively<a name="line.292"></a>
-<span class="sourceLineNo">293</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.293"></a>
-<span class="sourceLineNo">294</span> "IAmNotARealWalEntryFilter");<a name="line.294"></a>
-<span class="sourceLineNo">295</span> admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.295"></a>
-<span class="sourceLineNo">296</span> }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">028</span>import java.util.concurrent.Callable;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.Cell;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.Waiter;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Put;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Table;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.junit.AfterClass;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.junit.Assert;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.junit.Before;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.junit.BeforeClass;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.junit.ClassRule;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.junit.Test;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.experimental.categories.Category;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.Logger;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.slf4j.LoggerFactory;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>/**<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.66"></a>
+<span class="sourceLineNo">067</span> */<a name="line.67"></a>
+<span class="sourceLineNo">068</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.68"></a>
+<span class="sourceLineNo">069</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span> @ClassRule<a name="line.71"></a>
+<span class="sourceLineNo">072</span> public static final HBaseClassTestRule CLASS_RULE =<a name="line.72"></a>
+<span class="sourceLineNo">073</span> HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span> private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span> static int numRegionServers;<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span> @BeforeClass<a name="line.79"></a>
+<span class="sourceLineNo">080</span> public static void setUpBeforeClass() throws Exception {<a name="line.80"></a>
+<span class="sourceLineNo">081</span> TestReplicationBase.setUpBeforeClass();<a name="line.81"></a>
+<span class="sourceLineNo">082</span> numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<a name="line.82"></a>
+<span class="sourceLineNo">083</span> }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span> @AfterClass<a name="line.85"></a>
+<span class="sourceLineNo">086</span> public static void tearDownAfterClass() throws Exception {<a name="line.86"></a>
+<span class="sourceLineNo">087</span> TestReplicationBase.tearDownAfterClass();<a name="line.87"></a>
+<span class="sourceLineNo">088</span> // check stop is called<a name="line.88"></a>
+<span class="sourceLineNo">089</span> Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() > 0);<a name="line.89"></a>
+<span class="sourceLineNo">090</span> }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span> @Before<a name="line.92"></a>
+<span class="sourceLineNo">093</span> public void setup() throws Exception {<a name="line.93"></a>
+<span class="sourceLineNo">094</span> ReplicationEndpointForTest.contructedCount.set(0);<a name="line.94"></a>
+<span class="sourceLineNo">095</span> ReplicationEndpointForTest.startedCount.set(0);<a name="line.95"></a>
+<span class="sourceLineNo">096</span> ReplicationEndpointForTest.replicateCount.set(0);<a name="line.96"></a>
+<span class="sourceLineNo">097</span> ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.97"></a>
+<span class="sourceLineNo">098</span> ReplicationEndpointForTest.lastEntries = null;<a name="line.98"></a>
+<span class="sourceLineNo">099</span> final List<RegionServerThread> rsThreads =<a name="line.99"></a>
+<span class="sourceLineNo">100</span> utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.100"></a>
+<span class="sourceLineNo">101</span> for (RegionServerThread rs : rsThreads) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span> utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.102"></a>
+<span class="sourceLineNo">103</span> }<a name="line.103"></a>
+<span class="sourceLineNo">104</span> // Wait for all log roll to finish<a name="line.104"></a>
+<span class="sourceLineNo">105</span> utility1.waitFor(3000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.105"></a>
+<span class="sourceLineNo">106</span> @Override<a name="line.106"></a>
+<span class="sourceLineNo">107</span> public boolean evaluate() throws Exception {<a name="line.107"></a>
+<span class="sourceLineNo">108</span> for (RegionServerThread rs : rsThreads) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span> return false;<a name="line.110"></a>
+<span class="sourceLineNo">111</span> }<a name="line.111"></a>
+<span class="sourceLineNo">112</span> }<a name="line.112"></a>
+<span class="sourceLineNo">113</span> return true;<a name="line.113"></a>
+<span class="sourceLineNo">114</span> }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> @Override<a name="line.116"></a>
+<span class="sourceLineNo">117</span> public String explainFailure() throws Exception {<a name="line.117"></a>
+<span class="sourceLineNo">118</span> List<String> logRollInProgressRsList = new ArrayList<>();<a name="line.118"></a>
+<span class="sourceLineNo">119</span> for (RegionServerThread rs : rsThreads) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span> logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.121"></a>
+<span class="sourceLineNo">122</span> }<a name="line.122"></a>
+<span class="sourceLineNo">123</span> }<a name="line.123"></a>
+<span class="sourceLineNo">124</span> return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<a name="line.124"></a>
+<span class="sourceLineNo">125</span> }<a name="line.125"></a>
+<span class="sourceLineNo">126</span> });<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> @Test<a name="line.129"></a>
+<span class="sourceLineNo">130</span> public void testCustomReplicationEndpoint() throws Exception {<a name="line.130"></a>
+<span class="sourceLineNo">131</span> // test installing a custom replication endpoint other than the default one.<a name="line.131"></a>
+<span class="sourceLineNo">132</span> admin.addPeer("testCustomReplicationEndpoint",<a name="line.132"></a>
+<span class="sourceLineNo">133</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.133"></a>
+<span class="sourceLineNo">134</span> .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span> // check whether the class has been constructed and started<a name="line.136"></a>
+<span class="sourceLineNo">137</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.137"></a>
+<span class="sourceLineNo">138</span> @Override<a name="line.138"></a>
+<span class="sourceLineNo">139</span> public boolean evaluate() throws Exception {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> return ReplicationEndpointForTest.contructedCount.get() >= numRegionServers;<a name="line.140"></a>
+<span class="sourceLineNo">141</span> }<a name="line.141"></a>
+<span class="sourceLineNo">142</span> });<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span> @Override<a name="line.145"></a>
+<span class="sourceLineNo">146</span> public boolean evaluate() throws Exception {<a name="line.146"></a>
+<span class="sourceLineNo">147</span> return ReplicationEndpointForTest.startedCount.get() >= numRegionServers;<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><a name="line.150"></a>
+<span class="sourceLineNo">151</span> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span> // now replicate some data.<a name="line.153"></a>
+<span class="sourceLineNo">154</span> doPut(Bytes.toBytes("row42"));<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span> public boolean evaluate() throws Exception {<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<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> doAssert(Bytes.toBytes("row42"));<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span> admin.removePeer("testCustomReplicationEndpoint");<a name="line.165"></a>
+<span class="sourceLineNo">166</span> }<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span> @Test<a name="line.168"></a>
+<span class="sourceLineNo">169</span> public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.169"></a>
+<span class="sourceLineNo">170</span> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.170"></a>
+<span class="sourceLineNo">171</span> Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.171"></a>
+<span class="sourceLineNo">172</span> int peerCount = admin.getPeersCount();<a name="line.172"></a>
+<span class="sourceLineNo">173</span> final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.173"></a>
+<span class="sourceLineNo">174</span> admin.addPeer(id,<a name="line.174"></a>
+<span class="sourceLineNo">175</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.175"></a>
+<span class="sourceLineNo">176</span> .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.176"></a>
+<span class="sourceLineNo">177</span> // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.177"></a>
+<span class="sourceLineNo">178</span> // debug. Peer needs to be up for the edit to make it across. This wait on<a name="line.178"></a>
+<span class="sourceLineNo">179</span> // peer count seems to be a hack that has us not progress till peer is up.<a name="line.179"></a>
+<span class="sourceLineNo">180</span> if (admin.getPeersCount() <= peerCount) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span> LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> Threads.sleep(100);<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> // now replicate some data<a name="line.184"></a>
+<span class="sourceLineNo">185</span> doPut(row);<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.187"></a>
+<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span> public boolean evaluate() throws Exception {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.190"></a>
+<span class="sourceLineNo">191</span> // only send over one edit.<a name="line.191"></a>
+<span class="sourceLineNo">192</span> int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.192"></a>
+<span class="sourceLineNo">193</span> LOG.info("count=" + count);<a name="line.193"></a>
+<span class="sourceLineNo">194</span> return ReplicationEndpointReturningFalse.replicated.get();<a name="line.194"></a>
+<span class="sourceLineNo">195</span> }<a name="line.195"></a>
+<span class="sourceLineNo">196</span> });<a name="line.196"></a>
+<span class="sourceLineNo">197</span> if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> throw ReplicationEndpointReturningFalse.ex.get();<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span> admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<a name="line.201"></a>
+<span class="sourceLineNo">202</span> }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> @Test<a name="line.204"></a>
+<span class="sourceLineNo">205</span> public void testInterClusterReplication() throws Exception {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> final String id = "testInterClusterReplication";<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span> List<HRegion> regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.208"></a>
+<span class="sourceLineNo">209</span> int totEdits = 0;<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span> // Make sure edits are spread across regions because we do region based batching<a name="line.211"></a>
+<span class="sourceLineNo">212</span> // before shipping edits.<a name="line.212"></a>
+<span class="sourceLineNo">213</span> for(HRegion region: regions) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> RegionInfo hri = region.getRegionInfo();<a name="line.214"></a>
+<span class="sourceLineNo">215</span> byte[] row = hri.getStartKey();<a name="line.215"></a>
+<span class="sourceLineNo">216</span> for (int i = 0; i < 100; i++) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span> if (row.length > 0) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> Put put = new Put(row);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> put.addColumn(famName, row, row);<a name="line.219"></a>
+<span class="sourceLineNo">220</span> region.put(put);<a name="line.220"></a>
+<span class="sourceLineNo">221</span> totEdits++;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> }<a name="line.222"></a>
+<span class="sourceLineNo">223</span> }<a name="line.223"></a>
+<span class="sourceLineNo">224</span> }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span> admin.addPeer(id,<a name="line.226"></a>
+<span class="sourceLineNo">227</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.227"></a>
+<span class="sourceLineNo">228</span> .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.228"></a>
+<span class="sourceLineNo">229</span> null);<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span> final int numEdits = totEdits;<a name="line.231"></a>
+<span class="sourceLineNo">232</span> Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> @Override<a name="line.233"></a>
+<span class="sourceLineNo">234</span> public boolean evaluate() throws Exception {<a name="line.234"></a>
+<span class="sourceLineNo">235</span> return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<a name="line.235"></a>
+<span class="sourceLineNo">236</span> }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span> @Override<a name="line.238"></a>
+<span class="sourceLineNo">239</span> public String explainFailure() throws Exception {<a name="line.239"></a>
+<span class="sourceLineNo">240</span> String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.240"></a>
+<span class="sourceLineNo">241</span> + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.241"></a>
+<span class="sourceLineNo">242</span> return failure;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> });<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span> admin.removePeer("testInterClusterReplication");<a name="line.246"></a>
+<span class="sourceLineNo">247</span> utility1.deleteTableData(tableName);<a name="line.247"></a>
+<span class="sourceLineNo">248</span> }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span> @Test<a name="line.250"></a>
+<span class="sourceLineNo">251</span> public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.251"></a>
+<span class="sourceLineNo">252</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.252"></a>
+<span class="sourceLineNo">253</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.253"></a>
+<span class="sourceLineNo">254</span> //test that we can create mutliple WALFilters reflectively<a name="line.254"></a>
+<span class="sourceLineNo">255</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.255"></a>
+<span class="sourceLineNo">256</span> EverythingPassesWALEntryFilter.class.getName() +<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span> admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span> // now replicate some data.<a name="line.259"></a>
+<span class="sourceLineNo">260</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span> doPut(connection, Bytes.toBytes("row1"));<a name="line.261"></a>
+<span class="sourceLineNo">262</span> doPut(connection, row);<a name="line.262"></a>
+<span class="sourceLineNo">263</span> doPut(connection, Bytes.toBytes("row2"));<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.266"></a>
+<span class="sourceLineNo">267</span> @Override<a name="line.267"></a>
+<span class="sourceLineNo">268</span> public boolean evaluate() throws Exception {<a name="line.268"></a>
+<span class="sourceLineNo">269</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.269"></a>
+<span class="sourceLineNo">270</span> }<a name="line.270"></a>
+<span class="sourceLineNo">271</span> });<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span> Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.273"></a>
+<span class="sourceLineNo">274</span> //make sure our reflectively created filter is in the filter chain<a name="line.274"></a>
+<span class="sourceLineNo">275</span> Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.275"></a>
+<span class="sourceLineNo">276</span> admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<a name="line.276"></a>
+<span class="sourceLineNo">277</span> }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span> @Test (expected=IOException.class)<a name="line.279"></a>
+<span class="sourceLineNo">280</span> public void testWALEntryFilterAddValidation() throws Exception {<a name="line.280"></a>
+<span class="sourceLineNo">281</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.281"></a>
+<span class="sourceLineNo">282</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.282"></a>
+<span class="sourceLineNo">283</span> //test that we can create mutliple WALFilters reflectively<a name="line.283"></a>
+<span class="sourceLineNo">284</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.284"></a>
+<span class="sourceLineNo">285</span> "IAmNotARealWalEntryFilter");<a name="line.285"></a>
+<span class="sourceLineNo">286</span> admin.addPeer("testWALEntryFilterAddValidation", rpc);<a name="line.286"></a>
+<span class="sourceLineNo">287</span> }<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span> @Test (expected=IOException.class)<a name="line.289"></a>
+<span class="sourceLineNo">290</span> public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.290"></a>
+<span class="sourceLineNo">291</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.291"></a>
+<span class="sourceLineNo">292</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.292"></a>
+<span class="sourceLineNo">293</span> //test that we can create mutliple WALFilters reflectively<a name="line.293"></a>
+<span class="sourceLineNo">294</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.294"></a>
+<span class="sourceLineNo">295</span> "IAmNotARealWalEntryFilter");<a name="line.295"></a>
+<span class="sourceLineNo">296</span> admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.296"></a>
+<span class="sourceLineNo">297</span> }<a name="line.297"></a>
<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span> @Test<a name="line.299"></a>
-<span class="sourceLineNo">300</span> public void testMetricsSourceBaseSourcePassthrough(){<a name="line.300"></a>
-<span class="sourceLineNo">301</span> /*<a name="line.301"></a>
-<span class="sourceLineNo">302</span> The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.302"></a>
-<span class="sourceLineNo">303</span> and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.303"></a>
-<span class="sourceLineNo">304</span> Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.304"></a>
-<span class="sourceLineNo">305</span> allows for custom JMX metrics.<a name="line.305"></a>
-<span class="sourceLineNo">306</span> This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.306"></a>
-<span class="sourceLineNo">307</span> the two layers of wrapping to the actual BaseSource.<a name="line.307"></a>
-<span class="sourceLineNo">308</span> */<a name="line.308"></a>
-<span class="sourceLineNo">309</span> String id = "id";<a name="line.309"></a>
-<span class="sourceLineNo">310</span> DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.311"></a>
-<span class="sourceLineNo">312</span> when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.312"></a>
-<span class="sourceLineNo">313</span> MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.313"></a>
-<span class="sourceLineNo">314</span> when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span> MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.316"></a>
-<span class="sourceLineNo">317</span> MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> MetricsSource source = new MetricsSource(id, singleSourceSource, globalSourceSource);<a name="line.318"></a>
-<span class="sourceLineNo">319</span> String gaugeName = "gauge";<a name="line.319"></a>
-<span class="sourceLineNo">320</span> String singleGaugeName = "source.id." + gaugeName;<a name="line.320"></a>
-<span class="sourceLineNo">321</span> String globalGaugeName = "source." + gaugeName;<a name="line.321"></a>
-<span class="sourceLineNo">322</span> long delta = 1;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> String counterName = "counter";<a name="line.323"></a>
-<span class="sourceLineNo">324</span> String singleCounterName = "source.id." + counterName;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> String globalCounterName = "source." + counterName;<a name="line.325"></a>
-<span class="sourceLineNo">326</span> long count = 2;<a name="line.326"></a>
-<span class="sourceLineNo">327</span> source.decGauge(gaugeName, delta);<a name="line.327"></a>
-<span class="sourceLineNo">328</span> source.getMetricsContext();<a name="line.328"></a>
-<span class="sourceLineNo">329</span> source.getMetricsDescription();<a name="line.329"></a>
-<span class="sourceLineNo">330</span> source.getMetricsJmxContext();<a name="line.330"></a>
-<span class="sourceLineNo">331</span> source.getMetricsName();<a name="line.331"></a>
-<span class="sourceLineNo">332</span> source.incCounters(counterName, count);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> source.incGauge(gaugeName, delta);<a name="line.333"></a>
-<span class="sourceLineNo">334</span> source.init();<a name="line.334"></a>
-<span class="sourceLineNo">335</span> source.removeMetric(gaugeName);<a name="line.335"></a>
-<span class="sourceLineNo">336</span> source.setGauge(gaugeName, delta);<a name="line.336"></a>
-<span class="sourceLineNo">337</span> source.updateHistogram(counterName, count);<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.339"></a>
-<span class="sourceLineNo">340</span> verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.340"></a>
-<span class="sourceLineNo">341</span> verify(globalRms).getMetricsContext();<a name="line.341"></a>
-<span class="sourceLineNo">342</span> verify(globalRms).getMetricsJmxContext();<a name="line.342"></a>
-<span class="sourceLineNo">343</span> verify(globalRms).getMetricsName();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> verify(singleRms).incCounters(singleCounterName, count);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> verify(globalRms).incCounters(globalCounterName, count);<a name="line.345"></a>
-<span class="sourceLineNo">346</span> verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.346"></a>
-<span class="sourceLineNo">347</span> verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> verify(globalRms).init();<a name="line.348"></a>
-<span class="sourceLineNo">349</span> verify(singleRms).removeMetric(singleGaugeName);<a name="line.349"></a>
-<span class="sourceLineNo">350</span> verify(globalRms).removeMetric(globalGaugeName);<a name="line.350"></a>
-<span class="sourceLineNo">351</span> verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.351"></a>
-<span class="sourceLineNo">352</span> verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.352"></a>
-<span class="sourceLineNo">353</span> verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> verify(globalRms).updateHistogram(globalCounterName, count);<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 void doPut(byte[] row) throws IOException {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> doPut(connection, row);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> }<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> try (Table t = connection.getTable(tableName)) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span> Put put = new Put(row);<a name="line.365"></a>
-<span class="sourceLineNo">366</span> put.addColumn(famName, row, row);<a name="line.366"></a>
-<span class="sourceLineNo">367</span> t.put(put);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> }<a name="line.368"></a>
-<span class="sourceLineNo">369</span> }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span> private static void doAssert(byte[] row) throws Exception {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span> return; // first call<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span> Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<Cell> cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> Assert.assertEquals(1, cells.size());<a name="line.377"></a>
-<span class="sourceLineNo">378</span> Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.378"></a>
-<span class="sourceLineNo">379</span> cells.get(0).getRowLength(), row, 0, row.length));<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> static UUID uuid = UUID.randomUUID();<a name="line.383"></a>
-<span class="sourceLineNo">384</span> static AtomicInteger contructedCount = new AtomicInteger();<a name="line.384"></a>
-<span class="sourceLineNo">385</span> static AtomicInteger startedCount = new AtomicInteger();<a name="line.385"></a>
-<span class="sourceLineNo">386</span> static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.386"></a>
-<span class="sourceLineNo">387</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.387"></a>
-<span class="sourceLineNo">388</span> static volatile List<Entry> lastEntries = null;<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> public ReplicationEndpointForTest() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span> replicateCount.set(0);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> contructedCount.incrementAndGet();<a name="line.392"></a>
-<span class="sourceLineNo">393</span> }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span> public UUID getPeerUUID() {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return uuid;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> }<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span> @Override<a name="line.400"></a>
-<span class="sourceLineNo">401</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> replicateCount.incrementAndGet();<a name="line.402"></a>
-<span class="sourceLineNo">403</span> lastEntries = new ArrayList<>(replicateContext.entries);<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return true;<a name="line.404"></a>
-<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span> @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span> public void start() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span> startAsync();<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void stop() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> stopAsync();<a name="line.414"></a>
-<span class="sourceLineNo">415</span> }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span> @Override<a name="line.417"></a>
-<span class="sourceLineNo">418</span> protected void doStart() {<a name="line.418"></a>
-<span class="sourceLineNo">419</span> startedCount.incrementAndGet();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> notifyStarted();<a name="line.420"></a>
-<span class="sourceLineNo">421</span> }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span> @Override<a name="line.423"></a>
-<span class="sourceLineNo">424</span> protected void doStop() {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> stoppedCount.incrementAndGet();<a name="line.425"></a>
-<span class="sourceLineNo">426</span> notifyStopped();<a name="line.426"></a>
-<span class="sourceLineNo">427</span> }<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span> public static class InterClusterReplicationEndpointForTest<a name="line.430"></a>
-<span class="sourceLineNo">431</span> extends HBaseInterClusterReplicationEndpoint {<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.433"></a>
-<span class="sourceLineNo">434</span> static boolean failedOnce;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> public InterClusterReplicationEndpointForTest() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span> replicateCount.set(0);<a name="line.437"></a>
-<span class="sourceLineNo">438</span> }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span> @Override<a name="line.440"></a>
-<span class="sourceLineNo">441</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> boolean success = super.replicate(replicateContext);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> if (success) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> replicateCount.addAndGet(replicateContext.entries.size());<a name="line.444"></a>
-<span class="sourceLineNo">445</span> }<a name="line.445"></a>
-<span class="sourceLineNo">446</span> return success;<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> @Override<a name="line.449"></a>
-<span class="sourceLineNo">450</span> protected Replicator createReplicator(List<Entry> entries, int ordinal) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span> // Fail only once, we don't want to slow down the test.<a name="line.451"></a>
-<span class="sourceLineNo">452</span> if (failedOnce) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> return new DummyReplicator(entries, ordinal);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> } else {<a name="line.454"></a>
-<span class="sourceLineNo">455</span> failedOnce = true;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> return new FailingDummyReplicator(entries, ordinal);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> }<a name="line.457"></a>
-<span class="sourceLineNo">458</span> }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span> protected class DummyReplicator extends Replicator {<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span> private int ordinal;<a name="line.462"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span> @Test<a name="line.300"></a>
+<span class="sourceLineNo">301</span> public void testMetricsSourceBaseSourcePassthrough(){<a name="line.301"></a>
+<span class="sourceLineNo">302</span> /*<a name="line.302"></a>
+<span class="sourceLineNo">303</span> The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.303"></a>
+<span class="sourceLineNo">304</span> and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.304"></a>
+<span class="sourceLineNo">305</span> Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.305"></a>
+<span class="sourceLineNo">306</span> allows for custom JMX metrics.<a name="line.306"></a>
+<span class="sourceLineNo">307</span> This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.307"></a>
+<span class="sourceLineNo">308</span> the two layers of wrapping to the actual BaseSource.<a name="line.308"></a>
+<span class="sourceLineNo">309</span> */<a name="line.309"></a>
+<span class="sourceLineNo">310</span> String id = "id";<a name="line.310"></a>
+<span class="sourceLineNo">311</span> DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.311"></a>
+<span class="sourceLineNo">312</span> MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.312"></a>
+<span class="sourceLineNo">313</span> when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.313"></a>
+<span class="sourceLineNo">314</span> MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.314"></a>
+<span class="sourceLineNo">315</span> when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span> MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.317"></a>
+<span class="sourceLineNo">318</span> MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> MetricsSource source = new MetricsSource(id, singleSourceSource, globalSourceSource);<a name="line.319"></a>
+<span class="sourceLineNo">320</span> String gaugeName = "gauge";<a name="line.320"></a>
+<span class="sourceLineNo">321</span> String singleGaugeName = "source.id." + gaugeName;<a name="line.321"></a>
+<span class="sourceLineNo">322</span> String globalGaugeName = "source." + gaugeName;<a name="line.322"></a>
+<span class="sourceLineNo">323</span> long delta = 1;<a name="line.323"></a>
+<span class="sourceLineNo">324</span> String counterName = "counter";<a name="line.324"></a>
+<span class="sourceLineNo">325</span> String singleCounterName = "source.id." + counterName;<a name="line.325"></a>
+<span class="sourceLineNo">326</span> String globalCounterName = "source." + counterName;<a name="line.326"></a>
+<span class="sourceLineNo">327</span> long count = 2;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> source.decGauge(gaugeName, delta);<a name="line.328"></a>
+<span class="sourceLineNo">329</span> source.getMetricsContext();<a name="line.329"></a>
+<span class="sourceLineNo">330</span> source.getMetricsDescription();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> source.getMetricsJmxContext();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> source.getMetricsName();<a name="line.332"></a>
+<span class="sourceLineNo">333</span> source.incCounters(counterName, count);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> source.incGauge(gaugeName, delta);<a name="line.334"></a>
+<span class="sourceLineNo">335</span> source.init();<a name="line.335"></a>
+<span class="sourceLineNo">336</span> source.removeMetric(gaugeName);<a name="line.336"></a>
+<span class="sourceLineNo">337</span> source.setGauge(gaugeName, delta);<a name="line.337"></a>
+<span class="sourceLineNo">338</span> source.updateHistogram(counterName, count);<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.340"></a>
+<span class="sourceLineNo">341</span> verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.341"></a>
+<span class="sourceLineNo">342</span> verify(globalRms).getMetricsContext();<a name="line.342"></a>
+<span class="sourceLineNo">343</span> verify(globalRms).getMetricsJmxContext();<a name="line.343"></a>
+<span class="sourceLineNo">344</span> verify(globalRms).getMetricsName();<a name="line.344"></a>
+<span class="sourceLineNo">345</span> verify(singleRms).incCounters(singleCounterName, count);<a name="line.345"></a>
+<span class="sourceLineNo">346</span> verify(globalRms).incCounters(globalCounterName, count);<a name="line.346"></a>
+<span class="sourceLineNo">347</span> verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.347"></a>
+<span class="sourceLineNo">348</span> verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> verify(globalRms).init();<a name="line.349"></a>
+<span class="sourceLineNo">350</span> verify(singleRms).removeMetric(singleGaugeName);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> verify(globalRms).removeMetric(globalGaugeName);<a name="line.351"></a>
+<span class="sourceLineNo">352</span> verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.352"></a>
+<span class="sourceLineNo">353</span> verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.354"></a>
+<span class="sourceLineNo">355</span> verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.355"></a>
+<span class="sourceLineNo">356</span> }<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span> private void doPut(byte[] row) throws IOException {<a name="line.358"></a>
+<span class="sourceLineNo">359</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span> doPut(connection, row);<a name="line.360"></a>
+<span class="sourceLineNo">361</span> }<a name="line.361"></a>
+<span class="sourceLineNo">362</span> }<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span> private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.364"></a>
+<span class="sourceLineNo">365</span> try (Table t = connection.getTable(tableName)) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> Put put = new Put(row);<a name="line.366"></a>
+<span class="sourceLineNo">367</span> put.addColumn(famName, row, row);<a name="line.367"></a>
+<span class="sourceLineNo">368</span> t.put(put);<a name="line.368"></a>
+<span class="sourceLineNo">369</span> }<a name="line.369"></a>
+<span class="sourceLineNo">370</span> }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span> private static void doAssert(byte[] row) throws Exception {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span> return; // first call<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.376"></a>
+<span class="sourceLineNo">377</span> List<Cell> cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.377"></a>
+<span class="sourceLineNo">378</span> Assert.assertEquals(1, cells.size());<a name="line.378"></a>
+<span class="sourceLineNo">379</span> Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> cells.get(0).getRowLength(), row, 0, row.length));<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> static UUID uuid = UUID.randomUUID();<a name="line.384"></a>
+<span class="sourceLineNo">385</span> static AtomicInteger contructedCount = new AtomicInteger();<a name="line.385"></a>
+<span class="sourceLineNo">386</span> static AtomicInteger startedCount = new AtomicInteger();<a name="line.386"></a>
+<span class="sourceLineNo">387</span> static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.387"></a>
+<span class="sourceLineNo">388</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.388"></a>
+<span class="sourceLineNo">389</span> static volatile List<Entry> lastEntries = null;<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> public ReplicationEndpointForTest() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> replicateCount.set(0);<a name="line.392"></a>
+<span class="sourceLineNo">393</span> contructedCount.incrementAndGet();<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span> @Override<a name="line.396"></a>
+<span class="sourceLineNo">397</span> public UUID getPeerUUID() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> return uuid;<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> @Override<a name="line.401"></a>
+<span class="sourceLineNo">402</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span> replicateCount.incrementAndGet();<a name="line.403"></a>
+<span class="sourceLineNo">404</span> lastEntries = new ArrayList<>(replicateContext.entries);<a name="line.404"></a>
+<span class="sourceLineNo">405</span> return true;<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> @Override<a name="line.408"></a>
+<span class="sourceLineNo">409</span> public void start() {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> startAsync();<a name="line.410"></a>
+<span class="sourceLineNo">411</span> }<a name="line.411"></a>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span> @Override<a name="line.413"></a>
+<span class="sourceLineNo">414</span> public void stop() {<a name="line.414"></a>
+<span class="sourceLineNo">415</span> stopAsync();<a name="line.415"></a>
+<span class="sourceLineNo">416</span> }<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span> @Override<a name="line.418"></a>
+<span class="sourceLineNo">419</span> protected void doStart() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span> startedCount.incrementAndGet();<a name="line.420"></a>
+<span class="sourceLineNo">421</span> notifyStarted();<a name="line.421"></a>
+<span class="sourceLineNo">422</span> }<a name="line.422"></a>
+<span class="sourceLineNo">423</span><a name="line.423"></a>
+<span class="sourceLineNo">424</span> @Override<a name="line.424"></a>
+<span class="sourceLineNo">425</span> protected void doStop() {<a name="line.425"></a>
+<span class="sourceLineNo">426</span> stoppedCount.incrementAndGet();<a name="line.426"></a>
+<span class="sourceLineNo">427</span> notifyStopped();<a name="line.427"></a>
+<span class="sourceLineNo">428</span> }<a name="line.428"></a>
+<span class="sourceLineNo">429</span> }<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span> public static class InterClusterReplicationEndpointForTest<a name="line.431"></a>
+<span class="sourceLineNo">432</span> extends HBaseInterClusterReplicationEndpoint {<a name="line.432"></a>
+<span class="sourceLineNo">433</span><a name="line.433"></a>
+<span class="sourceLineNo">434</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.434"></a>
+<span class="sourceLineNo">435</span> static boolean failedOnce;<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span> public InterClusterReplicationEndpointForTest() {<a name="line.437"></a>
+<span class="sourceLineNo">438</span> replicateCount.set(0);<a name="line.438"></a>
+<span class="sourceLineNo">439</span> }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span> @Override<a name="line.441"></a>
+<span class="sourceLineNo">442</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span> boolean success = super.replicate(replicateContext);<a name="line.443"></a>
+<span class="sourceLineNo">444</span> if (success) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span> replicateCount.addAndGet(replicateContext.entries.size());<a name="line.445"></a>
+<span class="sourceLineNo">446</span> }<a name="line.446"></a>
+<span class="sourceLineNo">447</span> return success;<a name="line.447"></a>
+<span class="sourceLineNo">448</span> }<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> protected Callable<Integer> createReplicator(List<Entry> entries, int ordinal) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span> // Fail only once, we don't want to slow down the test.<a name="line.452"></a>
+<span class="sourceLineNo">453</span> if (failedOnce) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span> return () -> ordinal;<a name="line.454"></a>
+<span class="sourceLineNo">455</span> } else {<a name="line.455"></a>
+<span class="sourceLineNo">456</span> failedOnce = true;<a name="line.456"></a>
+<span class="sourceLineNo">457</span> return () -> {<a name="line.457"></a>
+<span class="sourceLineNo">458</span> throw new IOException("Sample Exception: Failed to replicate.");<a name="line.458"></a>
+<span class="sourceLineNo">459</span> };<a name="line.459"></a>
+<span class="sourceLineNo">460</span> }<a name="line.460"></a>
+<span class="sourceLineNo">461</span> }<a name="line.461"></a>
+<span class="sourceLineNo">462</span> }<a name="line.462"></a>
<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span> public DummyReplicator(List<Entry> entries, int ordinal) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> super(entries, ordinal);<a name="line.465"></a>
-<span class="sourceLineNo">466</span> this.ordinal = ordinal;<a name="line.466"></a>
-<span class="sourceLineNo">467</span> }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span> @Override<a name="line.469"></a>
-<span class="sourceLineNo">470</span> public Integer call() throws IOException {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> return ordinal;<a name="line.471"></a>
-<span class=
<TRUNCATED>
[23/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call() throws IOExc
<TRUNCATED>
[04/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
index 7a938de..43a87b6 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
@@ -33,539 +33,515 @@
<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.util.List;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.util.UUID;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.Cell;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.Waiter;<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.RegionInfo;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.Table;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.junit.AfterClass;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.junit.Assert;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.junit.Before;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.BeforeClass;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.ClassRule;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Test;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.experimental.categories.Category;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.65"></a>
-<span class="sourceLineNo">066</span> */<a name="line.66"></a>
-<span class="sourceLineNo">067</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.67"></a>
-<span class="sourceLineNo">068</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span> @ClassRule<a name="line.70"></a>
-<span class="sourceLineNo">071</span> public static final HBaseClassTestRule CLASS_RULE =<a name="line.71"></a>
-<span class="sourceLineNo">072</span> HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span> private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span> static int numRegionServers;<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span> @BeforeClass<a name="line.78"></a>
-<span class="sourceLineNo">079</span> public static void setUpBeforeClass() throws Exception {<a name="line.79"></a>
-<span class="sourceLineNo">080</span> TestReplicationBase.setUpBeforeClass();<a name="line.80"></a>
-<span class="sourceLineNo">081</span> numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<a name="line.81"></a>
-<span class="sourceLineNo">082</span> }<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span> @AfterClass<a name="line.84"></a>
-<span class="sourceLineNo">085</span> public static void tearDownAfterClass() throws Exception {<a name="line.85"></a>
-<span class="sourceLineNo">086</span> TestReplicationBase.tearDownAfterClass();<a name="line.86"></a>
-<span class="sourceLineNo">087</span> // check stop is called<a name="line.87"></a>
-<span class="sourceLineNo">088</span> Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() > 0);<a name="line.88"></a>
-<span class="sourceLineNo">089</span> }<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span> @Before<a name="line.91"></a>
-<span class="sourceLineNo">092</span> public void setup() throws Exception {<a name="line.92"></a>
-<span class="sourceLineNo">093</span> ReplicationEndpointForTest.contructedCount.set(0);<a name="line.93"></a>
-<span class="sourceLineNo">094</span> ReplicationEndpointForTest.startedCount.set(0);<a name="line.94"></a>
-<span class="sourceLineNo">095</span> ReplicationEndpointForTest.replicateCount.set(0);<a name="line.95"></a>
-<span class="sourceLineNo">096</span> ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.96"></a>
-<span class="sourceLineNo">097</span> ReplicationEndpointForTest.lastEntries = null;<a name="line.97"></a>
-<span class="sourceLineNo">098</span> final List<RegionServerThread> rsThreads =<a name="line.98"></a>
-<span class="sourceLineNo">099</span> utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.99"></a>
-<span class="sourceLineNo">100</span> for (RegionServerThread rs : rsThreads) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span> utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.101"></a>
-<span class="sourceLineNo">102</span> }<a name="line.102"></a>
-<span class="sourceLineNo">103</span> // Wait for all log roll to finish<a name="line.103"></a>
-<span class="sourceLineNo">104</span> utility1.waitFor(3000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.104"></a>
-<span class="sourceLineNo">105</span> @Override<a name="line.105"></a>
-<span class="sourceLineNo">106</span> public boolean evaluate() throws Exception {<a name="line.106"></a>
-<span class="sourceLineNo">107</span> for (RegionServerThread rs : rsThreads) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> return false;<a name="line.109"></a>
-<span class="sourceLineNo">110</span> }<a name="line.110"></a>
-<span class="sourceLineNo">111</span> }<a name="line.111"></a>
-<span class="sourceLineNo">112</span> return true;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span> @Override<a name="line.115"></a>
-<span class="sourceLineNo">116</span> public String explainFailure() throws Exception {<a name="line.116"></a>
-<span class="sourceLineNo">117</span> List<String> logRollInProgressRsList = new ArrayList<>();<a name="line.117"></a>
-<span class="sourceLineNo">118</span> for (RegionServerThread rs : rsThreads) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span> logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.120"></a>
-<span class="sourceLineNo">121</span> }<a name="line.121"></a>
-<span class="sourceLineNo">122</span> }<a name="line.122"></a>
-<span class="sourceLineNo">123</span> return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<a name="line.123"></a>
-<span class="sourceLineNo">124</span> }<a name="line.124"></a>
-<span class="sourceLineNo">125</span> });<a name="line.125"></a>
-<span class="sourceLineNo">126</span> }<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span> @Test<a name="line.128"></a>
-<span class="sourceLineNo">129</span> public void testCustomReplicationEndpoint() throws Exception {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> // test installing a custom replication endpoint other than the default one.<a name="line.130"></a>
-<span class="sourceLineNo">131</span> admin.addPeer("testCustomReplicationEndpoint",<a name="line.131"></a>
-<span class="sourceLineNo">132</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.132"></a>
-<span class="sourceLineNo">133</span> .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span> // check whether the class has been constructed and started<a name="line.135"></a>
-<span class="sourceLineNo">136</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> @Override<a name="line.137"></a>
-<span class="sourceLineNo">138</span> public boolean evaluate() throws Exception {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> return ReplicationEndpointForTest.contructedCount.get() >= numRegionServers;<a name="line.139"></a>
-<span class="sourceLineNo">140</span> }<a name="line.140"></a>
-<span class="sourceLineNo">141</span> });<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span> @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span> public boolean evaluate() throws Exception {<a name="line.145"></a>
-<span class="sourceLineNo">146</span> return ReplicationEndpointForTest.startedCount.get() >= numRegionServers;<a name="line.146"></a>
-<span class="sourceLineNo">147</span> }<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> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span> // now replicate some data.<a name="line.152"></a>
-<span class="sourceLineNo">153</span> doPut(Bytes.toBytes("row42"));<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span> public boolean evaluate() throws Exception {<a name="line.157"></a>
-<span class="sourceLineNo">158</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.158"></a>
-<span class="sourceLineNo">159</span> }<a name="line.159"></a>
-<span class="sourceLineNo">160</span> });<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span> doAssert(Bytes.toBytes("row42"));<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span> admin.removePeer("testCustomReplicationEndpoint");<a name="line.164"></a>
-<span class="sourceLineNo">165</span> }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span> @Test<a name="line.167"></a>
-<span class="sourceLineNo">168</span> public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.168"></a>
-<span class="sourceLineNo">169</span> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.169"></a>
-<span class="sourceLineNo">170</span> Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.170"></a>
-<span class="sourceLineNo">171</span> int peerCount = admin.getPeersCount();<a name="line.171"></a>
-<span class="sourceLineNo">172</span> final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.172"></a>
-<span class="sourceLineNo">173</span> admin.addPeer(id,<a name="line.173"></a>
-<span class="sourceLineNo">174</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.174"></a>
-<span class="sourceLineNo">175</span> .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.175"></a>
-<span class="sourceLineNo">176</span> // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.176"></a>
-<span class="sourceLineNo">177</span> // debug. Peer needs to be up for the edit to make it across. This wait on<a name="line.177"></a>
-<span class="sourceLineNo">178</span> // peer count seems to be a hack that has us not progress till peer is up.<a name="line.178"></a>
-<span class="sourceLineNo">179</span> if (admin.getPeersCount() <= peerCount) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> Threads.sleep(100);<a name="line.181"></a>
-<span class="sourceLineNo">182</span> }<a name="line.182"></a>
-<span class="sourceLineNo">183</span> // now replicate some data<a name="line.183"></a>
-<span class="sourceLineNo">184</span> doPut(row);<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.186"></a>
-<span class="sourceLineNo">187</span> @Override<a name="line.187"></a>
-<span class="sourceLineNo">188</span> public boolean evaluate() throws Exception {<a name="line.188"></a>
-<span class="sourceLineNo">189</span> // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.189"></a>
-<span class="sourceLineNo">190</span> // only send over one edit.<a name="line.190"></a>
-<span class="sourceLineNo">191</span> int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.191"></a>
-<span class="sourceLineNo">192</span> LOG.info("count=" + count);<a name="line.192"></a>
-<span class="sourceLineNo">193</span> return ReplicationEndpointReturningFalse.replicated.get();<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span> });<a name="line.195"></a>
-<span class="sourceLineNo">196</span> if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span> throw ReplicationEndpointReturningFalse.ex.get();<a name="line.197"></a>
-<span class="sourceLineNo">198</span> }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span> admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<a name="line.200"></a>
-<span class="sourceLineNo">201</span> }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span> @Test<a name="line.203"></a>
-<span class="sourceLineNo">204</span> public void testInterClusterReplication() throws Exception {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> final String id = "testInterClusterReplication";<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span> List<HRegion> regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.207"></a>
-<span class="sourceLineNo">208</span> int totEdits = 0;<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> // Make sure edits are spread across regions because we do region based batching<a name="line.210"></a>
-<span class="sourceLineNo">211</span> // before shipping edits.<a name="line.211"></a>
-<span class="sourceLineNo">212</span> for(HRegion region: regions) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span> RegionInfo hri = region.getRegionInfo();<a name="line.213"></a>
-<span class="sourceLineNo">214</span> byte[] row = hri.getStartKey();<a name="line.214"></a>
-<span class="sourceLineNo">215</span> for (int i = 0; i < 100; i++) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span> if (row.length > 0) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span> Put put = new Put(row);<a name="line.217"></a>
-<span class="sourceLineNo">218</span> put.addColumn(famName, row, row);<a name="line.218"></a>
-<span class="sourceLineNo">219</span> region.put(put);<a name="line.219"></a>
-<span class="sourceLineNo">220</span> totEdits++;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> }<a name="line.221"></a>
-<span class="sourceLineNo">222</span> }<a name="line.222"></a>
-<span class="sourceLineNo">223</span> }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> admin.addPeer(id,<a name="line.225"></a>
-<span class="sourceLineNo">226</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.226"></a>
-<span class="sourceLineNo">227</span> .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.227"></a>
-<span class="sourceLineNo">228</span> null);<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span> final int numEdits = totEdits;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.231"></a>
-<span class="sourceLineNo">232</span> @Override<a name="line.232"></a>
-<span class="sourceLineNo">233</span> public boolean evaluate() throws Exception {<a name="line.233"></a>
-<span class="sourceLineNo">234</span> return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> }<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span> @Override<a name="line.237"></a>
-<span class="sourceLineNo">238</span> public String explainFailure() throws Exception {<a name="line.238"></a>
-<span class="sourceLineNo">239</span> String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.239"></a>
-<span class="sourceLineNo">240</span> + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.240"></a>
-<span class="sourceLineNo">241</span> return failure;<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span> });<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> admin.removePeer("testInterClusterReplication");<a name="line.245"></a>
-<span class="sourceLineNo">246</span> utility1.deleteTableData(tableName);<a name="line.246"></a>
-<span class="sourceLineNo">247</span> }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span> @Test<a name="line.249"></a>
-<span class="sourceLineNo">250</span> public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.250"></a>
-<span class="sourceLineNo">251</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.251"></a>
-<span class="sourceLineNo">252</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.252"></a>
-<span class="sourceLineNo">253</span> //test that we can create mutliple WALFilters reflectively<a name="line.253"></a>
-<span class="sourceLineNo">254</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.254"></a>
-<span class="sourceLineNo">255</span> EverythingPassesWALEntryFilter.class.getName() +<a name="line.255"></a>
-<span class="sourceLineNo">256</span> "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.256"></a>
-<span class="sourceLineNo">257</span> admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.257"></a>
-<span class="sourceLineNo">258</span> // now replicate some data.<a name="line.258"></a>
-<span class="sourceLineNo">259</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> doPut(connection, Bytes.toBytes("row1"));<a name="line.260"></a>
-<span class="sourceLineNo">261</span> doPut(connection, row);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> doPut(connection, Bytes.toBytes("row2"));<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.265"></a>
-<span class="sourceLineNo">266</span> @Override<a name="line.266"></a>
-<span class="sourceLineNo">267</span> public boolean evaluate() throws Exception {<a name="line.267"></a>
-<span class="sourceLineNo">268</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.268"></a>
-<span class="sourceLineNo">269</span> }<a name="line.269"></a>
-<span class="sourceLineNo">270</span> });<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span> Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.272"></a>
-<span class="sourceLineNo">273</span> //make sure our reflectively created filter is in the filter chain<a name="line.273"></a>
-<span class="sourceLineNo">274</span> Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.274"></a>
-<span class="sourceLineNo">275</span> admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<a name="line.275"></a>
-<span class="sourceLineNo">276</span> }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span> @Test (expected=IOException.class)<a name="line.278"></a>
-<span class="sourceLineNo">279</span> public void testWALEntryFilterAddValidation() throws Exception {<a name="line.279"></a>
-<span class="sourceLineNo">280</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.280"></a>
-<span class="sourceLineNo">281</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.281"></a>
-<span class="sourceLineNo">282</span> //test that we can create mutliple WALFilters reflectively<a name="line.282"></a>
-<span class="sourceLineNo">283</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.283"></a>
-<span class="sourceLineNo">284</span> "IAmNotARealWalEntryFilter");<a name="line.284"></a>
-<span class="sourceLineNo">285</span> admin.addPeer("testWALEntryFilterAddValidation", rpc);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> @Test (expected=IOException.class)<a name="line.288"></a>
-<span class="sourceLineNo">289</span> public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.289"></a>
-<span class="sourceLineNo">290</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.290"></a>
-<span class="sourceLineNo">291</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.291"></a>
-<span class="sourceLineNo">292</span> //test that we can create mutliple WALFilters reflectively<a name="line.292"></a>
-<span class="sourceLineNo">293</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.293"></a>
-<span class="sourceLineNo">294</span> "IAmNotARealWalEntryFilter");<a name="line.294"></a>
-<span class="sourceLineNo">295</span> admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.295"></a>
-<span class="sourceLineNo">296</span> }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">028</span>import java.util.concurrent.Callable;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.Cell;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.Waiter;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Put;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Table;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceImpl;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.replication.regionserver.MetricsSource;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.zookeeper.ZKConfig;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.junit.AfterClass;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.junit.Assert;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.junit.Before;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.junit.BeforeClass;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.junit.ClassRule;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.junit.Test;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.experimental.categories.Category;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.slf4j.Logger;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.slf4j.LoggerFactory;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>/**<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * Tests ReplicationSource and ReplicationEndpoint interactions<a name="line.66"></a>
+<span class="sourceLineNo">067</span> */<a name="line.67"></a>
+<span class="sourceLineNo">068</span>@Category({ ReplicationTests.class, MediumTests.class })<a name="line.68"></a>
+<span class="sourceLineNo">069</span>public class TestReplicationEndpoint extends TestReplicationBase {<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span> @ClassRule<a name="line.71"></a>
+<span class="sourceLineNo">072</span> public static final HBaseClassTestRule CLASS_RULE =<a name="line.72"></a>
+<span class="sourceLineNo">073</span> HBaseClassTestRule.forClass(TestReplicationEndpoint.class);<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span> private static final Logger LOG = LoggerFactory.getLogger(TestReplicationEndpoint.class);<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span> static int numRegionServers;<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span> @BeforeClass<a name="line.79"></a>
+<span class="sourceLineNo">080</span> public static void setUpBeforeClass() throws Exception {<a name="line.80"></a>
+<span class="sourceLineNo">081</span> TestReplicationBase.setUpBeforeClass();<a name="line.81"></a>
+<span class="sourceLineNo">082</span> numRegionServers = utility1.getHBaseCluster().getRegionServerThreads().size();<a name="line.82"></a>
+<span class="sourceLineNo">083</span> }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span> @AfterClass<a name="line.85"></a>
+<span class="sourceLineNo">086</span> public static void tearDownAfterClass() throws Exception {<a name="line.86"></a>
+<span class="sourceLineNo">087</span> TestReplicationBase.tearDownAfterClass();<a name="line.87"></a>
+<span class="sourceLineNo">088</span> // check stop is called<a name="line.88"></a>
+<span class="sourceLineNo">089</span> Assert.assertTrue(ReplicationEndpointForTest.stoppedCount.get() > 0);<a name="line.89"></a>
+<span class="sourceLineNo">090</span> }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span> @Before<a name="line.92"></a>
+<span class="sourceLineNo">093</span> public void setup() throws Exception {<a name="line.93"></a>
+<span class="sourceLineNo">094</span> ReplicationEndpointForTest.contructedCount.set(0);<a name="line.94"></a>
+<span class="sourceLineNo">095</span> ReplicationEndpointForTest.startedCount.set(0);<a name="line.95"></a>
+<span class="sourceLineNo">096</span> ReplicationEndpointForTest.replicateCount.set(0);<a name="line.96"></a>
+<span class="sourceLineNo">097</span> ReplicationEndpointReturningFalse.replicated.set(false);<a name="line.97"></a>
+<span class="sourceLineNo">098</span> ReplicationEndpointForTest.lastEntries = null;<a name="line.98"></a>
+<span class="sourceLineNo">099</span> final List<RegionServerThread> rsThreads =<a name="line.99"></a>
+<span class="sourceLineNo">100</span> utility1.getMiniHBaseCluster().getRegionServerThreads();<a name="line.100"></a>
+<span class="sourceLineNo">101</span> for (RegionServerThread rs : rsThreads) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span> utility1.getAdmin().rollWALWriter(rs.getRegionServer().getServerName());<a name="line.102"></a>
+<span class="sourceLineNo">103</span> }<a name="line.103"></a>
+<span class="sourceLineNo">104</span> // Wait for all log roll to finish<a name="line.104"></a>
+<span class="sourceLineNo">105</span> utility1.waitFor(3000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.105"></a>
+<span class="sourceLineNo">106</span> @Override<a name="line.106"></a>
+<span class="sourceLineNo">107</span> public boolean evaluate() throws Exception {<a name="line.107"></a>
+<span class="sourceLineNo">108</span> for (RegionServerThread rs : rsThreads) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span> return false;<a name="line.110"></a>
+<span class="sourceLineNo">111</span> }<a name="line.111"></a>
+<span class="sourceLineNo">112</span> }<a name="line.112"></a>
+<span class="sourceLineNo">113</span> return true;<a name="line.113"></a>
+<span class="sourceLineNo">114</span> }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> @Override<a name="line.116"></a>
+<span class="sourceLineNo">117</span> public String explainFailure() throws Exception {<a name="line.117"></a>
+<span class="sourceLineNo">118</span> List<String> logRollInProgressRsList = new ArrayList<>();<a name="line.118"></a>
+<span class="sourceLineNo">119</span> for (RegionServerThread rs : rsThreads) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span> if (!rs.getRegionServer().walRollRequestFinished()) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span> logRollInProgressRsList.add(rs.getRegionServer().toString());<a name="line.121"></a>
+<span class="sourceLineNo">122</span> }<a name="line.122"></a>
+<span class="sourceLineNo">123</span> }<a name="line.123"></a>
+<span class="sourceLineNo">124</span> return "Still waiting for log roll on regionservers: " + logRollInProgressRsList;<a name="line.124"></a>
+<span class="sourceLineNo">125</span> }<a name="line.125"></a>
+<span class="sourceLineNo">126</span> });<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> @Test<a name="line.129"></a>
+<span class="sourceLineNo">130</span> public void testCustomReplicationEndpoint() throws Exception {<a name="line.130"></a>
+<span class="sourceLineNo">131</span> // test installing a custom replication endpoint other than the default one.<a name="line.131"></a>
+<span class="sourceLineNo">132</span> admin.addPeer("testCustomReplicationEndpoint",<a name="line.132"></a>
+<span class="sourceLineNo">133</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.133"></a>
+<span class="sourceLineNo">134</span> .setReplicationEndpointImpl(ReplicationEndpointForTest.class.getName()), null);<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span> // check whether the class has been constructed and started<a name="line.136"></a>
+<span class="sourceLineNo">137</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.137"></a>
+<span class="sourceLineNo">138</span> @Override<a name="line.138"></a>
+<span class="sourceLineNo">139</span> public boolean evaluate() throws Exception {<a name="line.139"></a>
+<span class="sourceLineNo">140</span> return ReplicationEndpointForTest.contructedCount.get() >= numRegionServers;<a name="line.140"></a>
+<span class="sourceLineNo">141</span> }<a name="line.141"></a>
+<span class="sourceLineNo">142</span> });<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span> @Override<a name="line.145"></a>
+<span class="sourceLineNo">146</span> public boolean evaluate() throws Exception {<a name="line.146"></a>
+<span class="sourceLineNo">147</span> return ReplicationEndpointForTest.startedCount.get() >= numRegionServers;<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><a name="line.150"></a>
+<span class="sourceLineNo">151</span> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span> // now replicate some data.<a name="line.153"></a>
+<span class="sourceLineNo">154</span> doPut(Bytes.toBytes("row42"));<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> @Override<a name="line.157"></a>
+<span class="sourceLineNo">158</span> public boolean evaluate() throws Exception {<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<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> doAssert(Bytes.toBytes("row42"));<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span> admin.removePeer("testCustomReplicationEndpoint");<a name="line.165"></a>
+<span class="sourceLineNo">166</span> }<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span> @Test<a name="line.168"></a>
+<span class="sourceLineNo">169</span> public void testReplicationEndpointReturnsFalseOnReplicate() throws Exception {<a name="line.169"></a>
+<span class="sourceLineNo">170</span> Assert.assertEquals(0, ReplicationEndpointForTest.replicateCount.get());<a name="line.170"></a>
+<span class="sourceLineNo">171</span> Assert.assertTrue(!ReplicationEndpointReturningFalse.replicated.get());<a name="line.171"></a>
+<span class="sourceLineNo">172</span> int peerCount = admin.getPeersCount();<a name="line.172"></a>
+<span class="sourceLineNo">173</span> final String id = "testReplicationEndpointReturnsFalseOnReplicate";<a name="line.173"></a>
+<span class="sourceLineNo">174</span> admin.addPeer(id,<a name="line.174"></a>
+<span class="sourceLineNo">175</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.175"></a>
+<span class="sourceLineNo">176</span> .setReplicationEndpointImpl(ReplicationEndpointReturningFalse.class.getName()), null);<a name="line.176"></a>
+<span class="sourceLineNo">177</span> // This test is flakey and then there is so much stuff flying around in here its, hard to<a name="line.177"></a>
+<span class="sourceLineNo">178</span> // debug. Peer needs to be up for the edit to make it across. This wait on<a name="line.178"></a>
+<span class="sourceLineNo">179</span> // peer count seems to be a hack that has us not progress till peer is up.<a name="line.179"></a>
+<span class="sourceLineNo">180</span> if (admin.getPeersCount() <= peerCount) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span> LOG.info("Waiting on peercount to go up from " + peerCount);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> Threads.sleep(100);<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span> // now replicate some data<a name="line.184"></a>
+<span class="sourceLineNo">185</span> doPut(row);<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.187"></a>
+<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span> public boolean evaluate() throws Exception {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> // Looks like replication endpoint returns false unless we put more than 10 edits. We<a name="line.190"></a>
+<span class="sourceLineNo">191</span> // only send over one edit.<a name="line.191"></a>
+<span class="sourceLineNo">192</span> int count = ReplicationEndpointForTest.replicateCount.get();<a name="line.192"></a>
+<span class="sourceLineNo">193</span> LOG.info("count=" + count);<a name="line.193"></a>
+<span class="sourceLineNo">194</span> return ReplicationEndpointReturningFalse.replicated.get();<a name="line.194"></a>
+<span class="sourceLineNo">195</span> }<a name="line.195"></a>
+<span class="sourceLineNo">196</span> });<a name="line.196"></a>
+<span class="sourceLineNo">197</span> if (ReplicationEndpointReturningFalse.ex.get() != null) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> throw ReplicationEndpointReturningFalse.ex.get();<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span> admin.removePeer("testReplicationEndpointReturnsFalseOnReplicate");<a name="line.201"></a>
+<span class="sourceLineNo">202</span> }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span> @Test<a name="line.204"></a>
+<span class="sourceLineNo">205</span> public void testInterClusterReplication() throws Exception {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> final String id = "testInterClusterReplication";<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span> List<HRegion> regions = utility1.getHBaseCluster().getRegions(tableName);<a name="line.208"></a>
+<span class="sourceLineNo">209</span> int totEdits = 0;<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span> // Make sure edits are spread across regions because we do region based batching<a name="line.211"></a>
+<span class="sourceLineNo">212</span> // before shipping edits.<a name="line.212"></a>
+<span class="sourceLineNo">213</span> for(HRegion region: regions) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> RegionInfo hri = region.getRegionInfo();<a name="line.214"></a>
+<span class="sourceLineNo">215</span> byte[] row = hri.getStartKey();<a name="line.215"></a>
+<span class="sourceLineNo">216</span> for (int i = 0; i < 100; i++) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span> if (row.length > 0) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span> Put put = new Put(row);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> put.addColumn(famName, row, row);<a name="line.219"></a>
+<span class="sourceLineNo">220</span> region.put(put);<a name="line.220"></a>
+<span class="sourceLineNo">221</span> totEdits++;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> }<a name="line.222"></a>
+<span class="sourceLineNo">223</span> }<a name="line.223"></a>
+<span class="sourceLineNo">224</span> }<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span> admin.addPeer(id,<a name="line.226"></a>
+<span class="sourceLineNo">227</span> new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf2))<a name="line.227"></a>
+<span class="sourceLineNo">228</span> .setReplicationEndpointImpl(InterClusterReplicationEndpointForTest.class.getName()),<a name="line.228"></a>
+<span class="sourceLineNo">229</span> null);<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span> final int numEdits = totEdits;<a name="line.231"></a>
+<span class="sourceLineNo">232</span> Waiter.waitFor(conf1, 30000, new Waiter.ExplainingPredicate<Exception>() {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> @Override<a name="line.233"></a>
+<span class="sourceLineNo">234</span> public boolean evaluate() throws Exception {<a name="line.234"></a>
+<span class="sourceLineNo">235</span> return InterClusterReplicationEndpointForTest.replicateCount.get() == numEdits;<a name="line.235"></a>
+<span class="sourceLineNo">236</span> }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span> @Override<a name="line.238"></a>
+<span class="sourceLineNo">239</span> public String explainFailure() throws Exception {<a name="line.239"></a>
+<span class="sourceLineNo">240</span> String failure = "Failed to replicate all edits, expected = " + numEdits<a name="line.240"></a>
+<span class="sourceLineNo">241</span> + " replicated = " + InterClusterReplicationEndpointForTest.replicateCount.get();<a name="line.241"></a>
+<span class="sourceLineNo">242</span> return failure;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> });<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span> admin.removePeer("testInterClusterReplication");<a name="line.246"></a>
+<span class="sourceLineNo">247</span> utility1.deleteTableData(tableName);<a name="line.247"></a>
+<span class="sourceLineNo">248</span> }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span> @Test<a name="line.250"></a>
+<span class="sourceLineNo">251</span> public void testWALEntryFilterFromReplicationEndpoint() throws Exception {<a name="line.251"></a>
+<span class="sourceLineNo">252</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.252"></a>
+<span class="sourceLineNo">253</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.253"></a>
+<span class="sourceLineNo">254</span> //test that we can create mutliple WALFilters reflectively<a name="line.254"></a>
+<span class="sourceLineNo">255</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.255"></a>
+<span class="sourceLineNo">256</span> EverythingPassesWALEntryFilter.class.getName() +<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "," + EverythingPassesWALEntryFilterSubclass.class.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span> admin.addPeer("testWALEntryFilterFromReplicationEndpoint", rpc);<a name="line.258"></a>
+<span class="sourceLineNo">259</span> // now replicate some data.<a name="line.259"></a>
+<span class="sourceLineNo">260</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span> doPut(connection, Bytes.toBytes("row1"));<a name="line.261"></a>
+<span class="sourceLineNo">262</span> doPut(connection, row);<a name="line.262"></a>
+<span class="sourceLineNo">263</span> doPut(connection, Bytes.toBytes("row2"));<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> Waiter.waitFor(conf1, 60000, new Waiter.Predicate<Exception>() {<a name="line.266"></a>
+<span class="sourceLineNo">267</span> @Override<a name="line.267"></a>
+<span class="sourceLineNo">268</span> public boolean evaluate() throws Exception {<a name="line.268"></a>
+<span class="sourceLineNo">269</span> return ReplicationEndpointForTest.replicateCount.get() >= 1;<a name="line.269"></a>
+<span class="sourceLineNo">270</span> }<a name="line.270"></a>
+<span class="sourceLineNo">271</span> });<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span> Assert.assertNull(ReplicationEndpointWithWALEntryFilter.ex.get());<a name="line.273"></a>
+<span class="sourceLineNo">274</span> //make sure our reflectively created filter is in the filter chain<a name="line.274"></a>
+<span class="sourceLineNo">275</span> Assert.assertTrue(EverythingPassesWALEntryFilter.hasPassedAnEntry());<a name="line.275"></a>
+<span class="sourceLineNo">276</span> admin.removePeer("testWALEntryFilterFromReplicationEndpoint");<a name="line.276"></a>
+<span class="sourceLineNo">277</span> }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span> @Test (expected=IOException.class)<a name="line.279"></a>
+<span class="sourceLineNo">280</span> public void testWALEntryFilterAddValidation() throws Exception {<a name="line.280"></a>
+<span class="sourceLineNo">281</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.281"></a>
+<span class="sourceLineNo">282</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.282"></a>
+<span class="sourceLineNo">283</span> //test that we can create mutliple WALFilters reflectively<a name="line.283"></a>
+<span class="sourceLineNo">284</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.284"></a>
+<span class="sourceLineNo">285</span> "IAmNotARealWalEntryFilter");<a name="line.285"></a>
+<span class="sourceLineNo">286</span> admin.addPeer("testWALEntryFilterAddValidation", rpc);<a name="line.286"></a>
+<span class="sourceLineNo">287</span> }<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span> @Test (expected=IOException.class)<a name="line.289"></a>
+<span class="sourceLineNo">290</span> public void testWALEntryFilterUpdateValidation() throws Exception {<a name="line.290"></a>
+<span class="sourceLineNo">291</span> ReplicationPeerConfig rpc = new ReplicationPeerConfig().setClusterKey(ZKConfig.getZooKeeperClusterKey(conf1))<a name="line.291"></a>
+<span class="sourceLineNo">292</span> .setReplicationEndpointImpl(ReplicationEndpointWithWALEntryFilter.class.getName());<a name="line.292"></a>
+<span class="sourceLineNo">293</span> //test that we can create mutliple WALFilters reflectively<a name="line.293"></a>
+<span class="sourceLineNo">294</span> rpc.getConfiguration().put(BaseReplicationEndpoint.REPLICATION_WALENTRYFILTER_CONFIG_KEY,<a name="line.294"></a>
+<span class="sourceLineNo">295</span> "IAmNotARealWalEntryFilter");<a name="line.295"></a>
+<span class="sourceLineNo">296</span> admin.updatePeerConfig("testWALEntryFilterUpdateValidation", rpc);<a name="line.296"></a>
+<span class="sourceLineNo">297</span> }<a name="line.297"></a>
<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span> @Test<a name="line.299"></a>
-<span class="sourceLineNo">300</span> public void testMetricsSourceBaseSourcePassthrough(){<a name="line.300"></a>
-<span class="sourceLineNo">301</span> /*<a name="line.301"></a>
-<span class="sourceLineNo">302</span> The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.302"></a>
-<span class="sourceLineNo">303</span> and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.303"></a>
-<span class="sourceLineNo">304</span> Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.304"></a>
-<span class="sourceLineNo">305</span> allows for custom JMX metrics.<a name="line.305"></a>
-<span class="sourceLineNo">306</span> This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.306"></a>
-<span class="sourceLineNo">307</span> the two layers of wrapping to the actual BaseSource.<a name="line.307"></a>
-<span class="sourceLineNo">308</span> */<a name="line.308"></a>
-<span class="sourceLineNo">309</span> String id = "id";<a name="line.309"></a>
-<span class="sourceLineNo">310</span> DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.311"></a>
-<span class="sourceLineNo">312</span> when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.312"></a>
-<span class="sourceLineNo">313</span> MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.313"></a>
-<span class="sourceLineNo">314</span> when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span> MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.316"></a>
-<span class="sourceLineNo">317</span> MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> MetricsSource source = new MetricsSource(id, singleSourceSource, globalSourceSource);<a name="line.318"></a>
-<span class="sourceLineNo">319</span> String gaugeName = "gauge";<a name="line.319"></a>
-<span class="sourceLineNo">320</span> String singleGaugeName = "source.id." + gaugeName;<a name="line.320"></a>
-<span class="sourceLineNo">321</span> String globalGaugeName = "source." + gaugeName;<a name="line.321"></a>
-<span class="sourceLineNo">322</span> long delta = 1;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> String counterName = "counter";<a name="line.323"></a>
-<span class="sourceLineNo">324</span> String singleCounterName = "source.id." + counterName;<a name="line.324"></a>
-<span class="sourceLineNo">325</span> String globalCounterName = "source." + counterName;<a name="line.325"></a>
-<span class="sourceLineNo">326</span> long count = 2;<a name="line.326"></a>
-<span class="sourceLineNo">327</span> source.decGauge(gaugeName, delta);<a name="line.327"></a>
-<span class="sourceLineNo">328</span> source.getMetricsContext();<a name="line.328"></a>
-<span class="sourceLineNo">329</span> source.getMetricsDescription();<a name="line.329"></a>
-<span class="sourceLineNo">330</span> source.getMetricsJmxContext();<a name="line.330"></a>
-<span class="sourceLineNo">331</span> source.getMetricsName();<a name="line.331"></a>
-<span class="sourceLineNo">332</span> source.incCounters(counterName, count);<a name="line.332"></a>
-<span class="sourceLineNo">333</span> source.incGauge(gaugeName, delta);<a name="line.333"></a>
-<span class="sourceLineNo">334</span> source.init();<a name="line.334"></a>
-<span class="sourceLineNo">335</span> source.removeMetric(gaugeName);<a name="line.335"></a>
-<span class="sourceLineNo">336</span> source.setGauge(gaugeName, delta);<a name="line.336"></a>
-<span class="sourceLineNo">337</span> source.updateHistogram(counterName, count);<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.339"></a>
-<span class="sourceLineNo">340</span> verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.340"></a>
-<span class="sourceLineNo">341</span> verify(globalRms).getMetricsContext();<a name="line.341"></a>
-<span class="sourceLineNo">342</span> verify(globalRms).getMetricsJmxContext();<a name="line.342"></a>
-<span class="sourceLineNo">343</span> verify(globalRms).getMetricsName();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> verify(singleRms).incCounters(singleCounterName, count);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> verify(globalRms).incCounters(globalCounterName, count);<a name="line.345"></a>
-<span class="sourceLineNo">346</span> verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.346"></a>
-<span class="sourceLineNo">347</span> verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> verify(globalRms).init();<a name="line.348"></a>
-<span class="sourceLineNo">349</span> verify(singleRms).removeMetric(singleGaugeName);<a name="line.349"></a>
-<span class="sourceLineNo">350</span> verify(globalRms).removeMetric(globalGaugeName);<a name="line.350"></a>
-<span class="sourceLineNo">351</span> verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.351"></a>
-<span class="sourceLineNo">352</span> verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.352"></a>
-<span class="sourceLineNo">353</span> verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> verify(globalRms).updateHistogram(globalCounterName, count);<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 void doPut(byte[] row) throws IOException {<a name="line.357"></a>
-<span class="sourceLineNo">358</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> doPut(connection, row);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> }<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span> private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> try (Table t = connection.getTable(tableName)) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span> Put put = new Put(row);<a name="line.365"></a>
-<span class="sourceLineNo">366</span> put.addColumn(famName, row, row);<a name="line.366"></a>
-<span class="sourceLineNo">367</span> t.put(put);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> }<a name="line.368"></a>
-<span class="sourceLineNo">369</span> }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span> private static void doAssert(byte[] row) throws Exception {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span> return; // first call<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span> Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.375"></a>
-<span class="sourceLineNo">376</span> List<Cell> cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> Assert.assertEquals(1, cells.size());<a name="line.377"></a>
-<span class="sourceLineNo">378</span> Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.378"></a>
-<span class="sourceLineNo">379</span> cells.get(0).getRowLength(), row, 0, row.length));<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> static UUID uuid = UUID.randomUUID();<a name="line.383"></a>
-<span class="sourceLineNo">384</span> static AtomicInteger contructedCount = new AtomicInteger();<a name="line.384"></a>
-<span class="sourceLineNo">385</span> static AtomicInteger startedCount = new AtomicInteger();<a name="line.385"></a>
-<span class="sourceLineNo">386</span> static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.386"></a>
-<span class="sourceLineNo">387</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.387"></a>
-<span class="sourceLineNo">388</span> static volatile List<Entry> lastEntries = null;<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span> public ReplicationEndpointForTest() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span> replicateCount.set(0);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> contructedCount.incrementAndGet();<a name="line.392"></a>
-<span class="sourceLineNo">393</span> }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span> public UUID getPeerUUID() {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return uuid;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> }<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span> @Override<a name="line.400"></a>
-<span class="sourceLineNo">401</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> replicateCount.incrementAndGet();<a name="line.402"></a>
-<span class="sourceLineNo">403</span> lastEntries = new ArrayList<>(replicateContext.entries);<a name="line.403"></a>
-<span class="sourceLineNo">404</span> return true;<a name="line.404"></a>
-<span class="sourceLineNo">405</span> }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span> @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span> public void start() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span> startAsync();<a name="line.409"></a>
-<span class="sourceLineNo">410</span> }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span> @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span> public void stop() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> stopAsync();<a name="line.414"></a>
-<span class="sourceLineNo">415</span> }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span> @Override<a name="line.417"></a>
-<span class="sourceLineNo">418</span> protected void doStart() {<a name="line.418"></a>
-<span class="sourceLineNo">419</span> startedCount.incrementAndGet();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> notifyStarted();<a name="line.420"></a>
-<span class="sourceLineNo">421</span> }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span> @Override<a name="line.423"></a>
-<span class="sourceLineNo">424</span> protected void doStop() {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> stoppedCount.incrementAndGet();<a name="line.425"></a>
-<span class="sourceLineNo">426</span> notifyStopped();<a name="line.426"></a>
-<span class="sourceLineNo">427</span> }<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span> public static class InterClusterReplicationEndpointForTest<a name="line.430"></a>
-<span class="sourceLineNo">431</span> extends HBaseInterClusterReplicationEndpoint {<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.433"></a>
-<span class="sourceLineNo">434</span> static boolean failedOnce;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> public InterClusterReplicationEndpointForTest() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span> replicateCount.set(0);<a name="line.437"></a>
-<span class="sourceLineNo">438</span> }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span> @Override<a name="line.440"></a>
-<span class="sourceLineNo">441</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span> boolean success = super.replicate(replicateContext);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> if (success) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span> replicateCount.addAndGet(replicateContext.entries.size());<a name="line.444"></a>
-<span class="sourceLineNo">445</span> }<a name="line.445"></a>
-<span class="sourceLineNo">446</span> return success;<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> @Override<a name="line.449"></a>
-<span class="sourceLineNo">450</span> protected Replicator createReplicator(List<Entry> entries, int ordinal) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span> // Fail only once, we don't want to slow down the test.<a name="line.451"></a>
-<span class="sourceLineNo">452</span> if (failedOnce) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> return new DummyReplicator(entries, ordinal);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> } else {<a name="line.454"></a>
-<span class="sourceLineNo">455</span> failedOnce = true;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> return new FailingDummyReplicator(entries, ordinal);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> }<a name="line.457"></a>
-<span class="sourceLineNo">458</span> }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span> protected class DummyReplicator extends Replicator {<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span> private int ordinal;<a name="line.462"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span> @Test<a name="line.300"></a>
+<span class="sourceLineNo">301</span> public void testMetricsSourceBaseSourcePassthrough(){<a name="line.301"></a>
+<span class="sourceLineNo">302</span> /*<a name="line.302"></a>
+<span class="sourceLineNo">303</span> The replication MetricsSource wraps a MetricsReplicationSourceSourceImpl<a name="line.303"></a>
+<span class="sourceLineNo">304</span> and a MetricsReplicationGlobalSourceSource, so that metrics get written to both namespaces.<a name="line.304"></a>
+<span class="sourceLineNo">305</span> Both of those classes wrap a MetricsReplicationSourceImpl that implements BaseSource, which<a name="line.305"></a>
+<span class="sourceLineNo">306</span> allows for custom JMX metrics.<a name="line.306"></a>
+<span class="sourceLineNo">307</span> This test checks to make sure the BaseSource decorator logic on MetricsSource actually calls down through<a name="line.307"></a>
+<span class="sourceLineNo">308</span> the two layers of wrapping to the actual BaseSource.<a name="line.308"></a>
+<span class="sourceLineNo">309</span> */<a name="line.309"></a>
+<span class="sourceLineNo">310</span> String id = "id";<a name="line.310"></a>
+<span class="sourceLineNo">311</span> DynamicMetricsRegistry mockRegistry = mock(DynamicMetricsRegistry.class);<a name="line.311"></a>
+<span class="sourceLineNo">312</span> MetricsReplicationSourceImpl singleRms = mock(MetricsReplicationSourceImpl.class);<a name="line.312"></a>
+<span class="sourceLineNo">313</span> when(singleRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.313"></a>
+<span class="sourceLineNo">314</span> MetricsReplicationSourceImpl globalRms = mock(MetricsReplicationSourceImpl.class);<a name="line.314"></a>
+<span class="sourceLineNo">315</span> when(globalRms.getMetricsRegistry()).thenReturn(mockRegistry);<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span> MetricsReplicationSourceSource singleSourceSource = new MetricsReplicationSourceSourceImpl(singleRms, id);<a name="line.317"></a>
+<span class="sourceLineNo">318</span> MetricsReplicationSourceSource globalSourceSource = new MetricsReplicationGlobalSourceSource(globalRms);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> MetricsSource source = new MetricsSource(id, singleSourceSource, globalSourceSource);<a name="line.319"></a>
+<span class="sourceLineNo">320</span> String gaugeName = "gauge";<a name="line.320"></a>
+<span class="sourceLineNo">321</span> String singleGaugeName = "source.id." + gaugeName;<a name="line.321"></a>
+<span class="sourceLineNo">322</span> String globalGaugeName = "source." + gaugeName;<a name="line.322"></a>
+<span class="sourceLineNo">323</span> long delta = 1;<a name="line.323"></a>
+<span class="sourceLineNo">324</span> String counterName = "counter";<a name="line.324"></a>
+<span class="sourceLineNo">325</span> String singleCounterName = "source.id." + counterName;<a name="line.325"></a>
+<span class="sourceLineNo">326</span> String globalCounterName = "source." + counterName;<a name="line.326"></a>
+<span class="sourceLineNo">327</span> long count = 2;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> source.decGauge(gaugeName, delta);<a name="line.328"></a>
+<span class="sourceLineNo">329</span> source.getMetricsContext();<a name="line.329"></a>
+<span class="sourceLineNo">330</span> source.getMetricsDescription();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> source.getMetricsJmxContext();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> source.getMetricsName();<a name="line.332"></a>
+<span class="sourceLineNo">333</span> source.incCounters(counterName, count);<a name="line.333"></a>
+<span class="sourceLineNo">334</span> source.incGauge(gaugeName, delta);<a name="line.334"></a>
+<span class="sourceLineNo">335</span> source.init();<a name="line.335"></a>
+<span class="sourceLineNo">336</span> source.removeMetric(gaugeName);<a name="line.336"></a>
+<span class="sourceLineNo">337</span> source.setGauge(gaugeName, delta);<a name="line.337"></a>
+<span class="sourceLineNo">338</span> source.updateHistogram(counterName, count);<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> verify(singleRms).decGauge(singleGaugeName, delta);<a name="line.340"></a>
+<span class="sourceLineNo">341</span> verify(globalRms).decGauge(globalGaugeName, delta);<a name="line.341"></a>
+<span class="sourceLineNo">342</span> verify(globalRms).getMetricsContext();<a name="line.342"></a>
+<span class="sourceLineNo">343</span> verify(globalRms).getMetricsJmxContext();<a name="line.343"></a>
+<span class="sourceLineNo">344</span> verify(globalRms).getMetricsName();<a name="line.344"></a>
+<span class="sourceLineNo">345</span> verify(singleRms).incCounters(singleCounterName, count);<a name="line.345"></a>
+<span class="sourceLineNo">346</span> verify(globalRms).incCounters(globalCounterName, count);<a name="line.346"></a>
+<span class="sourceLineNo">347</span> verify(singleRms).incGauge(singleGaugeName, delta);<a name="line.347"></a>
+<span class="sourceLineNo">348</span> verify(globalRms).incGauge(globalGaugeName, delta);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> verify(globalRms).init();<a name="line.349"></a>
+<span class="sourceLineNo">350</span> verify(singleRms).removeMetric(singleGaugeName);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> verify(globalRms).removeMetric(globalGaugeName);<a name="line.351"></a>
+<span class="sourceLineNo">352</span> verify(singleRms).setGauge(singleGaugeName, delta);<a name="line.352"></a>
+<span class="sourceLineNo">353</span> verify(globalRms).setGauge(globalGaugeName, delta);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> verify(singleRms).updateHistogram(singleCounterName, count);<a name="line.354"></a>
+<span class="sourceLineNo">355</span> verify(globalRms).updateHistogram(globalCounterName, count);<a name="line.355"></a>
+<span class="sourceLineNo">356</span> }<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span> private void doPut(byte[] row) throws IOException {<a name="line.358"></a>
+<span class="sourceLineNo">359</span> try (Connection connection = ConnectionFactory.createConnection(conf1)) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span> doPut(connection, row);<a name="line.360"></a>
+<span class="sourceLineNo">361</span> }<a name="line.361"></a>
+<span class="sourceLineNo">362</span> }<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span> private void doPut(final Connection connection, final byte [] row) throws IOException {<a name="line.364"></a>
+<span class="sourceLineNo">365</span> try (Table t = connection.getTable(tableName)) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> Put put = new Put(row);<a name="line.366"></a>
+<span class="sourceLineNo">367</span> put.addColumn(famName, row, row);<a name="line.367"></a>
+<span class="sourceLineNo">368</span> t.put(put);<a name="line.368"></a>
+<span class="sourceLineNo">369</span> }<a name="line.369"></a>
+<span class="sourceLineNo">370</span> }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span> private static void doAssert(byte[] row) throws Exception {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> if (ReplicationEndpointForTest.lastEntries == null) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span> return; // first call<a name="line.374"></a>
+<span class="sourceLineNo">375</span> }<a name="line.375"></a>
+<span class="sourceLineNo">376</span> Assert.assertEquals(1, ReplicationEndpointForTest.lastEntries.size());<a name="line.376"></a>
+<span class="sourceLineNo">377</span> List<Cell> cells = ReplicationEndpointForTest.lastEntries.get(0).getEdit().getCells();<a name="line.377"></a>
+<span class="sourceLineNo">378</span> Assert.assertEquals(1, cells.size());<a name="line.378"></a>
+<span class="sourceLineNo">379</span> Assert.assertTrue(Bytes.equals(cells.get(0).getRowArray(), cells.get(0).getRowOffset(),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> cells.get(0).getRowLength(), row, 0, row.length));<a name="line.380"></a>
+<span class="sourceLineNo">381</span> }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span> public static class ReplicationEndpointForTest extends BaseReplicationEndpoint {<a name="line.383"></a>
+<span class="sourceLineNo">384</span> static UUID uuid = UUID.randomUUID();<a name="line.384"></a>
+<span class="sourceLineNo">385</span> static AtomicInteger contructedCount = new AtomicInteger();<a name="line.385"></a>
+<span class="sourceLineNo">386</span> static AtomicInteger startedCount = new AtomicInteger();<a name="line.386"></a>
+<span class="sourceLineNo">387</span> static AtomicInteger stoppedCount = new AtomicInteger();<a name="line.387"></a>
+<span class="sourceLineNo">388</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.388"></a>
+<span class="sourceLineNo">389</span> static volatile List<Entry> lastEntries = null;<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span> public ReplicationEndpointForTest() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> replicateCount.set(0);<a name="line.392"></a>
+<span class="sourceLineNo">393</span> contructedCount.incrementAndGet();<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span> @Override<a name="line.396"></a>
+<span class="sourceLineNo">397</span> public UUID getPeerUUID() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> return uuid;<a name="line.398"></a>
+<span class="sourceLineNo">399</span> }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> @Override<a name="line.401"></a>
+<span class="sourceLineNo">402</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span> replicateCount.incrementAndGet();<a name="line.403"></a>
+<span class="sourceLineNo">404</span> lastEntries = new ArrayList<>(replicateContext.entries);<a name="line.404"></a>
+<span class="sourceLineNo">405</span> return true;<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> @Override<a name="line.408"></a>
+<span class="sourceLineNo">409</span> public void start() {<a name="line.409"></a>
+<span class="sourceLineNo">410</span> startAsync();<a name="line.410"></a>
+<span class="sourceLineNo">411</span> }<a name="line.411"></a>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span> @Override<a name="line.413"></a>
+<span class="sourceLineNo">414</span> public void stop() {<a name="line.414"></a>
+<span class="sourceLineNo">415</span> stopAsync();<a name="line.415"></a>
+<span class="sourceLineNo">416</span> }<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span> @Override<a name="line.418"></a>
+<span class="sourceLineNo">419</span> protected void doStart() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span> startedCount.incrementAndGet();<a name="line.420"></a>
+<span class="sourceLineNo">421</span> notifyStarted();<a name="line.421"></a>
+<span class="sourceLineNo">422</span> }<a name="line.422"></a>
+<span class="sourceLineNo">423</span><a name="line.423"></a>
+<span class="sourceLineNo">424</span> @Override<a name="line.424"></a>
+<span class="sourceLineNo">425</span> protected void doStop() {<a name="line.425"></a>
+<span class="sourceLineNo">426</span> stoppedCount.incrementAndGet();<a name="line.426"></a>
+<span class="sourceLineNo">427</span> notifyStopped();<a name="line.427"></a>
+<span class="sourceLineNo">428</span> }<a name="line.428"></a>
+<span class="sourceLineNo">429</span> }<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span> public static class InterClusterReplicationEndpointForTest<a name="line.431"></a>
+<span class="sourceLineNo">432</span> extends HBaseInterClusterReplicationEndpoint {<a name="line.432"></a>
+<span class="sourceLineNo">433</span><a name="line.433"></a>
+<span class="sourceLineNo">434</span> static AtomicInteger replicateCount = new AtomicInteger();<a name="line.434"></a>
+<span class="sourceLineNo">435</span> static boolean failedOnce;<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span> public InterClusterReplicationEndpointForTest() {<a name="line.437"></a>
+<span class="sourceLineNo">438</span> replicateCount.set(0);<a name="line.438"></a>
+<span class="sourceLineNo">439</span> }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span> @Override<a name="line.441"></a>
+<span class="sourceLineNo">442</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span> boolean success = super.replicate(replicateContext);<a name="line.443"></a>
+<span class="sourceLineNo">444</span> if (success) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span> replicateCount.addAndGet(replicateContext.entries.size());<a name="line.445"></a>
+<span class="sourceLineNo">446</span> }<a name="line.446"></a>
+<span class="sourceLineNo">447</span> return success;<a name="line.447"></a>
+<span class="sourceLineNo">448</span> }<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> protected Callable<Integer> createReplicator(List<Entry> entries, int ordinal) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span> // Fail only once, we don't want to slow down the test.<a name="line.452"></a>
+<span class="sourceLineNo">453</span> if (failedOnce) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span> return () -> ordinal;<a name="line.454"></a>
+<span class="sourceLineNo">455</span> } else {<a name="line.455"></a>
+<span class="sourceLineNo">456</span> failedOnce = true;<a name="line.456"></a>
+<span class="sourceLineNo">457</span> return () -> {<a name="line.457"></a>
+<span class="sourceLineNo">458</span> throw new IOException("Sample Exception: Failed to replicate.");<a name="line.458"></a>
+<span class="sourceLineNo">459</span> };<a name="line.459"></a>
+<span class="sourceLineNo">460</span> }<a name="line.460"></a>
+<span class="sourceLineNo">461</span> }<a name="line.461"></a>
+<span class="sourceLineNo">462</span> }<a name="line.462"></a>
<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span> public DummyReplicator(List<Entry> entries, int ordinal) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> super(entries, ordinal);<a name="line.465"></a>
-<span class="sourceLineNo">466</span> this.ordinal = ordinal;<a name="line.466"></a>
-<span class="sourceLineNo">467</span> }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span> @Override<a name="line.469"></a>
-<span class="sourceLineNo">470</span> public Integer call() throws IOException {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> return ordin
<TRUNCATED>
[42/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html
index 2df47c7..05289a3 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":9,"i22":10,"i23":9,"i24":9,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":9,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":9,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":9,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":9,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":9,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i109":9,"
i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10,"i131":10,"i132":10,"i133":10,"i134":10,"i135":10,"i136":10,"i137":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":9,"i23":10,"i24":9,"i25":9,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":9,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":9,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":9,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":9,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":9,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i109":10,
"i110":10,"i111":10,"i112":9,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10,"i131":10,"i132":10,"i133":10,"i134":10,"i135":10,"i136":10,"i137":10,"i138":10,"i139":10,"i140":10};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -120,7 +120,7 @@ var activeTableTab = "activeTableTab";
<br>
<pre>@InterfaceAudience.LimitedPrivate(value="Tools")
@InterfaceStability.Evolving
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.204">HBaseFsck</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.212">HBaseFsck</a>
extends org.apache.hadoop.conf.Configured
implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></pre>
<div class="block">HBaseFsck (hbck) is a tool for checking and repairing region consistency and
@@ -303,6 +303,14 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#checkRegionBoundaries">checkRegionBoundaries</a></span></code> </td>
</tr>
<tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#cleanReplicationBarrier">cleanReplicationBarrier</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#cleanReplicationBarrierTable">cleanReplicationBarrierTable</a></span></code> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code>(package private) static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#cmp">cmp</a></span></code> </td>
</tr>
@@ -703,59 +711,63 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
</td>
</tr>
<tr id="i14" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#cleanReplicationBarrier--">cleanReplicationBarrier</a></span>()</code> </td>
+</tr>
+<tr id="i15" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#cleanupHbckZnode--">cleanupHbckZnode</a></span>()</code> </td>
</tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#clearState--">clearState</a></span>()</code>
<div class="block">Clear the current state of hbck.</div>
</td>
</tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#close--">close</a></span>()</code> </td>
</tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#closeRegion-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">closeRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hi)</code>
<div class="block">Attempts to undeploy a region from a region server based in information in
META.</div>
</td>
</tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#connect--">connect</a></span>()</code>
<div class="block">To repair region consistency, one must call connect() in order to repair
online state.</div>
</td>
</tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
<td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#createHFileCorruptionChecker-boolean-">createHFileCorruptionChecker</a></span>(boolean sidelineCorruptHFiles)</code> </td>
</tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#createNewMeta-java.lang.String-">createNewMeta</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> walFactoryID)</code>
<div class="block">This borrows code from MasterFileSystem.bootstrap().</div>
</td>
</tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#createThreadPool-org.apache.hadoop.conf.Configuration-">createThreadPool</a></span>(org.apache.hadoop.conf.Configuration conf)</code> </td>
</tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#createZooKeeperWatcher--">createZooKeeperWatcher</a></span>()</code> </td>
</tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
<td class="colFirst"><code>static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#debugLsr-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.Path-">debugLsr</a></span>(org.apache.hadoop.conf.Configuration conf,
org.apache.hadoop.fs.Path p)</code>
<div class="block">ls -r for debugging purposes</div>
</td>
</tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
<td class="colFirst"><code>static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#debugLsr-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter-">debugLsr</a></span>(org.apache.hadoop.conf.Configuration conf,
org.apache.hadoop.fs.Path p,
@@ -763,38 +775,38 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<div class="block">ls -r for debugging purposes</div>
</td>
</tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#debugLsr-org.apache.hadoop.fs.Path-">debugLsr</a></span>(org.apache.hadoop.fs.Path p)</code>
<div class="block">ls -r for debugging purposes</div>
</td>
</tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#deleteMetaRegion-byte:A-">deleteMetaRegion</a></span>(byte[] metaKey)</code>
<div class="block">Deletes region from meta table</div>
</td>
</tr>
-<tr id="i27" class="rowColor">
+<tr id="i28" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#deleteMetaRegion-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">deleteMetaRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hi)</code>
<div class="block">Deletes region from meta table</div>
</td>
</tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#dumpOverlapProblems-org.apache.hbase.thirdparty.com.google.common.collect.Multimap-">dumpOverlapProblems</a></span>(org.apache.hbase.thirdparty.com.google.common.collect.Multimap<byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> regions)</code> </td>
</tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#dumpSidelinedRegions-java.util.Map-">dumpSidelinedRegions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a><org.apache.hadoop.fs.Path,<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> regions)</code> </td>
</tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#exec-java.util.concurrent.ExecutorService-java.lang.String:A-">exec</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> exec,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)</code> </td>
</tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#fabricateTableInfo-org.apache.hadoop.hbase.util.FSTableDescriptors-org.apache.hadoop.hbase.TableName-java.util.Set-">fabricateTableInfo</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/FSTableDescriptors.html" title="class in org.apache.hadoop.hbase.util">FSTableDescriptors</a> fstd,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
@@ -803,84 +815,84 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
1.</div>
</td>
</tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#fixEmptyMetaCells--">fixEmptyMetaCells</a></span>()</code>
<div class="block">To fix the empty REGIONINFO_QUALIFIER rows from hbase:meta <br></div>
</td>
</tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#fixOrphanTables--">fixOrphanTables</a></span>()</code>
<div class="block">To fix orphan table by creating a .tableinfo file under tableDir <br>
1.</div>
</td>
</tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#generatePuts-java.util.SortedMap-">generatePuts</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>> tablesInfo)</code>
<div class="block">Generate set of puts to add to new meta.</div>
</td>
</tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#getColumnFamilyList-java.util.Set-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">getColumnFamilyList</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> columns,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hbi)</code>
<div class="block">To get the column family list according to the column family dirs</div>
</td>
</tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
<td class="colFirst"><code>(package private) static <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#getErrorReporter-org.apache.hadoop.conf.Configuration-">getErrorReporter</a></span>(org.apache.hadoop.conf.Configuration conf)</code> </td>
</tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#getErrors--">getErrors</a></span>()</code> </td>
</tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#getHFilecorruptionChecker--">getHFilecorruptionChecker</a></span>()</code> </td>
</tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
<td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#getIncludedTables--">getIncludedTables</a></span>()</code> </td>
</tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#getMaxMerge--">getMaxMerge</a></span>()</code> </td>
</tr>
-<tr id="i41" class="rowColor">
+<tr id="i42" class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#getMaxOverlapsToSideline--">getMaxOverlapsToSideline</a></span>()</code> </td>
</tr>
-<tr id="i42" class="altColor">
+<tr id="i43" class="rowColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#getMetaRegionServerName-int-">getMetaRegionServerName</a></span>(int replicaId)</code> </td>
</tr>
-<tr id="i43" class="rowColor">
+<tr id="i44" class="altColor">
<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#getOrCreateInfo-java.lang.String-">getOrCreateInfo</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> name)</code>
<div class="block">Gets the entry in regionInfo corresponding to the the given encoded
region name.</div>
</td>
</tr>
-<tr id="i44" class="altColor">
+<tr id="i45" class="rowColor">
<td class="colFirst"><code>org.apache.hbase.thirdparty.com.google.common.collect.Multimap<byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#getOverlapGroups-org.apache.hadoop.hbase.TableName-">getOverlapGroups</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)</code> </td>
</tr>
-<tr id="i45" class="rowColor">
+<tr id="i46" class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#getRetCode--">getRetCode</a></span>()</code> </td>
</tr>
-<tr id="i46" class="altColor">
+<tr id="i47" class="rowColor">
<td class="colFirst"><code>private org.apache.hadoop.fs.Path</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#getSidelineDir--">getSidelineDir</a></span>()</code> </td>
</tr>
-<tr id="i47" class="rowColor">
+<tr id="i48" class="altColor">
<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#getTableDescriptors-java.util.List-">getTableDescriptors</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>> tableNames)</code> </td>
</tr>
-<tr id="i48" class="altColor">
+<tr id="i49" class="rowColor">
<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#getTables-java.util.concurrent.atomic.AtomicInteger-">getTables</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> numSkipped)</code>
<div class="block">Return a list of user-space table names whose metadata have not been
@@ -890,422 +902,430 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
milliseconds specified by timelag, then the table is a candidate to be returned.</div>
</td>
</tr>
-<tr id="i49" class="rowColor">
+<tr id="i50" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#includeTable-org.apache.hadoop.hbase.TableName-">includeTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)</code> </td>
</tr>
-<tr id="i50" class="altColor">
+<tr id="i51" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#isExclusive--">isExclusive</a></span>()</code>
<div class="block">Only one instance of hbck can modify HBase at a time.</div>
</td>
</tr>
-<tr id="i51" class="rowColor">
+<tr id="i52" class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#isOptionsSupported-java.lang.String:A-">isOptionsSupported</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)</code> </td>
</tr>
-<tr id="i52" class="altColor">
+<tr id="i53" class="rowColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#isTableDisabled-org.apache.hadoop.hbase.TableName-">isTableDisabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</code>
<div class="block">Check if the specified region's table is disabled.</div>
</td>
</tr>
-<tr id="i53" class="rowColor">
+<tr id="i54" class="altColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#isTableIncluded-org.apache.hadoop.hbase.TableName-">isTableIncluded</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> table)</code>
<div class="block">Only check/fix tables specified by the list,
Empty list means all tables are included.</div>
</td>
</tr>
-<tr id="i54" class="altColor">
+<tr id="i55" class="rowColor">
<td class="colFirst"><code>static byte[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#keyOnly-byte:A-">keyOnly</a></span>(byte[] b)</code> </td>
</tr>
-<tr id="i55" class="rowColor">
+<tr id="i56" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#loadDeployedRegions--">loadDeployedRegions</a></span>()</code>
<div class="block">Get deployed regions according to the region servers.</div>
</td>
</tr>
-<tr id="i56" class="altColor">
+<tr id="i57" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#loadHdfsRegionDirs--">loadHdfsRegionDirs</a></span>()</code>
<div class="block">Scan HDFS for all regions, recording their information into
regionInfoMap</div>
</td>
</tr>
-<tr id="i57" class="rowColor">
+<tr id="i58" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#loadHdfsRegioninfo-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">loadHdfsRegioninfo</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hbi)</code>
<div class="block">Read the .regioninfo file from the file system.</div>
</td>
</tr>
-<tr id="i58" class="altColor">
+<tr id="i59" class="rowColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#loadHdfsRegionInfos--">loadHdfsRegionInfos</a></span>()</code>
<div class="block">Populate hbi's from regionInfos loaded from file system.</div>
</td>
</tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" class="altColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#loadMetaEntries--">loadMetaEntries</a></span>()</code>
<div class="block">Scan hbase:meta, adding all regions found to the regionInfo map.</div>
</td>
</tr>
-<tr id="i60" class="altColor">
+<tr id="i61" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#loadTableInfosForTablesWithNoRegion--">loadTableInfosForTablesWithNoRegion</a></span>()</code>
<div class="block">Loads table info's for tables that may not have been included, since there are no
regions reported for the table, but table dir is there in hdfs</div>
</td>
</tr>
-<tr id="i61" class="rowColor">
+<tr id="i62" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#loadTableStates--">loadTableStates</a></span>()</code>
<div class="block">Load the list of disabled tables in ZK into local set.</div>
</td>
</tr>
-<tr id="i62" class="altColor">
+<tr id="i63" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#logParallelMerge--">logParallelMerge</a></span>()</code>
<div class="block">Log an appropriate message about whether or not overlapping merges are computed in parallel.</div>
</td>
</tr>
-<tr id="i63" class="rowColor">
+<tr id="i64" class="altColor">
<td class="colFirst"><code>static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#main-java.lang.String:A-">main</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)</code>
<div class="block">Main program</div>
</td>
</tr>
-<tr id="i64" class="altColor">
+<tr id="i65" class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#mergeRegionDirs-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">mergeRegionDirs</a></span>(org.apache.hadoop.fs.Path targetRegionDir,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> contained)</code>
<div class="block">Merge hdfs data by moving from contained HbckInfo into targetRegionDir.</div>
</td>
</tr>
-<tr id="i65" class="rowColor">
+<tr id="i66" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#offline-byte:A-">offline</a></span>(byte[] regionName)</code>
<div class="block">This backwards-compatibility wrapper for permanently offlining a region
that should not be alive.</div>
</td>
</tr>
-<tr id="i66" class="altColor">
+<tr id="i67" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#offlineHdfsIntegrityRepair--">offlineHdfsIntegrityRepair</a></span>()</code>
<div class="block">This repair method analyzes hbase data in hdfs and repairs it to satisfy
the table integrity rules.</div>
</td>
</tr>
-<tr id="i67" class="rowColor">
+<tr id="i68" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#offlineHLinkFileRepair--">offlineHLinkFileRepair</a></span>()</code>
<div class="block">Scan all the store file names to find any lingering HFileLink files,
which refer to some none-exiting files.</div>
</td>
</tr>
-<tr id="i68" class="altColor">
+<tr id="i69" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#offlineReferenceFileRepair--">offlineReferenceFileRepair</a></span>()</code>
<div class="block">Scan all the store file names to find any lingering reference files,
which refer to some none-exiting files.</div>
</td>
</tr>
-<tr id="i69" class="rowColor">
+<tr id="i70" class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#onlineConsistencyRepair--">onlineConsistencyRepair</a></span>()</code>
<div class="block">This repair method requires the cluster to be online since it contacts
region servers and the masters.</div>
</td>
</tr>
-<tr id="i70" class="altColor">
+<tr id="i71" class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#onlineHbck--">onlineHbck</a></span>()</code>
<div class="block">Contacts the master and prints out cluster-wide information</div>
</td>
</tr>
-<tr id="i71" class="rowColor">
+<tr id="i72" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#preCheckPermission--">preCheckPermission</a></span>()</code> </td>
</tr>
-<tr id="i72" class="altColor">
+<tr id="i73" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#printTableSummary-java.util.SortedMap-">printTableSummary</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>> tablesInfo)</code>
<div class="block">Prints summary of all tables found on the system.</div>
</td>
</tr>
-<tr id="i73" class="rowColor">
+<tr id="i74" class="altColor">
<td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#printUsageAndExit--">printUsageAndExit</a></span>()</code> </td>
</tr>
-<tr id="i74" class="altColor">
+<tr id="i75" class="rowColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#processRegionServers-java.util.Collection-">processRegionServers</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> regionServerList)</code>
<div class="block">Contacts each regionserver and fetches metadata about regions.</div>
</td>
</tr>
-<tr id="i75" class="rowColor">
+<tr id="i76" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#rebuildMeta-boolean-">rebuildMeta</a></span>(boolean fix)</code>
<div class="block">Rebuilds meta from information in hdfs/fs.</div>
</td>
</tr>
-<tr id="i76" class="altColor">
+<tr id="i77" class="rowColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#recordMetaRegion--">recordMetaRegion</a></span>()</code>
<div class="block">Record the location of the hbase:meta region as found in ZooKeeper.</div>
</td>
</tr>
-<tr id="i77" class="rowColor">
+<tr id="i78" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#removeHBCKMetaRecoveryWALDir-java.lang.String-">removeHBCKMetaRecoveryWALDir</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> walFactoryId)</code>
<div class="block">Removes the empty Meta recovery WAL directory.</div>
</td>
</tr>
-<tr id="i78" class="altColor">
+<tr id="i79" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#reportEmptyMetaCells--">reportEmptyMetaCells</a></span>()</code>
<div class="block">TODO -- need to add tests for this.</div>
</td>
</tr>
-<tr id="i79" class="rowColor">
+<tr id="i80" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#reportTablesInFlux--">reportTablesInFlux</a></span>()</code>
<div class="block">TODO -- need to add tests for this.</div>
</td>
</tr>
-<tr id="i80" class="altColor">
+<tr id="i81" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#resetSplitParent-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">resetSplitParent</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hi)</code>
<div class="block">Reset the split parent region info in meta table</div>
</td>
</tr>
-<tr id="i81" class="rowColor">
+<tr id="i82" class="altColor">
<td class="colFirst"><code>private int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#restoreHdfsIntegrity--">restoreHdfsIntegrity</a></span>()</code>
<div class="block">This method determines if there are table integrity errors in HDFS.</div>
</td>
</tr>
-<tr id="i82" class="altColor">
+<tr id="i83" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setCheckHdfs-boolean-">setCheckHdfs</a></span>(boolean checking)</code> </td>
</tr>
-<tr id="i83" class="rowColor">
+<tr id="i84" class="altColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setCheckMetaOnly--">setCheckMetaOnly</a></span>()</code>
<div class="block">Set hbase:meta check mode.</div>
</td>
</tr>
-<tr id="i84" class="altColor">
+<tr id="i85" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setCleanReplicationBarrier-boolean-">setCleanReplicationBarrier</a></span>(boolean shouldClean)</code> </td>
+</tr>
+<tr id="i86" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setCleanReplicationBarrierTable-java.lang.String-">setCleanReplicationBarrierTable</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> cleanReplicationBarrierTable)</code> </td>
+</tr>
+<tr id="i87" class="rowColor">
<td class="colFirst"><code>static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setDisplayFullReport--">setDisplayFullReport</a></span>()</code>
<div class="block">Display the full report from fsck.</div>
</td>
</tr>
-<tr id="i85" class="rowColor">
+<tr id="i88" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setFixAssignments-boolean-">setFixAssignments</a></span>(boolean shouldFix)</code>
<div class="block">Fix inconsistencies found by fsck.</div>
</td>
</tr>
-<tr id="i86" class="altColor">
+<tr id="i89" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setFixEmptyMetaCells-boolean-">setFixEmptyMetaCells</a></span>(boolean shouldFix)</code> </td>
</tr>
-<tr id="i87" class="rowColor">
+<tr id="i90" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setFixHdfsHoles-boolean-">setFixHdfsHoles</a></span>(boolean shouldFix)</code> </td>
</tr>
-<tr id="i88" class="altColor">
+<tr id="i91" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setFixHdfsOrphans-boolean-">setFixHdfsOrphans</a></span>(boolean shouldFix)</code> </td>
</tr>
-<tr id="i89" class="rowColor">
+<tr id="i92" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setFixHdfsOverlaps-boolean-">setFixHdfsOverlaps</a></span>(boolean shouldFix)</code> </td>
</tr>
-<tr id="i90" class="altColor">
+<tr id="i93" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setFixHFileLinks-boolean-">setFixHFileLinks</a></span>(boolean shouldFix)</code> </td>
</tr>
-<tr id="i91" class="rowColor">
+<tr id="i94" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setFixMeta-boolean-">setFixMeta</a></span>(boolean shouldFix)</code> </td>
</tr>
-<tr id="i92" class="altColor">
+<tr id="i95" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setFixReferenceFiles-boolean-">setFixReferenceFiles</a></span>(boolean shouldFix)</code> </td>
</tr>
-<tr id="i93" class="rowColor">
+<tr id="i96" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setFixReplication-boolean-">setFixReplication</a></span>(boolean shouldFix)</code>
<div class="block">Set replication fix mode.</div>
</td>
</tr>
-<tr id="i94" class="altColor">
+<tr id="i97" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setFixSplitParents-boolean-">setFixSplitParents</a></span>(boolean shouldFix)</code> </td>
</tr>
-<tr id="i95" class="rowColor">
+<tr id="i98" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setFixTableOrphans-boolean-">setFixTableOrphans</a></span>(boolean shouldFix)</code> </td>
</tr>
-<tr id="i96" class="altColor">
+<tr id="i99" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setFixVersionFile-boolean-">setFixVersionFile</a></span>(boolean shouldFix)</code> </td>
</tr>
-<tr id="i97" class="rowColor">
+<tr id="i100" class="altColor">
<td class="colFirst"><code>static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setForceExclusive--">setForceExclusive</a></span>()</code>
<div class="block">Set exclusive mode.</div>
</td>
</tr>
-<tr id="i98" class="altColor">
+<tr id="i101" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setHFileCorruptionChecker-org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker-">setHFileCorruptionChecker</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a> hfcc)</code> </td>
</tr>
-<tr id="i99" class="rowColor">
+<tr id="i102" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setIgnorePreCheckPermission-boolean-">setIgnorePreCheckPermission</a></span>(boolean ignorePreCheckPermission)</code> </td>
</tr>
-<tr id="i100" class="altColor">
+<tr id="i103" class="rowColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setMasterInMaintenanceMode--">setMasterInMaintenanceMode</a></span>()</code>
<div class="block">This method maintains an ephemeral znode.</div>
</td>
</tr>
-<tr id="i101" class="rowColor">
+<tr id="i104" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setMaxMerge-int-">setMaxMerge</a></span>(int mm)</code> </td>
</tr>
-<tr id="i102" class="altColor">
+<tr id="i105" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setMaxOverlapsToSideline-int-">setMaxOverlapsToSideline</a></span>(int mo)</code> </td>
</tr>
-<tr id="i103" class="rowColor">
+<tr id="i106" class="altColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setRegionBoundariesCheck--">setRegionBoundariesCheck</a></span>()</code>
<div class="block">Set region boundaries check mode.</div>
</td>
</tr>
-<tr id="i104" class="altColor">
+<tr id="i107" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setRemoveParents-boolean-">setRemoveParents</a></span>(boolean shouldFix)</code> </td>
</tr>
-<tr id="i105" class="rowColor">
+<tr id="i108" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setRetCode-int-">setRetCode</a></span>(int code)</code> </td>
</tr>
-<tr id="i106" class="altColor">
+<tr id="i109" class="rowColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setShouldRerun--">setShouldRerun</a></span>()</code>
<div class="block">Check if we should rerun fsck again.</div>
</td>
</tr>
-<tr id="i107" class="rowColor">
+<tr id="i110" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setSidelineBigOverlaps-boolean-">setSidelineBigOverlaps</a></span>(boolean sbo)</code> </td>
</tr>
-<tr id="i108" class="altColor">
+<tr id="i111" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setSidelineDir-java.lang.String-">setSidelineDir</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> sidelineDir)</code> </td>
</tr>
-<tr id="i109" class="rowColor">
+<tr id="i112" class="altColor">
<td class="colFirst"><code>(package private) static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setSummary--">setSummary</a></span>()</code>
<div class="block">Set summary mode.</div>
</td>
</tr>
-<tr id="i110" class="altColor">
+<tr id="i113" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#setTimeLag-long-">setTimeLag</a></span>(long seconds)</code>
<div class="block">We are interested in only those tables that have not changed their state in
hbase:meta during the last few seconds specified by hbase.admin.fsck.timelag</div>
</td>
</tr>
-<tr id="i111" class="rowColor">
+<tr id="i114" class="altColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldCheckHdfs--">shouldCheckHdfs</a></span>()</code> </td>
</tr>
-<tr id="i112" class="altColor">
+<tr id="i115" class="rowColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldFixAssignments--">shouldFixAssignments</a></span>()</code> </td>
</tr>
-<tr id="i113" class="rowColor">
+<tr id="i116" class="altColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldFixEmptyMetaCells--">shouldFixEmptyMetaCells</a></span>()</code> </td>
</tr>
-<tr id="i114" class="altColor">
+<tr id="i117" class="rowColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldFixHdfsHoles--">shouldFixHdfsHoles</a></span>()</code> </td>
</tr>
-<tr id="i115" class="rowColor">
+<tr id="i118" class="altColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldFixHdfsOrphans--">shouldFixHdfsOrphans</a></span>()</code> </td>
</tr>
-<tr id="i116" class="altColor">
+<tr id="i119" class="rowColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldFixHdfsOverlaps--">shouldFixHdfsOverlaps</a></span>()</code> </td>
</tr>
-<tr id="i117" class="rowColor">
+<tr id="i120" class="altColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldFixHFileLinks--">shouldFixHFileLinks</a></span>()</code> </td>
</tr>
-<tr id="i118" class="altColor">
+<tr id="i121" class="rowColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldFixMeta--">shouldFixMeta</a></span>()</code> </td>
</tr>
-<tr id="i119" class="rowColor">
+<tr id="i122" class="altColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldFixReferenceFiles--">shouldFixReferenceFiles</a></span>()</code> </td>
</tr>
-<tr id="i120" class="altColor">
+<tr id="i123" class="rowColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldFixSplitParents--">shouldFixSplitParents</a></span>()</code> </td>
</tr>
-<tr id="i121" class="rowColor">
+<tr id="i124" class="altColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldFixTableOrphans--">shouldFixTableOrphans</a></span>()</code> </td>
</tr>
-<tr id="i122" class="altColor">
+<tr id="i125" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldFixVersionFile--">shouldFixVersionFile</a></span>()</code> </td>
</tr>
-<tr id="i123" class="rowColor">
+<tr id="i126" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldIgnorePreCheckPermission--">shouldIgnorePreCheckPermission</a></span>()</code> </td>
</tr>
-<tr id="i124" class="altColor">
+<tr id="i127" class="rowColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldRemoveParents--">shouldRemoveParents</a></span>()</code> </td>
</tr>
-<tr id="i125" class="rowColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
+<tr id="i128" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldRerun--">shouldRerun</a></span>()</code> </td>
</tr>
-<tr id="i126" class="altColor">
+<tr id="i129" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#shouldSidelineBigOverlaps--">shouldSidelineBigOverlaps</a></span>()</code> </td>
</tr>
-<tr id="i127" class="rowColor">
+<tr id="i130" class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#sidelineFile-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">sidelineFile</a></span>(org.apache.hadoop.fs.FileSystem fs,
org.apache.hadoop.fs.Path hbaseRoot,
org.apache.hadoop.fs.Path path)</code> </td>
</tr>
-<tr id="i128" class="altColor">
+<tr id="i131" class="rowColor">
<td class="colFirst"><code>(package private) org.apache.hadoop.fs.Path</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#sidelineOldMeta--">sidelineOldMeta</a></span>()</code> </td>
</tr>
-<tr id="i129" class="rowColor">
+<tr id="i132" class="altColor">
<td class="colFirst"><code>(package private) org.apache.hadoop.fs.Path</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#sidelineRegionDir-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">sidelineRegionDir</a></span>(org.apache.hadoop.fs.FileSystem fs,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hi)</code>
<div class="block">Sideline a region dir (instead of deleting it)</div>
</td>
</tr>
-<tr id="i130" class="altColor">
+<tr id="i133" class="rowColor">
<td class="colFirst"><code>(package private) org.apache.hadoop.fs.Path</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#sidelineRegionDir-org.apache.hadoop.fs.FileSystem-java.lang.String-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">sidelineRegionDir</a></span>(org.apache.hadoop.fs.FileSystem fs,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> parentDir,
@@ -1313,7 +1333,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<div class="block">Sideline a region dir (instead of deleting it)</div>
</td>
</tr>
-<tr id="i131" class="rowColor">
+<tr id="i134" class="altColor">
<td class="colFirst"><code>(package private) void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#sidelineTable-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.hbase.TableName-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">sidelineTable</a></span>(org.apache.hadoop.fs.FileSystem fs,
<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName,
@@ -1322,30 +1342,30 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<div class="block">Side line an entire table.</div>
</td>
</tr>
-<tr id="i132" class="altColor">
+<tr id="i135" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#suggestFixes-java.util.SortedMap-">suggestFixes</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>> tablesInfo)</code>
<div class="block">Suggest fixes for each table</div>
</td>
</tr>
-<tr id="i133" class="rowColor">
+<tr id="i136" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#tryAssignmentRepair-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-java.lang.String-">tryAssignmentRepair</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hbi,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> msg)</code> </td>
</tr>
-<tr id="i134" class="altColor">
+<tr id="i137" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#unassignMetaReplica-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">unassignMetaReplica</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hi)</code> </td>
</tr>
-<tr id="i135" class="rowColor">
+<tr id="i138" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#undeployRegions-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">undeployRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hi)</code> </td>
</tr>
-<tr id="i136" class="altColor">
+<tr id="i139" class="rowColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#undeployRegionsForHbi-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">undeployRegionsForHbi</a></span>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> hi)</code> </td>
</tr>
-<tr id="i137" class="rowColor">
+<tr id="i140" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#unlockHbck--">unlockHbck</a></span>()</code> </td>
</tr>
@@ -1384,7 +1404,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_TIME_LAG</h4>
-<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.205">DEFAULT_TIME_LAG</a></pre>
+<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.213">DEFAULT_TIME_LAG</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.DEFAULT_TIME_LAG">Constant Field Values</a></dd>
@@ -1397,7 +1417,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_SLEEP_BEFORE_RERUN</h4>
-<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.206">DEFAULT_SLEEP_BEFORE_RERUN</a></pre>
+<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.214">DEFAULT_SLEEP_BEFORE_RERUN</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.DEFAULT_SLEEP_BEFORE_RERUN">Constant Field Values</a></dd>
@@ -1410,7 +1430,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>MAX_NUM_THREADS</h4>
-<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.207">MAX_NUM_THREADS</a></pre>
+<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.215">MAX_NUM_THREADS</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.MAX_NUM_THREADS">Constant Field Values</a></dd>
@@ -1423,7 +1443,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>rsSupportsOffline</h4>
-<pre>private static boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.208">rsSupportsOffline</a></pre>
+<pre>private static boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.216">rsSupportsOffline</a></pre>
</li>
</ul>
<a name="DEFAULT_OVERLAPS_TO_SIDELINE">
@@ -1432,7 +1452,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_OVERLAPS_TO_SIDELINE</h4>
-<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.209">DEFAULT_OVERLAPS_TO_SIDELINE</a></pre>
+<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.217">DEFAULT_OVERLAPS_TO_SIDELINE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.DEFAULT_OVERLAPS_TO_SIDELINE">Constant Field Values</a></dd>
@@ -1445,7 +1465,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_MAX_MERGE</h4>
-<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.210">DEFAULT_MAX_MERGE</a></pre>
+<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.218">DEFAULT_MAX_MERGE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.DEFAULT_MAX_MERGE">Constant Field Values</a></dd>
@@ -1458,7 +1478,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>TO_BE_LOADED</h4>
-<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.211">TO_BE_LOADED</a></pre>
+<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.219">TO_BE_LOADED</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.TO_BE_LOADED">Constant Field Values</a></dd>
@@ -1471,7 +1491,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>HBCK_LOCK_FILE</h4>
-<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.212">HBCK_LOCK_FILE</a></pre>
+<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.220">HBCK_LOCK_FILE</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.HBCK_LOCK_FILE">Constant Field Values</a></dd>
@@ -1484,7 +1504,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_MAX_LOCK_FILE_ATTEMPTS</h4>
-<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.213">DEFAULT_MAX_LOCK_FILE_ATTEMPTS</a></pre>
+<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.221">DEFAULT_MAX_LOCK_FILE_ATTEMPTS</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.DEFAULT_MAX_LOCK_FILE_ATTEMPTS">Constant Field Values</a></dd>
@@ -1497,7 +1517,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL</h4>
-<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.214">DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL</a></pre>
+<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.222">DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL">Constant Field Values</a></dd>
@@ -1510,7 +1530,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME</h4>
-<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.215">DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME</a></pre>
+<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.223">DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME">Constant Field Values</a></dd>
@@ -1523,7 +1543,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_WAIT_FOR_LOCK_TIMEOUT</h4>
-<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.220">DEFAULT_WAIT_FOR_LOCK_TIMEOUT</a></pre>
+<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.228">DEFAULT_WAIT_FOR_LOCK_TIMEOUT</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.DEFAULT_WAIT_FOR_LOCK_TIMEOUT">Constant Field Values</a></dd>
@@ -1536,7 +1556,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS</h4>
-<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.221">DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS</a></pre>
+<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.229">DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS">Constant Field Values</a></dd>
@@ -1549,7 +1569,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL</h4>
-<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.222">DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL</a></pre>
+<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.230">DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL">Constant Field Values</a></dd>
@@ -1562,7 +1582,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME</h4>
-<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.223">DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME</a></pre>
+<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.231">DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME">Constant Field Values</a></dd>
@@ -1575,7 +1595,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.228">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.236">LOG</a></pre>
<div class="block">Internal resources</div>
</li>
</ul>
@@ -1585,7 +1605,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>status</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.229">status</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.237">status</a></pre>
</li>
</ul>
<a name="connection">
@@ -1594,7 +1614,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>connection</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.230">connection</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.238">connection</a></pre>
</li>
</ul>
<a name="admin">
@@ -1603,7 +1623,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>admin</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.231">admin</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.239">admin</a></pre>
</li>
</ul>
<a name="meta">
@@ -1612,7 +1632,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>meta</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.232">meta</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.240">meta</a></pre>
</li>
</ul>
<a name="executor">
@@ -1621,7 +1641,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>executor</h4>
-<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.234">executor</a></pre>
+<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.242">executor</a></pre>
</li>
</ul>
<a name="startMillis">
@@ -1630,7 +1650,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>startMillis</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.235">startMillis</a></pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.243">startMillis</a></pre>
</li>
</ul>
<a name="hfcc">
@@ -1639,7 +1659,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>hfcc</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.236">hfcc</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.244">hfcc</a></pre>
</li>
</ul>
<a name="retcode">
@@ -1648,7 +1668,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>retcode</h4>
-<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.237">retcode</a></pre>
+<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.245">retcode</a></pre>
</li>
</ul>
<a name="HBCK_LOCK_PATH">
@@ -1657,7 +1677,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>HBCK_LOCK_PATH</h4>
-<pre>private org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.238">HBCK_LOCK_PATH</a></pre>
+<pre>private org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.246">HBCK_LOCK_PATH</a></pre>
</li>
</ul>
<a name="hbckOutFd">
@@ -1666,7 +1686,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>hbckOutFd</h4>
-<pre>private org.apache.hadoop.fs.FSDataOutputStream <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.239">hbckOutFd</a></pre>
+<pre>private org.apache.hadoop.fs.FSDataOutputStream <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.247">hbckOutFd</a></pre>
</li>
</ul>
<a name="hbckLockCleanup">
@@ -1675,7 +1695,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>hbckLockCleanup</h4>
-<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.243">hbckLockCleanup</a></pre>
+<pre>private final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.251">hbckLockCleanup</a></pre>
</li>
</ul>
<a name="unsupportedOptionsInV2">
@@ -1684,7 +1704,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>unsupportedOptionsInV2</h4>
-<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.246">unsupportedOptionsInV2</a></pre>
+<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.254">unsupportedOptionsInV2</a></pre>
</li>
</ul>
<a name="details">
@@ -1693,7 +1713,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>details</h4>
-<pre>private static boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.254">details</a></pre>
+<pre>private static boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.262">details</a></pre>
<div class="block">Options</div>
</li>
</ul>
@@ -1703,7 +1723,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>timelag</h4>
-<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.255">timelag</a></pre>
+<pre>private long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.263">timelag</a></pre>
</li>
</ul>
<a name="forceExclusive">
@@ -1712,7 +1732,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>forceExclusive</h4>
-<pre>private static boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.256">forceExclusive</a></pre>
+<pre>private static boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.264">forceExclusive</a></pre>
</li>
</ul>
<a name="fixAssignments">
@@ -1721,7 +1741,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>fixAssignments</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.257">fixAssignments</a></pre>
+<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.265">fixAssignments</a></pre>
</li>
</ul>
<a name="fixMeta">
@@ -1730,7 +1750,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>fixMeta</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.258">fixMeta</a></pre>
+<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.266">fixMeta</a></pre>
</li>
</ul>
<a name="checkHdfs">
@@ -1739,7 +1759,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>checkHdfs</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.259">checkHdfs</a></pre>
+<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.267">checkHdfs</a></pre>
</li>
</ul>
<a name="fixHdfsHoles">
@@ -1748,7 +1768,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>fixHdfsHoles</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.260">fixHdfsHoles</a></pre>
+<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.268">fixHdfsHoles</a></pre>
</li>
</ul>
<a name="fixHdfsOverlaps">
@@ -1757,7 +1777,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
<ul class="blockList">
<li class="blockList">
<h4>fixHdfsOverlaps</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.261">fixHdfsOverlaps</a></pre>
+<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.269">fixHdfsOverlaps</a></pre>
</li>
</ul>
<a name="fixHdfsOrphans">
@@ -1766,7 +1786,7 @@ implements <a href="https:
<TRUNCATED>
[35/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
index c282308..094b592 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html
@@ -426,483 +426,481 @@
<span class="sourceLineNo">418</span> */<a name="line.418"></a>
<span class="sourceLineNo">419</span> void removeRecoveredSource(ReplicationSourceInterface src) {<a name="line.419"></a>
<span class="sourceLineNo">420</span> LOG.info("Done with the recovered queue " + src.getQueueId());<a name="line.420"></a>
-<span class="sourceLineNo">421</span> src.getSourceMetrics().clear();<a name="line.421"></a>
-<span class="sourceLineNo">422</span> this.oldsources.remove(src);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> // Delete queue from storage and memory<a name="line.423"></a>
-<span class="sourceLineNo">424</span> deleteQueue(src.getQueueId());<a name="line.424"></a>
-<span class="sourceLineNo">425</span> this.walsByIdRecoveredQueues.remove(src.getQueueId());<a name="line.425"></a>
-<span class="sourceLineNo">426</span> }<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span> /**<a name="line.428"></a>
-<span class="sourceLineNo">429</span> * Clear the metrics and related replication queue of the specified old source<a name="line.429"></a>
-<span class="sourceLineNo">430</span> * @param src source to clear<a name="line.430"></a>
-<span class="sourceLineNo">431</span> */<a name="line.431"></a>
-<span class="sourceLineNo">432</span> void removeSource(ReplicationSourceInterface src) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span> LOG.info("Done with the queue " + src.getQueueId());<a name="line.433"></a>
-<span class="sourceLineNo">434</span> src.getSourceMetrics().clear();<a name="line.434"></a>
-<span class="sourceLineNo">435</span> this.sources.remove(src.getPeerId());<a name="line.435"></a>
-<span class="sourceLineNo">436</span> // Delete queue from storage and memory<a name="line.436"></a>
-<span class="sourceLineNo">437</span> deleteQueue(src.getQueueId());<a name="line.437"></a>
-<span class="sourceLineNo">438</span> this.walsById.remove(src.getQueueId());<a name="line.438"></a>
-<span class="sourceLineNo">439</span> }<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span> /**<a name="line.441"></a>
-<span class="sourceLineNo">442</span> * Delete a complete queue of wals associated with a replication source<a name="line.442"></a>
-<span class="sourceLineNo">443</span> * @param queueId the id of replication queue to delete<a name="line.443"></a>
-<span class="sourceLineNo">444</span> */<a name="line.444"></a>
-<span class="sourceLineNo">445</span> private void deleteQueue(String queueId) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> abortWhenFail(() -> this.queueStorage.removeQueue(server.getServerName(), queueId));<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> @FunctionalInterface<a name="line.449"></a>
-<span class="sourceLineNo">450</span> private interface ReplicationQueueOperation {<a name="line.450"></a>
-<span class="sourceLineNo">451</span> void exec() throws ReplicationException;<a name="line.451"></a>
-<span class="sourceLineNo">452</span> }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span> private void abortWhenFail(ReplicationQueueOperation op) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span> try {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> op.exec();<a name="line.456"></a>
-<span class="sourceLineNo">457</span> } catch (ReplicationException e) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> server.abort("Failed to operate on replication queue", e);<a name="line.458"></a>
-<span class="sourceLineNo">459</span> }<a name="line.459"></a>
-<span class="sourceLineNo">460</span> }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span> private void throwIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> try {<a name="line.463"></a>
-<span class="sourceLineNo">464</span> op.exec();<a name="line.464"></a>
-<span class="sourceLineNo">465</span> } catch (ReplicationException e) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> throw new IOException(e);<a name="line.466"></a>
-<span class="sourceLineNo">467</span> }<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span> private void abortAndThrowIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> try {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> op.exec();<a name="line.472"></a>
-<span class="sourceLineNo">473</span> } catch (ReplicationException e) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span> server.abort("Failed to operate on replication queue", e);<a name="line.474"></a>
-<span class="sourceLineNo">475</span> throw new IOException(e);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> }<a name="line.476"></a>
-<span class="sourceLineNo">477</span> }<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
-<span class="sourceLineNo">479</span> /**<a name="line.479"></a>
-<span class="sourceLineNo">480</span> * This method will log the current position to storage. And also clean old logs from the<a name="line.480"></a>
-<span class="sourceLineNo">481</span> * replication queue.<a name="line.481"></a>
-<span class="sourceLineNo">482</span> * @param queueId id of the replication queue<a name="line.482"></a>
-<span class="sourceLineNo">483</span> * @param queueRecovered indicates if this queue comes from another region server<a name="line.483"></a>
-<span class="sourceLineNo">484</span> * @param entryBatch the wal entry batch we just shipped<a name="line.484"></a>
-<span class="sourceLineNo">485</span> */<a name="line.485"></a>
-<span class="sourceLineNo">486</span> public void logPositionAndCleanOldLogs(String queueId, boolean queueRecovered,<a name="line.486"></a>
-<span class="sourceLineNo">487</span> WALEntryBatch entryBatch) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span> String fileName = entryBatch.getLastWalPath().getName();<a name="line.488"></a>
-<span class="sourceLineNo">489</span> abortWhenFail(() -> this.queueStorage.setWALPosition(server.getServerName(), queueId, fileName,<a name="line.489"></a>
-<span class="sourceLineNo">490</span> entryBatch.getLastWalPosition(), entryBatch.getLastSeqIds()));<a name="line.490"></a>
-<span class="sourceLineNo">491</span> cleanOldLogs(fileName, entryBatch.isEndOfFile(), queueId, queueRecovered);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<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> * Cleans a log file and all older logs from replication queue. Called when we are sure that a log<a name="line.495"></a>
-<span class="sourceLineNo">496</span> * file is closed and has no more entries.<a name="line.496"></a>
-<span class="sourceLineNo">497</span> * @param log Path to the log<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * @param inclusive whether we should also remove the given log file<a name="line.498"></a>
-<span class="sourceLineNo">499</span> * @param queueId id of the replication queue<a name="line.499"></a>
-<span class="sourceLineNo">500</span> * @param queueRecovered Whether this is a recovered queue<a name="line.500"></a>
-<span class="sourceLineNo">501</span> */<a name="line.501"></a>
-<span class="sourceLineNo">502</span> @VisibleForTesting<a name="line.502"></a>
-<span class="sourceLineNo">503</span> void cleanOldLogs(String log, boolean inclusive, String queueId, boolean queueRecovered) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span> String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log);<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (queueRecovered) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> NavigableSet<String> wals = walsByIdRecoveredQueues.get(queueId).get(logPrefix);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> if (wals != null) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span> cleanOldLogs(wals, log, inclusive, queueId);<a name="line.508"></a>
-<span class="sourceLineNo">509</span> }<a name="line.509"></a>
-<span class="sourceLineNo">510</span> } else {<a name="line.510"></a>
-<span class="sourceLineNo">511</span> // synchronized on walsById to avoid race with preLogRoll<a name="line.511"></a>
-<span class="sourceLineNo">512</span> synchronized (this.walsById) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span> NavigableSet<String> wals = walsById.get(queueId).get(logPrefix);<a name="line.513"></a>
-<span class="sourceLineNo">514</span> if (wals != null) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span> cleanOldLogs(wals, log, inclusive, queueId);<a name="line.515"></a>
-<span class="sourceLineNo">516</span> }<a name="line.516"></a>
-<span class="sourceLineNo">517</span> }<a name="line.517"></a>
-<span class="sourceLineNo">518</span> }<a name="line.518"></a>
-<span class="sourceLineNo">519</span> }<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span> private void cleanOldLogs(NavigableSet<String> wals, String key, boolean inclusive, String id) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> NavigableSet<String> walSet = wals.headSet(key, inclusive);<a name="line.522"></a>
-<span class="sourceLineNo">523</span> if (walSet.isEmpty()) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> return;<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span> LOG.debug("Removing {} logs in the list: {}", walSet.size(), walSet);<a name="line.526"></a>
-<span class="sourceLineNo">527</span> for (String wal : walSet) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span> abortWhenFail(() -> this.queueStorage.removeWAL(server.getServerName(), id, wal));<a name="line.528"></a>
-<span class="sourceLineNo">529</span> }<a name="line.529"></a>
-<span class="sourceLineNo">530</span> walSet.clear();<a name="line.530"></a>
-<span class="sourceLineNo">531</span> }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span> // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.533"></a>
-<span class="sourceLineNo">534</span> @VisibleForTesting<a name="line.534"></a>
-<span class="sourceLineNo">535</span> public void preLogRoll(Path newLog) throws IOException {<a name="line.535"></a>
-<span class="sourceLineNo">536</span> String logName = newLog.getName();<a name="line.536"></a>
-<span class="sourceLineNo">537</span> String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(logName);<a name="line.537"></a>
-<span class="sourceLineNo">538</span> // synchronized on latestPaths to avoid the new open source miss the new log<a name="line.538"></a>
-<span class="sourceLineNo">539</span> synchronized (this.latestPaths) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span> // Add log to queue storage<a name="line.540"></a>
-<span class="sourceLineNo">541</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span> // If record log to queue storage failed, abort RS and throw exception to make log roll<a name="line.542"></a>
-<span class="sourceLineNo">543</span> // failed<a name="line.543"></a>
-<span class="sourceLineNo">544</span> abortAndThrowIOExceptionWhenFail(<a name="line.544"></a>
-<span class="sourceLineNo">545</span> () -> this.queueStorage.addWAL(server.getServerName(), source.getQueueId(), logName));<a name="line.545"></a>
-<span class="sourceLineNo">546</span> }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span> // synchronized on walsById to avoid race with cleanOldLogs<a name="line.548"></a>
-<span class="sourceLineNo">549</span> synchronized (this.walsById) {<a name="line.549"></a>
-<span class="sourceLineNo">550</span> // Update walsById map<a name="line.550"></a>
-<span class="sourceLineNo">551</span> for (Map.Entry<String, Map<String, NavigableSet<String>>> entry : this.walsById<a name="line.551"></a>
-<span class="sourceLineNo">552</span> .entrySet()) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span> String peerId = entry.getKey();<a name="line.553"></a>
-<span class="sourceLineNo">554</span> Map<String, NavigableSet<String>> walsByPrefix = entry.getValue();<a name="line.554"></a>
-<span class="sourceLineNo">555</span> boolean existingPrefix = false;<a name="line.555"></a>
-<span class="sourceLineNo">556</span> for (Map.Entry<String, NavigableSet<String>> walsEntry : walsByPrefix.entrySet()) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span> SortedSet<String> wals = walsEntry.getValue();<a name="line.557"></a>
-<span class="sourceLineNo">558</span> if (this.sources.isEmpty()) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span> // If there's no slaves, don't need to keep the old wals since<a name="line.559"></a>
-<span class="sourceLineNo">560</span> // we only consider the last one when a new slave comes in<a name="line.560"></a>
-<span class="sourceLineNo">561</span> wals.clear();<a name="line.561"></a>
-<span class="sourceLineNo">562</span> }<a name="line.562"></a>
-<span class="sourceLineNo">563</span> if (logPrefix.equals(walsEntry.getKey())) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span> wals.add(logName);<a name="line.564"></a>
-<span class="sourceLineNo">565</span> existingPrefix = true;<a name="line.565"></a>
-<span class="sourceLineNo">566</span> }<a name="line.566"></a>
-<span class="sourceLineNo">567</span> }<a name="line.567"></a>
-<span class="sourceLineNo">568</span> if (!existingPrefix) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span> // The new log belongs to a new group, add it into this peer<a name="line.569"></a>
-<span class="sourceLineNo">570</span> LOG.debug("Start tracking logs for wal group {} for peer {}", logPrefix, peerId);<a name="line.570"></a>
-<span class="sourceLineNo">571</span> NavigableSet<String> wals = new TreeSet<>();<a name="line.571"></a>
-<span class="sourceLineNo">572</span> wals.add(logName);<a name="line.572"></a>
-<span class="sourceLineNo">573</span> walsByPrefix.put(logPrefix, wals);<a name="line.573"></a>
-<span class="sourceLineNo">574</span> }<a name="line.574"></a>
-<span class="sourceLineNo">575</span> }<a name="line.575"></a>
-<span class="sourceLineNo">576</span> }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span> // Add to latestPaths<a name="line.578"></a>
-<span class="sourceLineNo">579</span> Iterator<Path> iterator = latestPaths.iterator();<a name="line.579"></a>
-<span class="sourceLineNo">580</span> while (iterator.hasNext()) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span> Path path = iterator.next();<a name="line.581"></a>
-<span class="sourceLineNo">582</span> if (path.getName().contains(logPrefix)) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span> iterator.remove();<a name="line.583"></a>
-<span class="sourceLineNo">584</span> break;<a name="line.584"></a>
-<span class="sourceLineNo">585</span> }<a name="line.585"></a>
-<span class="sourceLineNo">586</span> }<a name="line.586"></a>
-<span class="sourceLineNo">587</span> this.latestPaths.add(newLog);<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><a name="line.590"></a>
-<span class="sourceLineNo">591</span> // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.591"></a>
-<span class="sourceLineNo">592</span> @VisibleForTesting<a name="line.592"></a>
-<span class="sourceLineNo">593</span> public void postLogRoll(Path newLog) throws IOException {<a name="line.593"></a>
-<span class="sourceLineNo">594</span> // This only updates the sources we own, not the recovered ones<a name="line.594"></a>
-<span class="sourceLineNo">595</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span> source.enqueueLog(newLog);<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><a name="line.599"></a>
-<span class="sourceLineNo">600</span> @Override<a name="line.600"></a>
-<span class="sourceLineNo">601</span> public void regionServerRemoved(String regionserver) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span> transferQueues(ServerName.valueOf(regionserver));<a name="line.602"></a>
-<span class="sourceLineNo">603</span> }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span> /**<a name="line.605"></a>
-<span class="sourceLineNo">606</span> * Transfer all the queues of the specified to this region server. First it tries to grab a lock<a name="line.606"></a>
-<span class="sourceLineNo">607</span> * and if it works it will move the old queues and finally will delete the old queues.<a name="line.607"></a>
-<span class="sourceLineNo">608</span> * <p><a name="line.608"></a>
-<span class="sourceLineNo">609</span> * It creates one old source for any type of source of the old rs.<a name="line.609"></a>
-<span class="sourceLineNo">610</span> */<a name="line.610"></a>
-<span class="sourceLineNo">611</span> private void transferQueues(ServerName deadRS) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span> if (server.getServerName().equals(deadRS)) {<a name="line.612"></a>
-<span class="sourceLineNo">613</span> // it's just us, give up<a name="line.613"></a>
-<span class="sourceLineNo">614</span> return;<a name="line.614"></a>
-<span class="sourceLineNo">615</span> }<a name="line.615"></a>
-<span class="sourceLineNo">616</span> NodeFailoverWorker transfer = new NodeFailoverWorker(deadRS);<a name="line.616"></a>
-<span class="sourceLineNo">617</span> try {<a name="line.617"></a>
-<span class="sourceLineNo">618</span> this.executor.execute(transfer);<a name="line.618"></a>
-<span class="sourceLineNo">619</span> } catch (RejectedExecutionException ex) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span> LOG.info("Cancelling the transfer of " + deadRS + " because of " + ex.getMessage());<a name="line.620"></a>
-<span class="sourceLineNo">621</span> }<a name="line.621"></a>
-<span class="sourceLineNo">622</span> }<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span> /**<a name="line.624"></a>
-<span class="sourceLineNo">625</span> * Class responsible to setup new ReplicationSources to take care of the queues from dead region<a name="line.625"></a>
-<span class="sourceLineNo">626</span> * servers.<a name="line.626"></a>
-<span class="sourceLineNo">627</span> */<a name="line.627"></a>
-<span class="sourceLineNo">628</span> class NodeFailoverWorker extends Thread {<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span> private final ServerName deadRS;<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // After claim the queues from dead region server, the NodeFailoverWorker will skip to start<a name="line.631"></a>
-<span class="sourceLineNo">632</span> // the RecoveredReplicationSource if the peer has been removed. but there's possible that<a name="line.632"></a>
-<span class="sourceLineNo">633</span> // remove a peer with peerId = 2 and add a peer with peerId = 2 again during the<a name="line.633"></a>
-<span class="sourceLineNo">634</span> // NodeFailoverWorker. So we need a deep copied <peerId, peer> map to decide whether we<a name="line.634"></a>
-<span class="sourceLineNo">635</span> // should start the RecoveredReplicationSource. If the latest peer is not the old peer when<a name="line.635"></a>
-<span class="sourceLineNo">636</span> // NodeFailoverWorker begin, we should skip to start the RecoveredReplicationSource, Otherwise<a name="line.636"></a>
-<span class="sourceLineNo">637</span> // the rs will abort (See HBASE-20475).<a name="line.637"></a>
-<span class="sourceLineNo">638</span> private final Map<String, ReplicationPeerImpl> peersSnapshot;<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span> @VisibleForTesting<a name="line.640"></a>
-<span class="sourceLineNo">641</span> public NodeFailoverWorker(ServerName deadRS) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span> super("Failover-for-" + deadRS);<a name="line.642"></a>
-<span class="sourceLineNo">643</span> this.deadRS = deadRS;<a name="line.643"></a>
-<span class="sourceLineNo">644</span> peersSnapshot = new HashMap<>(replicationPeers.getPeerCache());<a name="line.644"></a>
-<span class="sourceLineNo">645</span> }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span> private boolean isOldPeer(String peerId, ReplicationPeerImpl newPeerRef) {<a name="line.647"></a>
-<span class="sourceLineNo">648</span> ReplicationPeerImpl oldPeerRef = peersSnapshot.get(peerId);<a name="line.648"></a>
-<span class="sourceLineNo">649</span> return oldPeerRef != null && oldPeerRef == newPeerRef;<a name="line.649"></a>
-<span class="sourceLineNo">650</span> }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span> @Override<a name="line.652"></a>
-<span class="sourceLineNo">653</span> public void run() {<a name="line.653"></a>
-<span class="sourceLineNo">654</span> // Wait a bit before transferring the queues, we may be shutting down.<a name="line.654"></a>
-<span class="sourceLineNo">655</span> // This sleep may not be enough in some cases.<a name="line.655"></a>
-<span class="sourceLineNo">656</span> try {<a name="line.656"></a>
-<span class="sourceLineNo">657</span> Thread.sleep(sleepBeforeFailover +<a name="line.657"></a>
-<span class="sourceLineNo">658</span> (long) (ThreadLocalRandom.current().nextFloat() * sleepBeforeFailover));<a name="line.658"></a>
-<span class="sourceLineNo">659</span> } catch (InterruptedException e) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span> LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.660"></a>
-<span class="sourceLineNo">661</span> Thread.currentThread().interrupt();<a name="line.661"></a>
-<span class="sourceLineNo">662</span> }<a name="line.662"></a>
-<span class="sourceLineNo">663</span> // We try to lock that rs' queue directory<a name="line.663"></a>
-<span class="sourceLineNo">664</span> if (server.isStopped()) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span> LOG.info("Not transferring queue since we are shutting down");<a name="line.665"></a>
-<span class="sourceLineNo">666</span> return;<a name="line.666"></a>
-<span class="sourceLineNo">667</span> }<a name="line.667"></a>
-<span class="sourceLineNo">668</span> Map<String, Set<String>> newQueues = new HashMap<>();<a name="line.668"></a>
-<span class="sourceLineNo">669</span> try {<a name="line.669"></a>
-<span class="sourceLineNo">670</span> List<String> queues = queueStorage.getAllQueues(deadRS);<a name="line.670"></a>
-<span class="sourceLineNo">671</span> while (!queues.isEmpty()) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> Pair<String, SortedSet<String>> peer = queueStorage.claimQueue(deadRS,<a name="line.672"></a>
-<span class="sourceLineNo">673</span> queues.get(ThreadLocalRandom.current().nextInt(queues.size())), server.getServerName());<a name="line.673"></a>
-<span class="sourceLineNo">674</span> long sleep = sleepBeforeFailover / 2;<a name="line.674"></a>
-<span class="sourceLineNo">675</span> if (!peer.getSecond().isEmpty()) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span> newQueues.put(peer.getFirst(), peer.getSecond());<a name="line.676"></a>
-<span class="sourceLineNo">677</span> sleep = sleepBeforeFailover;<a name="line.677"></a>
-<span class="sourceLineNo">678</span> }<a name="line.678"></a>
-<span class="sourceLineNo">679</span> try {<a name="line.679"></a>
-<span class="sourceLineNo">680</span> Thread.sleep(sleep);<a name="line.680"></a>
-<span class="sourceLineNo">681</span> } catch (InterruptedException e) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span> LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.682"></a>
-<span class="sourceLineNo">683</span> Thread.currentThread().interrupt();<a name="line.683"></a>
-<span class="sourceLineNo">684</span> }<a name="line.684"></a>
-<span class="sourceLineNo">685</span> queues = queueStorage.getAllQueues(deadRS);<a name="line.685"></a>
-<span class="sourceLineNo">686</span> }<a name="line.686"></a>
-<span class="sourceLineNo">687</span> if (queues.isEmpty()) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span> queueStorage.removeReplicatorIfQueueIsEmpty(deadRS);<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span> } catch (ReplicationException e) {<a name="line.690"></a>
-<span class="sourceLineNo">691</span> server.abort("Failed to claim queue from dead regionserver", e);<a name="line.691"></a>
-<span class="sourceLineNo">692</span> return;<a name="line.692"></a>
-<span class="sourceLineNo">693</span> }<a name="line.693"></a>
-<span class="sourceLineNo">694</span> // Copying over the failed queue is completed.<a name="line.694"></a>
-<span class="sourceLineNo">695</span> if (newQueues.isEmpty()) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span> // We either didn't get the lock or the failed region server didn't have any outstanding<a name="line.696"></a>
-<span class="sourceLineNo">697</span> // WALs to replicate, so we are done.<a name="line.697"></a>
-<span class="sourceLineNo">698</span> return;<a name="line.698"></a>
-<span class="sourceLineNo">699</span> }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> for (Map.Entry<String, Set<String>> entry : newQueues.entrySet()) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span> String queueId = entry.getKey();<a name="line.702"></a>
-<span class="sourceLineNo">703</span> Set<String> walsSet = entry.getValue();<a name="line.703"></a>
-<span class="sourceLineNo">704</span> try {<a name="line.704"></a>
-<span class="sourceLineNo">705</span> // there is not an actual peer defined corresponding to peerId for the failover.<a name="line.705"></a>
-<span class="sourceLineNo">706</span> ReplicationQueueInfo replicationQueueInfo = new ReplicationQueueInfo(queueId);<a name="line.706"></a>
-<span class="sourceLineNo">707</span> String actualPeerId = replicationQueueInfo.getPeerId();<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span> ReplicationPeerImpl peer = replicationPeers.getPeer(actualPeerId);<a name="line.709"></a>
-<span class="sourceLineNo">710</span> if (peer == null || !isOldPeer(actualPeerId, peer)) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span> LOG.warn("Skipping failover for peer {} of node {}, peer is null", actualPeerId,<a name="line.711"></a>
-<span class="sourceLineNo">712</span> deadRS);<a name="line.712"></a>
-<span class="sourceLineNo">713</span> abortWhenFail(() -> queueStorage.removeQueue(server.getServerName(), queueId));<a name="line.713"></a>
-<span class="sourceLineNo">714</span> continue;<a name="line.714"></a>
-<span class="sourceLineNo">715</span> }<a name="line.715"></a>
-<span class="sourceLineNo">716</span> if (server instanceof ReplicationSyncUp.DummyServer<a name="line.716"></a>
-<span class="sourceLineNo">717</span> && peer.getPeerState().equals(PeerState.DISABLED)) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span> LOG.warn("Peer {} is disabled. ReplicationSyncUp tool will skip "<a name="line.718"></a>
-<span class="sourceLineNo">719</span> + "replicating data to this peer.",<a name="line.719"></a>
-<span class="sourceLineNo">720</span> actualPeerId);<a name="line.720"></a>
-<span class="sourceLineNo">721</span> continue;<a name="line.721"></a>
-<span class="sourceLineNo">722</span> }<a name="line.722"></a>
-<span class="sourceLineNo">723</span> // track sources in walsByIdRecoveredQueues<a name="line.723"></a>
-<span class="sourceLineNo">724</span> Map<String, NavigableSet<String>> walsByGroup = new HashMap<>();<a name="line.724"></a>
-<span class="sourceLineNo">725</span> walsByIdRecoveredQueues.put(queueId, walsByGroup);<a name="line.725"></a>
-<span class="sourceLineNo">726</span> for (String wal : walsSet) {<a name="line.726"></a>
-<span class="sourceLineNo">727</span> String walPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(wal);<a name="line.727"></a>
-<span class="sourceLineNo">728</span> NavigableSet<String> wals = walsByGroup.get(walPrefix);<a name="line.728"></a>
-<span class="sourceLineNo">729</span> if (wals == null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span> wals = new TreeSet<>();<a name="line.730"></a>
-<span class="sourceLineNo">731</span> walsByGroup.put(walPrefix, wals);<a name="line.731"></a>
-<span class="sourceLineNo">732</span> }<a name="line.732"></a>
-<span class="sourceLineNo">733</span> wals.add(wal);<a name="line.733"></a>
-<span class="sourceLineNo">734</span> }<a name="line.734"></a>
-<span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span> ReplicationSourceInterface src = createSource(queueId, peer);<a name="line.736"></a>
-<span class="sourceLineNo">737</span> // synchronized on oldsources to avoid adding recovered source for the to-be-removed peer<a name="line.737"></a>
-<span class="sourceLineNo">738</span> synchronized (oldsources) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span> peer = replicationPeers.getPeer(src.getPeerId());<a name="line.739"></a>
-<span class="sourceLineNo">740</span> if (peer == null || !isOldPeer(src.getPeerId(), peer)) {<a name="line.740"></a>
-<span class="sourceLineNo">741</span> src.terminate("Recovered queue doesn't belong to any current peer");<a name="line.741"></a>
-<span class="sourceLineNo">742</span> removeRecoveredSource(src);<a name="line.742"></a>
-<span class="sourceLineNo">743</span> continue;<a name="line.743"></a>
-<span class="sourceLineNo">744</span> }<a name="line.744"></a>
-<span class="sourceLineNo">745</span> oldsources.add(src);<a name="line.745"></a>
-<span class="sourceLineNo">746</span> for (String wal : walsSet) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span> src.enqueueLog(new Path(oldLogDir, wal));<a name="line.747"></a>
-<span class="sourceLineNo">748</span> }<a name="line.748"></a>
-<span class="sourceLineNo">749</span> src.startup();<a name="line.749"></a>
-<span class="sourceLineNo">750</span> }<a name="line.750"></a>
-<span class="sourceLineNo">751</span> } catch (IOException e) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span> // TODO manage it<a name="line.752"></a>
-<span class="sourceLineNo">753</span> LOG.error("Failed creating a source", e);<a name="line.753"></a>
-<span class="sourceLineNo">754</span> }<a name="line.754"></a>
-<span class="sourceLineNo">755</span> }<a name="line.755"></a>
-<span class="sourceLineNo">756</span> }<a name="line.756"></a>
-<span class="sourceLineNo">757</span> }<a name="line.757"></a>
-<span class="sourceLineNo">758</span><a name="line.758"></a>
-<span class="sourceLineNo">759</span> /**<a name="line.759"></a>
-<span class="sourceLineNo">760</span> * Terminate the replication on this region server<a name="line.760"></a>
-<span class="sourceLineNo">761</span> */<a name="line.761"></a>
-<span class="sourceLineNo">762</span> public void join() {<a name="line.762"></a>
-<span class="sourceLineNo">763</span> this.executor.shutdown();<a name="line.763"></a>
-<span class="sourceLineNo">764</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.764"></a>
-<span class="sourceLineNo">765</span> source.terminate("Region server is closing");<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span> }<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> * Get a copy of the wals of the normal sources on this rs<a name="line.770"></a>
-<span class="sourceLineNo">771</span> * @return a sorted set of wal names<a name="line.771"></a>
-<span class="sourceLineNo">772</span> */<a name="line.772"></a>
-<span class="sourceLineNo">773</span> @VisibleForTesting<a name="line.773"></a>
-<span class="sourceLineNo">774</span> public Map<String, Map<String, NavigableSet<String>>> getWALs() {<a name="line.774"></a>
-<span class="sourceLineNo">775</span> return Collections.unmodifiableMap(walsById);<a name="line.775"></a>
-<span class="sourceLineNo">776</span> }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span> /**<a name="line.778"></a>
-<span class="sourceLineNo">779</span> * Get a copy of the wals of the recovered sources on this rs<a name="line.779"></a>
-<span class="sourceLineNo">780</span> * @return a sorted set of wal names<a name="line.780"></a>
-<span class="sourceLineNo">781</span> */<a name="line.781"></a>
-<span class="sourceLineNo">782</span> @VisibleForTesting<a name="line.782"></a>
-<span class="sourceLineNo">783</span> Map<String, Map<String, NavigableSet<String>>> getWalsByIdRecoveredQueues() {<a name="line.783"></a>
-<span class="sourceLineNo">784</span> return Collections.unmodifiableMap(walsByIdRecoveredQueues);<a name="line.784"></a>
-<span class="sourceLineNo">785</span> }<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span> /**<a name="line.787"></a>
-<span class="sourceLineNo">788</span> * Get a list of all the normal sources of this rs<a name="line.788"></a>
-<span class="sourceLineNo">789</span> * @return list of all normal sources<a name="line.789"></a>
-<span class="sourceLineNo">790</span> */<a name="line.790"></a>
-<span class="sourceLineNo">791</span> public List<ReplicationSourceInterface> getSources() {<a name="line.791"></a>
-<span class="sourceLineNo">792</span> return new ArrayList<>(this.sources.values());<a name="line.792"></a>
-<span class="sourceLineNo">793</span> }<a name="line.793"></a>
-<span class="sourceLineNo">794</span><a name="line.794"></a>
-<span class="sourceLineNo">795</span> /**<a name="line.795"></a>
-<span class="sourceLineNo">796</span> * Get a list of all the recovered sources of this rs<a name="line.796"></a>
-<span class="sourceLineNo">797</span> * @return list of all recovered sources<a name="line.797"></a>
-<span class="sourceLineNo">798</span> */<a name="line.798"></a>
-<span class="sourceLineNo">799</span> public List<ReplicationSourceInterface> getOldSources() {<a name="line.799"></a>
-<span class="sourceLineNo">800</span> return this.oldsources;<a name="line.800"></a>
-<span class="sourceLineNo">801</span> }<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span> /**<a name="line.803"></a>
-<span class="sourceLineNo">804</span> * Get the normal source for a given peer<a name="line.804"></a>
-<span class="sourceLineNo">805</span> * @return the normal source for the give peer if it exists, otherwise null.<a name="line.805"></a>
-<span class="sourceLineNo">806</span> */<a name="line.806"></a>
-<span class="sourceLineNo">807</span> @VisibleForTesting<a name="line.807"></a>
-<span class="sourceLineNo">808</span> public ReplicationSourceInterface getSource(String peerId) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span> return this.sources.get(peerId);<a name="line.809"></a>
-<span class="sourceLineNo">810</span> }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span> @VisibleForTesting<a name="line.812"></a>
-<span class="sourceLineNo">813</span> List<String> getAllQueues() throws IOException {<a name="line.813"></a>
-<span class="sourceLineNo">814</span> List<String> allQueues = Collections.emptyList();<a name="line.814"></a>
-<span class="sourceLineNo">815</span> try {<a name="line.815"></a>
-<span class="sourceLineNo">816</span> allQueues = queueStorage.getAllQueues(server.getServerName());<a name="line.816"></a>
-<span class="sourceLineNo">817</span> } catch (ReplicationException e) {<a name="line.817"></a>
-<span class="sourceLineNo">818</span> throw new IOException(e);<a name="line.818"></a>
-<span class="sourceLineNo">819</span> }<a name="line.819"></a>
-<span class="sourceLineNo">820</span> return allQueues;<a name="line.820"></a>
-<span class="sourceLineNo">821</span> }<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span> @VisibleForTesting<a name="line.823"></a>
-<span class="sourceLineNo">824</span> int getSizeOfLatestPath() {<a name="line.824"></a>
-<span class="sourceLineNo">825</span> synchronized (latestPaths) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> return latestPaths.size();<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span> }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span> @VisibleForTesting<a name="line.830"></a>
-<span class="sourceLineNo">831</span> public AtomicLong getTotalBufferUsed() {<a name="line.831"></a>
-<span class="sourceLineNo">832</span> return totalBufferUsed;<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> /**<a name="line.835"></a>
-<span class="sourceLineNo">836</span> * Get the directory where wals are archived<a name="line.836"></a>
-<span class="sourceLineNo">837</span> * @return the directory where wals are archived<a name="line.837"></a>
-<span class="sourceLineNo">838</span> */<a name="line.838"></a>
-<span class="sourceLineNo">839</span> public Path getOldLogDir() {<a name="line.839"></a>
-<span class="sourceLineNo">840</span> return this.oldLogDir;<a name="line.840"></a>
-<span class="sourceLineNo">841</span> }<a name="line.841"></a>
-<span class="sourceLineNo">842</span><a name="line.842"></a>
-<span class="sourceLineNo">843</span> /**<a name="line.843"></a>
-<span class="sourceLineNo">844</span> * Get the directory where wals are stored by their RSs<a name="line.844"></a>
-<span class="sourceLineNo">845</span> * @return the directory where wals are stored by their RSs<a name="line.845"></a>
-<span class="sourceLineNo">846</span> */<a name="line.846"></a>
-<span class="sourceLineNo">847</span> public Path getLogDir() {<a name="line.847"></a>
-<span class="sourceLineNo">848</span> return this.logDir;<a name="line.848"></a>
-<span class="sourceLineNo">849</span> }<a name="line.849"></a>
-<span class="sourceLineNo">850</span><a name="line.850"></a>
-<span class="sourceLineNo">851</span> /**<a name="line.851"></a>
-<span class="sourceLineNo">852</span> * Get the handle on the local file system<a name="line.852"></a>
-<span class="sourceLineNo">853</span> * @return Handle on the local file system<a name="line.853"></a>
-<span class="sourceLineNo">854</span> */<a name="line.854"></a>
-<span class="sourceLineNo">855</span> public FileSystem getFs() {<a name="line.855"></a>
-<span class="sourceLineNo">856</span> return this.fs;<a name="line.856"></a>
-<span class="sourceLineNo">857</span> }<a name="line.857"></a>
-<span class="sourceLineNo">858</span><a name="line.858"></a>
-<span class="sourceLineNo">859</span> /**<a name="line.859"></a>
-<span class="sourceLineNo">860</span> * Get the ReplicationPeers used by this ReplicationSourceManager<a name="line.860"></a>
-<span class="sourceLineNo">861</span> * @return the ReplicationPeers used by this ReplicationSourceManager<a name="line.861"></a>
-<span class="sourceLineNo">862</span> */<a name="line.862"></a>
-<span class="sourceLineNo">863</span> public ReplicationPeers getReplicationPeers() {<a name="line.863"></a>
-<span class="sourceLineNo">864</span> return this.replicationPeers;<a name="line.864"></a>
-<span class="sourceLineNo">865</span> }<a name="line.865"></a>
-<span class="sourceLineNo">866</span><a name="line.866"></a>
-<span class="sourceLineNo">867</span> /**<a name="line.867"></a>
-<span class="sourceLineNo">868</span> * Get a string representation of all the sources' metrics<a name="line.868"></a>
-<span class="sourceLineNo">869</span> */<a name="line.869"></a>
-<span class="sourceLineNo">870</span> public String getStats() {<a name="line.870"></a>
-<span class="sourceLineNo">871</span> StringBuilder stats = new StringBuilder();<a name="line.871"></a>
-<span class="sourceLineNo">872</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.872"></a>
-<span class="sourceLineNo">873</span> stats.append("Normal source for cluster " + source.getPeerId() + ": ");<a name="line.873"></a>
-<span class="sourceLineNo">874</span> stats.append(source.getStats() + "\n");<a name="line.874"></a>
-<span class="sourceLineNo">875</span> }<a name="line.875"></a>
-<span class="sourceLineNo">876</span> for (ReplicationSourceInterface oldSource : oldsources) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> stats.append("Recovered source for cluster/machine(s) " + oldSource.getPeerId() + ": ");<a name="line.877"></a>
-<span class="sourceLineNo">878</span> stats.append(oldSource.getStats() + "\n");<a name="line.878"></a>
-<span class="sourceLineNo">879</span> }<a name="line.879"></a>
-<span class="sourceLineNo">880</span> return stats.toString();<a name="line.880"></a>
-<span class="sourceLineNo">881</span> }<a name="line.881"></a>
-<span class="sourceLineNo">882</span><a name="line.882"></a>
-<span class="sourceLineNo">883</span> public void addHFileRefs(TableName tableName, byte[] family, List<Pair<Path, Path>> pairs)<a name="line.883"></a>
-<span class="sourceLineNo">884</span> throws IOException {<a name="line.884"></a>
-<span class="sourceLineNo">885</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.885"></a>
-<span class="sourceLineNo">886</span> throwIOExceptionWhenFail(() -> source.addHFileRefs(tableName, family, pairs));<a name="line.886"></a>
-<span class="sourceLineNo">887</span> }<a name="line.887"></a>
-<span class="sourceLineNo">888</span> }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span> public void cleanUpHFileRefs(String peerId, List<String> files) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span> abortWhenFail(() -> this.queueStorage.removeHFileRefs(peerId, files));<a name="line.891"></a>
-<span class="sourceLineNo">892</span> }<a name="line.892"></a>
-<span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span> int activeFailoverTaskCount() {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> return executor.getActiveCount();<a name="line.895"></a>
-<span class="sourceLineNo">896</span> }<a name="line.896"></a>
-<span class="sourceLineNo">897</span>}<a name="line.897"></a>
+<span class="sourceLineNo">421</span> this.oldsources.remove(src);<a name="line.421"></a>
+<span class="sourceLineNo">422</span> // Delete queue from storage and memory<a name="line.422"></a>
+<span class="sourceLineNo">423</span> deleteQueue(src.getQueueId());<a name="line.423"></a>
+<span class="sourceLineNo">424</span> this.walsByIdRecoveredQueues.remove(src.getQueueId());<a name="line.424"></a>
+<span class="sourceLineNo">425</span> }<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span> /**<a name="line.427"></a>
+<span class="sourceLineNo">428</span> * Clear the metrics and related replication queue of the specified old source<a name="line.428"></a>
+<span class="sourceLineNo">429</span> * @param src source to clear<a name="line.429"></a>
+<span class="sourceLineNo">430</span> */<a name="line.430"></a>
+<span class="sourceLineNo">431</span> void removeSource(ReplicationSourceInterface src) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span> LOG.info("Done with the queue " + src.getQueueId());<a name="line.432"></a>
+<span class="sourceLineNo">433</span> this.sources.remove(src.getPeerId());<a name="line.433"></a>
+<span class="sourceLineNo">434</span> // Delete queue from storage and memory<a name="line.434"></a>
+<span class="sourceLineNo">435</span> deleteQueue(src.getQueueId());<a name="line.435"></a>
+<span class="sourceLineNo">436</span> this.walsById.remove(src.getQueueId());<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> /**<a name="line.439"></a>
+<span class="sourceLineNo">440</span> * Delete a complete queue of wals associated with a replication source<a name="line.440"></a>
+<span class="sourceLineNo">441</span> * @param queueId the id of replication queue to delete<a name="line.441"></a>
+<span class="sourceLineNo">442</span> */<a name="line.442"></a>
+<span class="sourceLineNo">443</span> private void deleteQueue(String queueId) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span> abortWhenFail(() -> this.queueStorage.removeQueue(server.getServerName(), queueId));<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> @FunctionalInterface<a name="line.447"></a>
+<span class="sourceLineNo">448</span> private interface ReplicationQueueOperation {<a name="line.448"></a>
+<span class="sourceLineNo">449</span> void exec() throws ReplicationException;<a name="line.449"></a>
+<span class="sourceLineNo">450</span> }<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span> private void abortWhenFail(ReplicationQueueOperation op) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span> try {<a name="line.453"></a>
+<span class="sourceLineNo">454</span> op.exec();<a name="line.454"></a>
+<span class="sourceLineNo">455</span> } catch (ReplicationException e) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span> server.abort("Failed to operate on replication queue", e);<a name="line.456"></a>
+<span class="sourceLineNo">457</span> }<a name="line.457"></a>
+<span class="sourceLineNo">458</span> }<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span> private void throwIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.460"></a>
+<span class="sourceLineNo">461</span> try {<a name="line.461"></a>
+<span class="sourceLineNo">462</span> op.exec();<a name="line.462"></a>
+<span class="sourceLineNo">463</span> } catch (ReplicationException e) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span> throw new IOException(e);<a name="line.464"></a>
+<span class="sourceLineNo">465</span> }<a name="line.465"></a>
+<span class="sourceLineNo">466</span> }<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span> private void abortAndThrowIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.468"></a>
+<span class="sourceLineNo">469</span> try {<a name="line.469"></a>
+<span class="sourceLineNo">470</span> op.exec();<a name="line.470"></a>
+<span class="sourceLineNo">471</span> } catch (ReplicationException e) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span> server.abort("Failed to operate on replication queue", e);<a name="line.472"></a>
+<span class="sourceLineNo">473</span> throw new IOException(e);<a name="line.473"></a>
+<span class="sourceLineNo">474</span> }<a name="line.474"></a>
+<span class="sourceLineNo">475</span> }<a name="line.475"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span> /**<a name="line.477"></a>
+<span class="sourceLineNo">478</span> * This method will log the current position to storage. And also clean old logs from the<a name="line.478"></a>
+<span class="sourceLineNo">479</span> * replication queue.<a name="line.479"></a>
+<span class="sourceLineNo">480</span> * @param queueId id of the replication queue<a name="line.480"></a>
+<span class="sourceLineNo">481</span> * @param queueRecovered indicates if this queue comes from another region server<a name="line.481"></a>
+<span class="sourceLineNo">482</span> * @param entryBatch the wal entry batch we just shipped<a name="line.482"></a>
+<span class="sourceLineNo">483</span> */<a name="line.483"></a>
+<span class="sourceLineNo">484</span> public void logPositionAndCleanOldLogs(String queueId, boolean queueRecovered,<a name="line.484"></a>
+<span class="sourceLineNo">485</span> WALEntryBatch entryBatch) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span> String fileName = entryBatch.getLastWalPath().getName();<a name="line.486"></a>
+<span class="sourceLineNo">487</span> abortWhenFail(() -> this.queueStorage.setWALPosition(server.getServerName(), queueId, fileName,<a name="line.487"></a>
+<span class="sourceLineNo">488</span> entryBatch.getLastWalPosition(), entryBatch.getLastSeqIds()));<a name="line.488"></a>
+<span class="sourceLineNo">489</span> cleanOldLogs(fileName, entryBatch.isEndOfFile(), queueId, queueRecovered);<a name="line.489"></a>
+<span class="sourceLineNo">490</span> }<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span> /**<a name="line.492"></a>
+<span class="sourceLineNo">493</span> * Cleans a log file and all older logs from replication queue. Called when we are sure that a log<a name="line.493"></a>
+<span class="sourceLineNo">494</span> * file is closed and has no more entries.<a name="line.494"></a>
+<span class="sourceLineNo">495</span> * @param log Path to the log<a name="line.495"></a>
+<span class="sourceLineNo">496</span> * @param inclusive whether we should also remove the given log file<a name="line.496"></a>
+<span class="sourceLineNo">497</span> * @param queueId id of the replication queue<a name="line.497"></a>
+<span class="sourceLineNo">498</span> * @param queueRecovered Whether this is a recovered queue<a name="line.498"></a>
+<span class="sourceLineNo">499</span> */<a name="line.499"></a>
+<span class="sourceLineNo">500</span> @VisibleForTesting<a name="line.500"></a>
+<span class="sourceLineNo">501</span> void cleanOldLogs(String log, boolean inclusive, String queueId, boolean queueRecovered) {<a name="line.501"></a>
+<span class="sourceLineNo">502</span> String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log);<a name="line.502"></a>
+<span class="sourceLineNo">503</span> if (queueRecovered) {<a name="line.503"></a>
+<span class="sourceLineNo">504</span> NavigableSet<String> wals = walsByIdRecoveredQueues.get(queueId).get(logPrefix);<a name="line.504"></a>
+<span class="sourceLineNo">505</span> if (wals != null) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span> cleanOldLogs(wals, log, inclusive, queueId);<a name="line.506"></a>
+<span class="sourceLineNo">507</span> }<a name="line.507"></a>
+<span class="sourceLineNo">508</span> } else {<a name="line.508"></a>
+<span class="sourceLineNo">509</span> // synchronized on walsById to avoid race with preLogRoll<a name="line.509"></a>
+<span class="sourceLineNo">510</span> synchronized (this.walsById) {<a name="line.510"></a>
+<span class="sourceLineNo">511</span> NavigableSet<String> wals = walsById.get(queueId).get(logPrefix);<a name="line.511"></a>
+<span class="sourceLineNo">512</span> if (wals != null) {<a name="line.512"></a>
+<span class="sourceLineNo">513</span> cleanOldLogs(wals, log, inclusive, queueId);<a name="line.513"></a>
+<span class="sourceLineNo">514</span> }<a name="line.514"></a>
+<span class="sourceLineNo">515</span> }<a name="line.515"></a>
+<span class="sourceLineNo">516</span> }<a name="line.516"></a>
+<span class="sourceLineNo">517</span> }<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span> private void cleanOldLogs(NavigableSet<String> wals, String key, boolean inclusive, String id) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span> NavigableSet<String> walSet = wals.headSet(key, inclusive);<a name="line.520"></a>
+<span class="sourceLineNo">521</span> if (walSet.isEmpty()) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span> return;<a name="line.522"></a>
+<span class="sourceLineNo">523</span> }<a name="line.523"></a>
+<span class="sourceLineNo">524</span> LOG.debug("Removing {} logs in the list: {}", walSet.size(), walSet);<a name="line.524"></a>
+<span class="sourceLineNo">525</span> for (String wal : walSet) {<a name="line.525"></a>
+<span class="sourceLineNo">526</span> abortWhenFail(() -> this.queueStorage.removeWAL(server.getServerName(), id, wal));<a name="line.526"></a>
+<span class="sourceLineNo">527</span> }<a name="line.527"></a>
+<span class="sourceLineNo">528</span> walSet.clear();<a name="line.528"></a>
+<span class="sourceLineNo">529</span> }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span> // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.531"></a>
+<span class="sourceLineNo">532</span> @VisibleForTesting<a name="line.532"></a>
+<span class="sourceLineNo">533</span> public void preLogRoll(Path newLog) throws IOException {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> String logName = newLog.getName();<a name="line.534"></a>
+<span class="sourceLineNo">535</span> String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(logName);<a name="line.535"></a>
+<span class="sourceLineNo">536</span> // synchronized on latestPaths to avoid the new open source miss the new log<a name="line.536"></a>
+<span class="sourceLineNo">537</span> synchronized (this.latestPaths) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span> // Add log to queue storage<a name="line.538"></a>
+<span class="sourceLineNo">539</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span> // If record log to queue storage failed, abort RS and throw exception to make log roll<a name="line.540"></a>
+<span class="sourceLineNo">541</span> // failed<a name="line.541"></a>
+<span class="sourceLineNo">542</span> abortAndThrowIOExceptionWhenFail(<a name="line.542"></a>
+<span class="sourceLineNo">543</span> () -> this.queueStorage.addWAL(server.getServerName(), source.getQueueId(), logName));<a name="line.543"></a>
+<span class="sourceLineNo">544</span> }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span> // synchronized on walsById to avoid race with cleanOldLogs<a name="line.546"></a>
+<span class="sourceLineNo">547</span> synchronized (this.walsById) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span> // Update walsById map<a name="line.548"></a>
+<span class="sourceLineNo">549</span> for (Map.Entry<String, Map<String, NavigableSet<String>>> entry : this.walsById<a name="line.549"></a>
+<span class="sourceLineNo">550</span> .entrySet()) {<a name="line.550"></a>
+<span class="sourceLineNo">551</span> String peerId = entry.getKey();<a name="line.551"></a>
+<span class="sourceLineNo">552</span> Map<String, NavigableSet<String>> walsByPrefix = entry.getValue();<a name="line.552"></a>
+<span class="sourceLineNo">553</span> boolean existingPrefix = false;<a name="line.553"></a>
+<span class="sourceLineNo">554</span> for (Map.Entry<String, NavigableSet<String>> walsEntry : walsByPrefix.entrySet()) {<a name="line.554"></a>
+<span class="sourceLineNo">555</span> SortedSet<String> wals = walsEntry.getValue();<a name="line.555"></a>
+<span class="sourceLineNo">556</span> if (this.sources.isEmpty()) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span> // If there's no slaves, don't need to keep the old wals since<a name="line.557"></a>
+<span class="sourceLineNo">558</span> // we only consider the last one when a new slave comes in<a name="line.558"></a>
+<span class="sourceLineNo">559</span> wals.clear();<a name="line.559"></a>
+<span class="sourceLineNo">560</span> }<a name="line.560"></a>
+<span class="sourceLineNo">561</span> if (logPrefix.equals(walsEntry.getKey())) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span> wals.add(logName);<a name="line.562"></a>
+<span class="sourceLineNo">563</span> existingPrefix = true;<a name="line.563"></a>
+<span class="sourceLineNo">564</span> }<a name="line.564"></a>
+<span class="sourceLineNo">565</span> }<a name="line.565"></a>
+<span class="sourceLineNo">566</span> if (!existingPrefix) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span> // The new log belongs to a new group, add it into this peer<a name="line.567"></a>
+<span class="sourceLineNo">568</span> LOG.debug("Start tracking logs for wal group {} for peer {}", logPrefix, peerId);<a name="line.568"></a>
+<span class="sourceLineNo">569</span> NavigableSet<String> wals = new TreeSet<>();<a name="line.569"></a>
+<span class="sourceLineNo">570</span> wals.add(logName);<a name="line.570"></a>
+<span class="sourceLineNo">571</span> walsByPrefix.put(logPrefix, wals);<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> }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span> // Add to latestPaths<a name="line.576"></a>
+<span class="sourceLineNo">577</span> Iterator<Path> iterator = latestPaths.iterator();<a name="line.577"></a>
+<span class="sourceLineNo">578</span> while (iterator.hasNext()) {<a name="line.578"></a>
+<span class="sourceLineNo">579</span> Path path = iterator.next();<a name="line.579"></a>
+<span class="sourceLineNo">580</span> if (path.getName().contains(logPrefix)) {<a name="line.580"></a>
+<span class="sourceLineNo">581</span> iterator.remove();<a name="line.581"></a>
+<span class="sourceLineNo">582</span> break;<a name="line.582"></a>
+<span class="sourceLineNo">583</span> }<a name="line.583"></a>
+<span class="sourceLineNo">584</span> }<a name="line.584"></a>
+<span class="sourceLineNo">585</span> this.latestPaths.add(newLog);<a name="line.585"></a>
+<span class="sourceLineNo">586</span> }<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> // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.589"></a>
+<span class="sourceLineNo">590</span> @VisibleForTesting<a name="line.590"></a>
+<span class="sourceLineNo">591</span> public void postLogRoll(Path newLog) throws IOException {<a name="line.591"></a>
+<span class="sourceLineNo">592</span> // This only updates the sources we own, not the recovered ones<a name="line.592"></a>
+<span class="sourceLineNo">593</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span> source.enqueueLog(newLog);<a name="line.594"></a>
+<span class="sourceLineNo">595</span> }<a name="line.595"></a>
+<span class="sourceLineNo">596</span> }<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span> @Override<a name="line.598"></a>
+<span class="sourceLineNo">599</span> public void regionServerRemoved(String regionserver) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span> transferQueues(ServerName.valueOf(regionserver));<a name="line.600"></a>
+<span class="sourceLineNo">601</span> }<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span> /**<a name="line.603"></a>
+<span class="sourceLineNo">604</span> * Transfer all the queues of the specified to this region server. First it tries to grab a lock<a name="line.604"></a>
+<span class="sourceLineNo">605</span> * and if it works it will move the old queues and finally will delete the old queues.<a name="line.605"></a>
+<span class="sourceLineNo">606</span> * <p><a name="line.606"></a>
+<span class="sourceLineNo">607</span> * It creates one old source for any type of source of the old rs.<a name="line.607"></a>
+<span class="sourceLineNo">608</span> */<a name="line.608"></a>
+<span class="sourceLineNo">609</span> private void transferQueues(ServerName deadRS) {<a name="line.609"></a>
+<span class="sourceLineNo">610</span> if (server.getServerName().equals(deadRS)) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span> // it's just us, give up<a name="line.611"></a>
+<span class="sourceLineNo">612</span> return;<a name="line.612"></a>
+<span class="sourceLineNo">613</span> }<a name="line.613"></a>
+<span class="sourceLineNo">614</span> NodeFailoverWorker transfer = new NodeFailoverWorker(deadRS);<a name="line.614"></a>
+<span class="sourceLineNo">615</span> try {<a name="line.615"></a>
+<span class="sourceLineNo">616</span> this.executor.execute(transfer);<a name="line.616"></a>
+<span class="sourceLineNo">617</span> } catch (RejectedExecutionException ex) {<a name="line.617"></a>
+<span class="sourceLineNo">618</span> LOG.info("Cancelling the transfer of " + deadRS + " because of " + ex.getMessage());<a name="line.618"></a>
+<span class="sourceLineNo">619</span> }<a name="line.619"></a>
+<span class="sourceLineNo">620</span> }<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span> /**<a name="line.622"></a>
+<span class="sourceLineNo">623</span> * Class responsible to setup new ReplicationSources to take care of the queues from dead region<a name="line.623"></a>
+<span class="sourceLineNo">624</span> * servers.<a name="line.624"></a>
+<span class="sourceLineNo">625</span> */<a name="line.625"></a>
+<span class="sourceLineNo">626</span> class NodeFailoverWorker extends Thread {<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span> private final ServerName deadRS;<a name="line.628"></a>
+<span class="sourceLineNo">629</span> // After claim the queues from dead region server, the NodeFailoverWorker will skip to start<a name="line.629"></a>
+<span class="sourceLineNo">630</span> // the RecoveredReplicationSource if the peer has been removed. but there's possible that<a name="line.630"></a>
+<span class="sourceLineNo">631</span> // remove a peer with peerId = 2 and add a peer with peerId = 2 again during the<a name="line.631"></a>
+<span class="sourceLineNo">632</span> // NodeFailoverWorker. So we need a deep copied <peerId, peer> map to decide whether we<a name="line.632"></a>
+<span class="sourceLineNo">633</span> // should start the RecoveredReplicationSource. If the latest peer is not the old peer when<a name="line.633"></a>
+<span class="sourceLineNo">634</span> // NodeFailoverWorker begin, we should skip to start the RecoveredReplicationSource, Otherwise<a name="line.634"></a>
+<span class="sourceLineNo">635</span> // the rs will abort (See HBASE-20475).<a name="line.635"></a>
+<span class="sourceLineNo">636</span> private final Map<String, ReplicationPeerImpl> peersSnapshot;<a name="line.636"></a>
+<span class="sourceLineNo">637</span><a name="line.637"></a>
+<span class="sourceLineNo">638</span> @VisibleForTesting<a name="line.638"></a>
+<span class="sourceLineNo">639</span> public NodeFailoverWorker(ServerName deadRS) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span> super("Failover-for-" + deadRS);<a name="line.640"></a>
+<span class="sourceLineNo">641</span> this.deadRS = deadRS;<a name="line.641"></a>
+<span class="sourceLineNo">642</span> peersSnapshot = new HashMap<>(replicationPeers.getPeerCache());<a name="line.642"></a>
+<span class="sourceLineNo">643</span> }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span> private boolean isOldPeer(String peerId, ReplicationPeerImpl newPeerRef) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span> ReplicationPeerImpl oldPeerRef = peersSnapshot.get(peerId);<a name="line.646"></a>
+<span class="sourceLineNo">647</span> return oldPeerRef != null && oldPeerRef == newPeerRef;<a name="line.647"></a>
+<span class="sourceLineNo">648</span> }<a name="line.648"></a>
+<span class="sourceLineNo">649</span><a name="line.649"></a>
+<span class="sourceLineNo">650</span> @Override<a name="line.650"></a>
+<span class="sourceLineNo">651</span> public void run() {<a name="line.651"></a>
+<span class="sourceLineNo">652</span> // Wait a bit before transferring the queues, we may be shutting down.<a name="line.652"></a>
+<span class="sourceLineNo">653</span> // This sleep may not be enough in some cases.<a name="line.653"></a>
+<span class="sourceLineNo">654</span> try {<a name="line.654"></a>
+<span class="sourceLineNo">655</span> Thread.sleep(sleepBeforeFailover +<a name="line.655"></a>
+<span class="sourceLineNo">656</span> (long) (ThreadLocalRandom.current().nextFloat() * sleepBeforeFailover));<a name="line.656"></a>
+<span class="sourceLineNo">657</span> } catch (InterruptedException e) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span> LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.658"></a>
+<span class="sourceLineNo">659</span> Thread.currentThread().interrupt();<a name="line.659"></a>
+<span class="sourceLineNo">660</span> }<a name="line.660"></a>
+<span class="sourceLineNo">661</span> // We try to lock that rs' queue directory<a name="line.661"></a>
+<span class="sourceLineNo">662</span> if (server.isStopped()) {<a name="line.662"></a>
+<span class="sourceLineNo">663</span> LOG.info("Not transferring queue since we are shutting down");<a name="line.663"></a>
+<span class="sourceLineNo">664</span> return;<a name="line.664"></a>
+<span class="sourceLineNo">665</span> }<a name="line.665"></a>
+<span class="sourceLineNo">666</span> Map<String, Set<String>> newQueues = new HashMap<>();<a name="line.666"></a>
+<span class="sourceLineNo">667</span> try {<a name="line.667"></a>
+<span class="sourceLineNo">668</span> List<String> queues = queueStorage.getAllQueues(deadRS);<a name="line.668"></a>
+<span class="sourceLineNo">669</span> while (!queues.isEmpty()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> Pair<String, SortedSet<String>> peer = queueStorage.claimQueue(deadRS,<a name="line.670"></a>
+<span class="sourceLineNo">671</span> queues.get(ThreadLocalRandom.current().nextInt(queues.size())), server.getServerName());<a name="line.671"></a>
+<span class="sourceLineNo">672</span> long sleep = sleepBeforeFailover / 2;<a name="line.672"></a>
+<span class="sourceLineNo">673</span> if (!peer.getSecond().isEmpty()) {<a name="line.673"></a>
+<span class="sourceLineNo">674</span> newQueues.put(peer.getFirst(), peer.getSecond());<a name="line.674"></a>
+<span class="sourceLineNo">675</span> sleep = sleepBeforeFailover;<a name="line.675"></a>
+<span class="sourceLineNo">676</span> }<a name="line.676"></a>
+<span class="sourceLineNo">677</span> try {<a name="line.677"></a>
+<span class="sourceLineNo">678</span> Thread.sleep(sleep);<a name="line.678"></a>
+<span class="sourceLineNo">679</span> } catch (InterruptedException e) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span> LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.680"></a>
+<span class="sourceLineNo">681</span> Thread.currentThread().interrupt();<a name="line.681"></a>
+<span class="sourceLineNo">682</span> }<a name="line.682"></a>
+<span class="sourceLineNo">683</span> queues = queueStorage.getAllQueues(deadRS);<a name="line.683"></a>
+<span class="sourceLineNo">684</span> }<a name="line.684"></a>
+<span class="sourceLineNo">685</span> if (queues.isEmpty()) {<a name="line.685"></a>
+<span class="sourceLineNo">686</span> queueStorage.removeReplicatorIfQueueIsEmpty(deadRS);<a name="line.686"></a>
+<span class="sourceLineNo">687</span> }<a name="line.687"></a>
+<span class="sourceLineNo">688</span> } catch (ReplicationException e) {<a name="line.688"></a>
+<span class="sourceLineNo">689</span> server.abort("Failed to claim queue from dead regionserver", e);<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> // Copying over the failed queue is completed.<a name="line.692"></a>
+<span class="sourceLineNo">693</span> if (newQueues.isEmpty()) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span> // We either didn't get the lock or the failed region server didn't have any outstanding<a name="line.694"></a>
+<span class="sourceLineNo">695</span> // WALs to replicate, so we are done.<a name="line.695"></a>
+<span class="sourceLineNo">696</span> return;<a name="line.696"></a>
+<span class="sourceLineNo">697</span> }<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span> for (Map.Entry<String, Set<String>> entry : newQueues.entrySet()) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span> String queueId = entry.getKey();<a name="line.700"></a>
+<span class="sourceLineNo">701</span> Set<String> walsSet = entry.getValue();<a name="line.701"></a>
+<span class="sourceLineNo">702</span> try {<a name="line.702"></a>
+<span class="sourceLineNo">703</span> // there is not an actual peer defined corresponding to peerId for the failover.<a name="line.703"></a>
+<span class="sourceLineNo">704</span> ReplicationQueueInfo replicationQueueInfo = new ReplicationQueueInfo(queueId);<a name="line.704"></a>
+<span class="sourceLineNo">705</span> String actualPeerId = replicationQueueInfo.getPeerId();<a name="line.705"></a>
+<span class="sourceLineNo">706</span><a name="line.706"></a>
+<span class="sourceLineNo">707</span> ReplicationPeerImpl peer = replicationPeers.getPeer(actualPeerId);<a name="line.707"></a>
+<span class="sourceLineNo">708</span> if (peer == null || !isOldPeer(actualPeerId, peer)) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span> LOG.warn("Skipping failover for peer {} of node {}, peer is null", actualPeerId,<a name="line.709"></a>
+<span class="sourceLineNo">710</span> deadRS);<a name="line.710"></a>
+<span class="sourceLineNo">711</span> abortWhenFail(() -> queueStorage.removeQueue(server.getServerName(), queueId));<a name="line.711"></a>
+<span class="sourceLineNo">712</span> continue;<a name="line.712"></a>
+<span class="sourceLineNo">713</span> }<a name="line.713"></a>
+<span class="sourceLineNo">714</span> if (server instanceof ReplicationSyncUp.DummyServer<a name="line.714"></a>
+<span class="sourceLineNo">715</span> && peer.getPeerState().equals(PeerState.DISABLED)) {<a name="line.715"></a>
+<span class="sourceLineNo">716</span> LOG.warn("Peer {} is disabled. ReplicationSyncUp tool will skip "<a name="line.716"></a>
+<span class="sourceLineNo">717</span> + "replicating data to this peer.",<a name="line.717"></a>
+<span class="sourceLineNo">718</span> actualPeerId);<a name="line.718"></a>
+<span class="sourceLineNo">719</span> continue;<a name="line.719"></a>
+<span class="sourceLineNo">720</span> }<a name="line.720"></a>
+<span class="sourceLineNo">721</span> // track sources in walsByIdRecoveredQueues<a name="line.721"></a>
+<span class="sourceLineNo">722</span> Map<String, NavigableSet<String>> walsByGroup = new HashMap<>();<a name="line.722"></a>
+<span class="sourceLineNo">723</span> walsByIdRecoveredQueues.put(queueId, walsByGroup);<a name="line.723"></a>
+<span class="sourceLineNo">724</span> for (String wal : walsSet) {<a name="line.724"></a>
+<span class="sourceLineNo">725</span> String walPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(wal);<a name="line.725"></a>
+<span class="sourceLineNo">726</span> NavigableSet<String> wals = walsByGroup.get(walPrefix);<a name="line.726"></a>
+<span class="sourceLineNo">727</span> if (wals == null) {<a name="line.727"></a>
+<span class="sourceLineNo">728</span> wals = new TreeSet<>();<a name="line.728"></a>
+<span class="sourceLineNo">729</span> walsByGroup.put(walPrefix, wals);<a name="line.729"></a>
+<span class="sourceLineNo">730</span> }<a name="line.730"></a>
+<span class="sourceLineNo">731</span> wals.add(wal);<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> ReplicationSourceInterface src = createSource(queueId, peer);<a name="line.734"></a>
+<span class="sourceLineNo">735</span> // synchronized on oldsources to avoid adding recovered source for the to-be-removed peer<a name="line.735"></a>
+<span class="sourceLineNo">736</span> synchronized (oldsources) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span> peer = replicationPeers.getPeer(src.getPeerId());<a name="line.737"></a>
+<span class="sourceLineNo">738</span> if (peer == null || !isOldPeer(src.getPeerId(), peer)) {<a name="line.738"></a>
+<span class="sourceLineNo">739</span> src.terminate("Recovered queue doesn't belong to any current peer");<a name="line.739"></a>
+<span class="sourceLineNo">740</span> removeRecoveredSource(src);<a name="line.740"></a>
+<span class="sourceLineNo">741</span> continue;<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span> oldsources.add(src);<a name="line.743"></a>
+<span class="sourceLineNo">744</span> for (String wal : walsSet) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> src.enqueueLog(new Path(oldLogDir, wal));<a name="line.745"></a>
+<span class="sourceLineNo">746</span> }<a name="line.746"></a>
+<span class="sourceLineNo">747</span> src.startup();<a name="line.747"></a>
+<span class="sourceLineNo">748</span> }<a name="line.748"></a>
+<span class="sourceLineNo">749</span> } catch (IOException e) {<a name="line.749"></a>
+<span class="sourceLineNo">750</span> // TODO manage it<a name="line.750"></a>
+<span class="sourceLineNo">751</span> LOG.error("Failed creating a source", e);<a name="line.751"></a>
+<span class="sourceLineNo">752</span> }<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span> }<a name="line.754"></a>
+<span class="sourceLineNo">755</span> }<a name="line.755"></a>
+<span class="sourceLineNo">756</span><a name="line.756"></a>
+<span class="sourceLineNo">757</span> /**<a name="line.757"></a>
+<span class="sourceLineNo">758</span> * Terminate the replication on this region server<a name="line.758"></a>
+<span class="sourceLineNo">759</span> */<a name="line.759"></a>
+<span class="sourceLineNo">760</span> public void join() {<a name="line.760"></a>
+<span class="sourceLineNo">761</span> this.executor.shutdown();<a name="line.761"></a>
+<span class="sourceLineNo">762</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.762"></a>
+<span class="sourceLineNo">763</span> source.terminate("Region server is closing");<a name="line.763"></a>
+<span class="sourceLineNo">764</span> }<a name="line.764"></a>
+<span class="sourceLineNo">765</span> }<a name="line.765"></a>
+<span class="sourceLineNo">766</span><a name="line.766"></a>
+<span class="sourceLineNo">767</span> /**<a name="line.767"></a>
+<span class="sourceLineNo">768</span> * Get a copy of the wals of the normal sources on this rs<a name="line.768"></a>
+<span class="sourceLineNo">769</span> * @return a sorted set of wal names<a name="line.769"></a>
+<span class="sourceLineNo">770</span> */<a name="line.770"></a>
+<span class="sourceLineNo">771</span> @VisibleForTesting<a name="line.771"></a>
+<span class="sourceLineNo">772</span> public Map<String, Map<String, NavigableSet<String>>> getWALs() {<a name="line.772"></a>
+<span class="sourceLineNo">773</span> return Collections.unmodifiableMap(walsById);<a name="line.773"></a>
+<span class="sourceLineNo">774</span> }<a name="line.774"></a>
+<span class="sourceLineNo">775</span><a name="line.775"></a>
+<span class="sourceLineNo">776</span> /**<a name="line.776"></a>
+<span class="sourceLineNo">777</span> * Get a copy of the wals of the recovered sources on this rs<a name="line.777"></a>
+<span class="sourceLineNo">778</span> * @return a sorted set of wal names<a name="line.778"></a>
+<span class="sourceLineNo">779</span> */<a name="line.779"></a>
+<span class="sourceLineNo">780</span> @VisibleForTesting<a name="line.780"></a>
+<span class="sourceLineNo">781</span> Map<String, Map<String, NavigableSet<String>>> getWalsByIdRecoveredQueues() {<a name="line.781"></a>
+<span class="sourceLineNo">782</span> return Collections.unmodifiableMap(walsByIdRecoveredQueues);<a name="line.782"></a>
+<span class="sourceLineNo">783</span> }<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span> /**<a name="line.785"></a>
+<span class="sourceLineNo">786</span> * Get a list of all the normal sources of this rs<a name="line.786"></a>
+<span class="sourceLineNo">787</span> * @return list of all normal sources<a name="line.787"></a>
+<span class="sourceLineNo">788</span> */<a name="line.788"></a>
+<span class="sourceLineNo">789</span> public List<ReplicationSourceInterface> getSources() {<a name="line.789"></a>
+<span class="sourceLineNo">790</span> return new ArrayList<>(this.sources.values());<a name="line.790"></a>
+<span class="sourceLineNo">791</span> }<a name="line.791"></a>
+<span class="sourceLineNo">792</span><a name="line.792"></a>
+<span class="sourceLineNo">793</span> /**<a name="line.793"></a>
+<span class="sourceLineNo">794</span> * Get a list of all the recovered sources of this rs<a name="line.794"></a>
+<span class="sourceLineNo">795</span> * @return list of all recovered sources<a name="line.795"></a>
+<span class="sourceLineNo">796</span> */<a name="line.796"></a>
+<span class="sourceLineNo">797</span> public List<ReplicationSourceInterface> getOldSources() {<a name="line.797"></a>
+<span class="sourceLineNo">798</span> return this.oldsources;<a name="line.798"></a>
+<span class="sourceLineNo">799</span> }<a name="line.799"></a>
+<span class="sourceLineNo">800</span><a name="line.800"></a>
+<span class="sourceLineNo">801</span> /**<a name="line.801"></a>
+<span class="sourceLineNo">802</span> * Get the normal source for a given peer<a name="line.802"></a>
+<span class="sourceLineNo">803</span> * @return the normal source for the give peer if it exists, otherwise null.<a name="line.803"></a>
+<span class="sourceLineNo">804</span> */<a name="line.804"></a>
+<span class="sourceLineNo">805</span> @VisibleForTesting<a name="line.805"></a>
+<span class="sourceLineNo">806</span> public ReplicationSourceInterface getSource(String peerId) {<a name="line.806"></a>
+<span class="sourceLineNo">807</span> return this.sources.get(peerId);<a name="line.807"></a>
+<span class="sourceLineNo">808</span> }<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span> @VisibleForTesting<a name="line.810"></a>
+<span class="sourceLineNo">811</span> List<String> getAllQueues() throws IOException {<a name="line.811"></a>
+<span class="sourceLineNo">812</span> List<String> allQueues = Collections.emptyList();<a name="line.812"></a>
+<span class="sourceLineNo">813</span> try {<a name="line.813"></a>
+<span class="sourceLineNo">814</span> allQueues = queueStorage.getAllQueues(server.getServerName());<a name="line.814"></a>
+<span class="sourceLineNo">815</span> } catch (ReplicationException e) {<a name="line.815"></a>
+<span class="sourceLineNo">816</span> throw new IOException(e);<a name="line.816"></a>
+<span class="sourceLineNo">817</span> }<a name="line.817"></a>
+<span class="sourceLineNo">818</span> return allQueues;<a name="line.818"></a>
+<span class="sourceLineNo">819</span> }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span> @VisibleForTesting<a name="line.821"></a>
+<span class="sourceLineNo">822</span> int getSizeOfLatestPath() {<a name="line.822"></a>
+<span class="sourceLineNo">823</span> synchronized (latestPaths) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> return latestPaths.size();<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span> }<a name="line.826"></a>
+<span class="sourceLineNo">827</span><a name="line.827"></a>
+<span class="sourceLineNo">828</span> @VisibleForTesting<a name="line.828"></a>
+<span class="sourceLineNo">829</span> public AtomicLong getTotalBufferUsed() {<a name="line.829"></a>
+<span class="sourceLineNo">830</span> return totalBufferUsed;<a name="line.830"></a>
+<span class="sourceLineNo">831</span> }<a name="line.831"></a>
+<span class="sourceLineNo">832</span><a name="line.832"></a>
+<span class="sourceLineNo">833</span> /**<a name="line.833"></a>
+<span class="sourceLineNo">834</span> * Get the directory where wals are archived<a name="line.834"></a>
+<span class="sourceLineNo">835</span> * @return the directory where wals are archived<a name="line.835"></a>
+<span class="sourceLineNo">836</span> */<a name="line.836"></a>
+<span class="sourceLineNo">837</span> public Path getOldLogDir() {<a name="line.837"></a>
+<span class="sourceLineNo">838</span> return this.oldLogDir;<a name="line.838"></a>
+<span class="sourceLineNo">839</span> }<a name="line.839"></a>
+<span class="sourceLineNo">840</span><a name="line.840"></a>
+<span class="sourceLineNo">841</span> /**<a name="line.841"></a>
+<span class="sourceLineNo">842</span> * Get the directory where wals are stored by their RSs<a name="line.842"></a>
+<span class="sourceLineNo">843</span> * @return the directory where wals are stored by their RSs<a name="line.843"></a>
+<span class="sourceLineNo">844</span> */<a name="line.844"></a>
+<span class="sourceLineNo">845</span> public Path getLogDir() {<a nam
<TRUNCATED>
[19/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call() throws IOException {<a name="line.396"></a
<TRUNCATED>
[21/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span
<TRUNCATED>
[14/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index 099207f..7fad404 100644
--- a/downloads.html
+++ b/downloads.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Apache HBase Downloads</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -366,7 +366,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 762a633..e0a5a62 100644
--- a/export_control.html
+++ b/export_control.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Export Control
@@ -331,7 +331,7 @@ for more details.</p>
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index a2cff89..9fcef97 100644
--- a/index.html
+++ b/index.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Apache HBaseâ„¢ Home</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -409,7 +409,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index 595dcba..f53166f 100644
--- a/integration.html
+++ b/integration.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – CI Management</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -291,7 +291,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 13aacbb..cf58b27 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Issue Management</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -288,7 +288,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 2f9f8fa..435b1e2 100644
--- a/license.html
+++ b/license.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Licenses</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -491,7 +491,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index f41f35f..1133e92 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Mailing Lists</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -341,7 +341,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index fa63090..75f8027 100644
--- a/metrics.html
+++ b/metrics.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Apache HBase (TM) Metrics
@@ -459,7 +459,7 @@ export HBASE_REGIONSERVER_OPTS="$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 399e924..1cbe5ce 100644
--- a/old_news.html
+++ b/old_news.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Old Apache HBase (TM) News
@@ -440,7 +440,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index 04d0689..4edc35f 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Plugin Management</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -440,7 +440,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 6f5cc89..b52d0ff 100644
--- a/plugins.html
+++ b/plugins.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Plugins</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -375,7 +375,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index e85334d..75ebd2d 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Powered By Apache HBase™</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -769,7 +769,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 78c3f33..db252c0 100644
--- a/project-info.html
+++ b/project-info.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Information</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -335,7 +335,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index cc392fa..c75a8fc 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Generated Reports</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -305,7 +305,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index a3a750f..4b244e7 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Summary</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -331,7 +331,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 65fad55..f8988eb 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Running Apache HBase (TM) in pseudo-distributed mode
@@ -308,7 +308,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 093a598..7556778 100644
--- a/replication.html
+++ b/replication.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase –
Apache HBase (TM) Replication
@@ -303,7 +303,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index ff2f521..3a93a0e 100644
--- a/resources.html
+++ b/resources.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Other Apache HBase (TM) Resources</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -331,7 +331,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index e9389cf..24c7a69 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Source Code Management</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -299,7 +299,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 3d91cbb..35d0b14 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Apache HBase™ Sponsors</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -333,7 +333,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index 458e3db..005aa68 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Supporting Projects</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -520,7 +520,7 @@ under the License. -->
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index c70decc..65b022e 100644
--- a/team-list.html
+++ b/team-list.html
@@ -7,7 +7,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <meta name="Date-Revision-yyyymmdd" content="20180503" />
+ <meta name="Date-Revision-yyyymmdd" content="20180504" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache HBase – Project Team</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -730,7 +730,7 @@
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.
- <li id="publishDate" class="pull-right">Last Published: 2018-05-03</li>
+ <li id="publishDate" class="pull-right">Last Published: 2018-05-04</li>
</p>
</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index ecb51c5..dc266c2 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -1142,6 +1142,7 @@
<li><a href="org/apache/hadoop/hbase/ipc/TestHBaseClient.html" title="class in org.apache.hadoop.hbase.ipc" target="classFrame">TestHBaseClient</a></li>
<li><a href="org/apache/hadoop/hbase/TestHBaseConfiguration.html" title="class in org.apache.hadoop.hbase" target="classFrame">TestHBaseConfiguration</a></li>
<li><a href="org/apache/hadoop/hbase/TestHBaseConfiguration.ReflectiveCredentialProviderClient.html" title="class in org.apache.hadoop.hbase" target="classFrame">TestHBaseConfiguration.ReflectiveCredentialProviderClient</a></li>
+<li><a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestHBaseFsckCleanReplicationBarriers</a></li>
<li><a href="org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestHBaseFsckComparator</a></li>
<li><a href="org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestHBaseFsckEncryption</a></li>
<li><a href="org/apache/hadoop/hbase/util/TestHBaseFsckMOB.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestHBaseFsckMOB</a></li>
@@ -1837,7 +1838,6 @@
<li><a href="org/apache/hadoop/hbase/replication/TestReplicationWithTags.TestCoprocessorForTagsAtSource.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">TestReplicationWithTags.TestCoprocessorForTagsAtSource</a></li>
<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestReplicator</a></li>
<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestReplicator.FailureInjectingReplicationEndpointForTest</a></li>
-<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></li>
<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestReplicator.ReplicationEndpointForTest</a></li>
<li><a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestReplicaWithCluster</a></li>
<li><a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro</a></li>
@@ -1962,6 +1962,8 @@
<li><a href="org/apache/hadoop/hbase/TestSerialization.html" title="class in org.apache.hadoop.hbase" target="classFrame">TestSerialization</a></li>
<li><a href="org/apache/hadoop/hbase/replication/TestSerialReplication.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">TestSerialReplication</a></li>
<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestSerialReplicationChecker</a></li>
+<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestSerialReplicationEndpoint</a></li>
+<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">TestSerialReplicationEndpoint.TestEndpoint</a></li>
<li><a href="org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">TestSerialReplicationFailover</a></li>
<li><a href="org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.html" title="class in org.apache.hadoop.hbase.master.balancer" target="classFrame">TestServerAndLoad</a></li>
<li><a href="org/apache/hadoop/hbase/client/TestServerBusyException.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestServerBusyException</a></li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 6078263..f301838 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -1142,6 +1142,7 @@
<li><a href="org/apache/hadoop/hbase/ipc/TestHBaseClient.html" title="class in org.apache.hadoop.hbase.ipc">TestHBaseClient</a></li>
<li><a href="org/apache/hadoop/hbase/TestHBaseConfiguration.html" title="class in org.apache.hadoop.hbase">TestHBaseConfiguration</a></li>
<li><a href="org/apache/hadoop/hbase/TestHBaseConfiguration.ReflectiveCredentialProviderClient.html" title="class in org.apache.hadoop.hbase">TestHBaseConfiguration.ReflectiveCredentialProviderClient</a></li>
+<li><a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckCleanReplicationBarriers</a></li>
<li><a href="org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckComparator</a></li>
<li><a href="org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckEncryption</a></li>
<li><a href="org/apache/hadoop/hbase/util/TestHBaseFsckMOB.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckMOB</a></li>
@@ -1837,7 +1838,6 @@
<li><a href="org/apache/hadoop/hbase/replication/TestReplicationWithTags.TestCoprocessorForTagsAtSource.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationWithTags.TestCoprocessorForTagsAtSource</a></li>
<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator</a></li>
<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest</a></li>
-<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></li>
<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest</a></li>
<li><a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster</a></li>
<li><a href="org/apache/hadoop/hbase/client/TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro</a></li>
@@ -1962,6 +1962,8 @@
<li><a href="org/apache/hadoop/hbase/TestSerialization.html" title="class in org.apache.hadoop.hbase">TestSerialization</a></li>
<li><a href="org/apache/hadoop/hbase/replication/TestSerialReplication.html" title="class in org.apache.hadoop.hbase.replication">TestSerialReplication</a></li>
<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationChecker</a></li>
+<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint</a></li>
+<li><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint.TestEndpoint</a></li>
<li><a href="org/apache/hadoop/hbase/replication/TestSerialReplicationFailover.html" title="class in org.apache.hadoop.hbase.replication">TestSerialReplicationFailover</a></li>
<li><a href="org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.html" title="class in org.apache.hadoop.hbase.master.balancer">TestServerAndLoad</a></li>
<li><a href="org/apache/hadoop/hbase/client/TestServerBusyException.html" title="class in org.apache.hadoop.hbase.client">TestServerBusyException</a></li>
[08/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html
new file mode 100644
index 0000000..e1c873a
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html
@@ -0,0 +1,475 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestSerialReplicationEndpoint.TestEndpoint (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="TestSerialReplicationEndpoint.TestEndpoint (Apache HBase 3.0.0-SNAPSHOT Test API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":10,"i1":10,"i2":9,"i3":10,"i4":9};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestSerialReplicationEndpoint.TestEndpoint.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSourceFSConfigurationProvider.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" target="_top">Frames</a></li>
+<li><a href="TestSerialReplicationEndpoint.TestEndpoint.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a> | </li>
+<li><a href="#field.summary">Field</a> | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#field.detail">Field</a> | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.replication.regionserver</div>
+<h2 title="Class TestSerialReplicationEndpoint.TestEndpoint" class="title">Class TestSerialReplicationEndpoint.TestEndpoint</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hbase.thirdparty.com.google.common.util.concurrent.AbstractService</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.replication.regionserver.TestSerialReplicationEndpoint.TestEndpoint</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd>org.apache.hadoop.hbase.Abortable, org.apache.hadoop.hbase.replication.ReplicationEndpoint, org.apache.hadoop.hbase.replication.ReplicationPeerConfigListener, org.apache.hbase.thirdparty.com.google.common.util.concurrent.Service</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#line.152">TestSerialReplicationEndpoint.TestEndpoint</a>
+extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!-- -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">
+<!-- -->
+</a>
+<h3>Nested classes/interfaces inherited from class org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint</h3>
+<code>org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint.PeerRegionServerListener</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.ReplicationEndpoint">
+<!-- -->
+</a>
+<h3>Nested classes/interfaces inherited from interface org.apache.hadoop.hbase.replication.ReplicationEndpoint</h3>
+<code>org.apache.hadoop.hbase.replication.ReplicationEndpoint.Context, org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hbase.thirdparty.com.google.common.util.concurrent.Service">
+<!-- -->
+</a>
+<h3>Nested classes/interfaces inherited from interface org.apache.hbase.thirdparty.com.google.common.util.concurrent.Service</h3>
+<code>org.apache.hbase.thirdparty.com.google.common.util.concurrent.Service.Listener, org.apache.hbase.thirdparty.com.google.common.util.concurrent.Service.State</code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a><org.apache.hadoop.hbase.wal.WAL.Entry></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#entryQueue">entryQueue</a></span></code> </td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.replication.BaseReplicationEndpoint">
+<!-- -->
+</a>
+<h3>Fields inherited from class org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</h3>
+<code>ctx, REPLICATION_WALENTRYFILTER_CONFIG_KEY</code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#TestEndpoint--">TestEndpoint</a></span>()</code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#canReplicateToSameCluster--">canReplicateToSameCluster</a></span>()</code> </td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#createReplicator-java.util.List-int-">createReplicator</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
+ int ordinal)</code> </td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#getEntries--">getEntries</a></span>()</code> </td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.ServerName></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#getRegionServers--">getRegionServers</a></span>()</code> </td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#reset--">reset</a></span>()</code> </td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint">
+<!-- -->
+</a>
+<h3>Methods inherited from class org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</h3>
+<code>doStop, init, isPeerEnabled, replicate, replicateEntries, sleepForRetries</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">
+<!-- -->
+</a>
+<h3>Methods inherited from class org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint</h3>
+<code>abort, disconnect, doStart, fetchSlavesAddresses, getLastRegionServerUpdate, getPeerUUID, getZkw, isAborted, reconnect, setRegionServers, start, stop</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.replication.BaseReplicationEndpoint">
+<!-- -->
+</a>
+<h3>Methods inherited from class org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</h3>
+<code>getNamespaceTableCfWALEntryFilter, getScopeWALEntryFilter, getWALEntryfilter, isStarting, peerConfigUpdated</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hbase.thirdparty.com.google.common.util.concurrent.AbstractService">
+<!-- -->
+</a>
+<h3>Methods inherited from class org.apache.hbase.thirdparty.com.google.common.util.concurrent.AbstractService</h3>
+<code>addListener, awaitRunning, awaitRunning, awaitTerminated, awaitTerminated, failureCause, isRunning, notifyFailed, notifyStarted, notifyStopped, startAsync, state, stopAsync, toString</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.replication.ReplicationEndpoint">
+<!-- -->
+</a>
+<h3>Methods inherited from interface org.apache.hadoop.hbase.replication.ReplicationEndpoint</h3>
+<code>awaitRunning, awaitRunning, awaitTerminated, awaitTerminated, failureCause, isRunning</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="entryQueue">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>entryQueue</h4>
+<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a><org.apache.hadoop.hbase.wal.WAL.Entry> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#line.154">entryQueue</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestEndpoint--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestEndpoint</h4>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#line.152">TestEndpoint</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="reset--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>reset</h4>
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#line.156">reset</a>()</pre>
+</li>
+</ul>
+<a name="getEntries--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getEntries</h4>
+<pre>public static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#line.160">getEntries</a>()</pre>
+</li>
+</ul>
+<a name="canReplicateToSameCluster--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>canReplicateToSameCluster</h4>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#line.165">canReplicateToSameCluster</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code>canReplicateToSameCluster</code> in interface <code>org.apache.hadoop.hbase.replication.ReplicationEndpoint</code></dd>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>canReplicateToSameCluster</code> in class <code>org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</code></dd>
+</dl>
+</li>
+</ul>
+<a name="createReplicator-java.util.List-int-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createReplicator</h4>
+<pre>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#line.170">createReplicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
+ int ordinal)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>createReplicator</code> in class <code>org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</code></dd>
+</dl>
+</li>
+</ul>
+<a name="getRegionServers--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getRegionServers</h4>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.ServerName> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#line.178">getRegionServers</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>getRegionServers</code> in class <code>org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint</code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestSerialReplicationEndpoint.TestEndpoint.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSourceFSConfigurationProvider.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" target="_top">Frames</a></li>
+<li><a href="TestSerialReplicationEndpoint.TestEndpoint.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a> | </li>
+<li><a href="#field.summary">Field</a> | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#field.detail">Field</a> | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html
new file mode 100644
index 0000000..f0fa689
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html
@@ -0,0 +1,460 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestSerialReplicationEndpoint (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="TestSerialReplicationEndpoint (Apache HBase 3.0.0-SNAPSHOT Test API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+var methods = {"i0":10,"i1":9,"i2":9,"i3":10,"i4":10,"i5":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestSerialReplicationEndpoint.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" target="_top">Frames</a></li>
+<li><a href="TestSerialReplicationEndpoint.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li><a href="#nested.class.summary">Nested</a> | </li>
+<li><a href="#field.summary">Field</a> | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#field.detail">Field</a> | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.replication.regionserver</div>
+<h2 title="Class TestSerialReplicationEndpoint" class="title">Class TestSerialReplicationEndpoint</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.replication.regionserver.TestSerialReplicationEndpoint</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#line.62">TestSerialReplicationEndpoint</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!-- -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint.TestEndpoint</a></span></code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static org.apache.hadoop.conf.Configuration</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#CONF">CONF</a></span></code> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.client.Connection</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#CONN">CONN</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#UTIL">UTIL</a></span></code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!-- -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#TestSerialReplicationEndpoint--">TestSerialReplicationEndpoint</a></span>()</code> </td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!-- -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#getZKClusterKey--">getZKClusterKey</a></span>()</code> </td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#setUp--">setUp</a></span>()</code> </td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#tearDown--">tearDown</a></span>()</code> </td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#testHBaseReplicationEndpoint-java.lang.String-java.lang.String-boolean-">testHBaseReplicationEndpoint</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> tableNameStr,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
+ boolean isSerial)</code> </td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#testParallelReplicate--">testParallelReplicate</a></span>()</code> </td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#testSerialReplicate--">testSerialReplicate</a></span>()</code> </td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!-- -->
+</a>
+<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="CLASS_RULE">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CLASS_RULE</h4>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#line.65">CLASS_RULE</a></pre>
+</li>
+</ul>
+<a name="UTIL">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>UTIL</h4>
+<pre>private static <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#line.68">UTIL</a></pre>
+</li>
+</ul>
+<a name="CONF">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CONF</h4>
+<pre>private static org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#line.69">CONF</a></pre>
+</li>
+</ul>
+<a name="CONN">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>CONN</h4>
+<pre>private static org.apache.hadoop.hbase.client.Connection <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#line.70">CONN</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!-- -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestSerialReplicationEndpoint--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestSerialReplicationEndpoint</h4>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#line.62">TestSerialReplicationEndpoint</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!-- -->
+</a>
+<h3>Method Detail</h3>
+<a name="setUp--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setUp</h4>
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#line.73">setUp</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="tearDown--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tearDown</h4>
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#line.81">tearDown</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="getZKClusterKey--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getZKClusterKey</h4>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#line.86">getZKClusterKey</a>()</pre>
+</li>
+</ul>
+<a name="testHBaseReplicationEndpoint-java.lang.String-java.lang.String-boolean-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testHBaseReplicationEndpoint</h4>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#line.91">testHBaseReplicationEndpoint</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> tableNameStr,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId,
+ boolean isSerial)
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testSerialReplicate--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testSerialReplicate</h4>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#line.143">testSerialReplicate</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testParallelReplicate--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testParallelReplicate</h4>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#line.148">testParallelReplicate</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestSerialReplicationEndpoint.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" target="_top">Frames</a></li>
+<li><a href="TestSerialReplicationEndpoint.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary: </li>
+<li><a href="#nested.class.summary">Nested</a> | </li>
+<li><a href="#field.summary">Field</a> | </li>
+<li><a href="#constructor.summary">Constr</a> | </li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail: </li>
+<li><a href="#field.detail">Field</a> | </li>
+<li><a href="#constructor.detail">Constr</a> | </li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSourceFSConfigurationProvider.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSourceFSConfigurationProvider.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSourceFSConfigurationProvider.html
index 2e0902f..e19de69 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSourceFSConfigurationProvider.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestSourceFSConfigurationProvider.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
@@ -241,7 +241,7 @@ implements org.apache.hadoop.hbase.replication.regionserver.SourceFSConfiguratio
</div>
<div class="subNav">
<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
</ul>
<ul class="navList">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html
deleted file mode 100644
index f9f1da0..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
- try {
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface (Apache HBase 3.0.0-SNAPSHOT Test API)";
- }
- }
- catch(err) {
- }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" target="_top">Frames</a></li>
-<li><a href="TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_top");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!-- -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface" class="title">Uses of Class<br>org.apache.hadoop.hbase.replication.regionserver.TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</h2>
-</div>
-<div class="classUseContainer">No usage of org.apache.hadoop.hbase.replication.regionserver.TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" target="_top">Frames</a></li>
-<li><a href="TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_bottom");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!-- -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html
deleted file mode 100644
index 0e02b3f..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
- try {
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest (Apache HBase 3.0.0-SNAPSHOT Test API)";
- }
- }
- catch(err) {
- }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" target="_top">Frames</a></li>
-<li><a href="TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_top");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!-- -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest" class="title">Uses of Class<br>org.apache.hadoop.hbase.replication.regionserver.TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest</h2>
-</div>
-<div class="classUseContainer">No usage of org.apache.hadoop.hbase.replication.regionserver.TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" target="_top">Frames</a></li>
-<li><a href="TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_bottom");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!-- -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html
deleted file mode 100644
index 35a0ea8..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html
+++ /dev/null
@@ -1,165 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestReplicator.ReplicationEndpointForTest.ReplicatorForTest (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
- try {
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestReplicator.ReplicationEndpointForTest.ReplicatorForTest (Apache HBase 3.0.0-SNAPSHOT Test API)";
- }
- }
- catch(err) {
- }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" target="_top">Frames</a></li>
-<li><a href="TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_top");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!-- -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestReplicator.ReplicationEndpointForTest.ReplicatorForTest" class="title">Uses of Class<br>org.apache.hadoop.hbase.replication.regionserver.TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</h2>
-</div>
-<div class="classUseContainer">
-<ul class="blockList">
-<li class="blockList">
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
-<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</a></span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Package</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver</a></td>
-<td class="colLast"> </td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase.replication.regionserver">
-<!-- -->
-</a>
-<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</a> in <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing subclasses, and an explanation">
-<caption><span>Subclasses of <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</a> in <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Class and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>class </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest</a></span></code> </td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" target="_top">Frames</a></li>
-<li><a href="TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_bottom");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!-- -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestSerialReplicationEndpoint.TestEndpoint.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestSerialReplicationEndpoint.TestEndpoint.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestSerialReplicationEndpoint.TestEndpoint.html
new file mode 100644
index 0000000..e09d05e
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestSerialReplicationEndpoint.TestEndpoint.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestSerialReplicationEndpoint.TestEndpoint (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestSerialReplicationEndpoint.TestEndpoint (Apache HBase 3.0.0-SNAPSHOT Test API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/TestSerialReplicationEndpoint.TestEndpoint.html" target="_top">Frames</a></li>
+<li><a href="TestSerialReplicationEndpoint.TestEndpoint.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestSerialReplicationEndpoint.TestEndpoint" class="title">Uses of Class<br>org.apache.hadoop.hbase.replication.regionserver.TestSerialReplicationEndpoint.TestEndpoint</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.replication.regionserver.TestSerialReplicationEndpoint.TestEndpoint</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/TestSerialReplicationEndpoint.TestEndpoint.html" target="_top">Frames</a></li>
+<li><a href="TestSerialReplicationEndpoint.TestEndpoint.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestSerialReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestSerialReplicationEndpoint.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestSerialReplicationEndpoint.html
new file mode 100644
index 0000000..fbad352
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/TestSerialReplicationEndpoint.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestSerialReplicationEndpoint (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+ try {
+ if (location.href.indexOf('is-external=true') == -1) {
+ parent.document.title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestSerialReplicationEndpoint (Apache HBase 3.0.0-SNAPSHOT Test API)";
+ }
+ }
+ catch(err) {
+ }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/TestSerialReplicationEndpoint.html" target="_top">Frames</a></li>
+<li><a href="TestSerialReplicationEndpoint.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_top");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!-- -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.TestSerialReplicationEndpoint" class="title">Uses of Class<br>org.apache.hadoop.hbase.replication.regionserver.TestSerialReplicationEndpoint</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.replication.regionserver.TestSerialReplicationEndpoint</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!-- -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!-- -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/TestSerialReplicationEndpoint.html" target="_top">Frames</a></li>
+<li><a href="TestSerialReplicationEndpoint.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+ allClassesLink = document.getElementById("allclasses_navbar_bottom");
+ if(window==top) {
+ allClassesLink.style.display = "block";
+ }
+ else {
+ allClassesLink.style.display = "none";
+ }
+ //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!-- -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
[13/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 8c4060d..b1e54cc 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -835,6 +835,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html#addStateAndBarrier-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.master.RegionState.State-long...-">addStateAndBarrier(RegionInfo, RegionState.State, long...)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationChecker</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#addStateAndBarrier-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.master.RegionState.State-long...-">addStateAndBarrier(RegionInfo, RegionState.State, long...)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckCleanReplicationBarriers</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHStore.html#addStoreFile--">addStoreFile()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHStore.html" title="class in org.apache.hadoop.hbase.regionserver">TestHStore</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MultithreadedTestUtil.TestContext.html#addThread-org.apache.hadoop.hbase.MultithreadedTestUtil.TestThread-">addThread(MultithreadedTestUtil.TestThread)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MultithreadedTestUtil.TestContext.html" title="class in org.apache.hadoop.hbase">MultithreadedTestUtil.TestContext</a></dt>
@@ -3134,10 +3136,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPerformanceEvaluation.Worker.html#call--">call()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPerformanceEvaluation.Worker.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALPerformanceEvaluation.Worker</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html#call--">call()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</a></dt>
-<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html#call--">call()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestCompatibilitySingletonFactory.TestCompatibilitySingletonFactoryCallable.html#call--">call()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestCompatibilitySingletonFactory.TestCompatibilitySingletonFactoryCallable.html" title="class in org.apache.hadoop.hbase">TestCompatibilitySingletonFactory.TestCompatibilitySingletonFactoryCallable</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestIdLock.IdLockTestThread.html#call--">call()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestIdLock.IdLockTestThread.html" title="class in org.apache.hadoop.hbase.util">TestIdLock.IdLockTestThread</a></dt>
@@ -3204,6 +3202,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.html#canonicalizeMetricName-java.lang.String-">canonicalizeMetricName(String)</a></span> - Method in class org.apache.hadoop.hbase.test.<a href="org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.html" title="class in org.apache.hadoop.hbase.test">MetricsAssertHelperImpl</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#canReplicateToSameCluster--">canReplicateToSameCluster()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint.TestEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestGetProcedureResult.DummyProcedure.html#canRollback">canRollback</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestGetProcedureResult.DummyProcedure.html" title="class in org.apache.hadoop.hbase.client">TestGetProcedureResult.DummyProcedure</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html#CAPACITY">CAPACITY</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util">TestBoundedPriorityBlockingQueue</a></dt>
@@ -5743,6 +5743,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationChecker</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestWALEntrySinkFilter</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestWALEntryStream.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestWALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestWALEntryStream</a></dt>
@@ -6251,6 +6253,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestFSVisitor.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestFSVisitor.html" title="class in org.apache.hadoop.hbase.util">TestFSVisitor</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckCleanReplicationBarriers</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckComparator</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckEncryption</a></dt>
@@ -6449,6 +6453,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.html#cleanRegionRootDir-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">cleanRegionRootDir(FileSystem, Path)</a></span> - Method in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.html" title="class in org.apache.hadoop.hbase.wal">WALPerformanceEvaluation</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#cleanReplicationBarrier-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-">cleanReplicationBarrier(Configuration, TableName)</a></span> - Static method in class org.apache.hadoop.hbase.util.hbck.<a href="org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html" title="class in org.apache.hadoop.hbase.util.hbck">HbckTestingUtil</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupHFileCleaner.html#cleanup--">cleanup()</a></span> - Method in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupHFileCleaner.html" title="class in org.apache.hadoop.hbase.backup">TestBackupHFileCleaner</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncSnapshotAdminApi.html#cleanup--">cleanup()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncSnapshotAdminApi.html" title="class in org.apache.hadoop.hbase.client">TestAsyncSnapshotAdminApi</a></dt>
@@ -6643,8 +6649,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#clearCompactionQueues-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest-">clearCompactionQueues(RpcController, AdminProtos.ClearCompactionQueuesRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#clearCompactionQueues-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest-">clearCompactionQueues(RpcController, AdminProtos.ClearCompactionQueuesRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/http/TestHttpServer.MyGroupsProvider.html#clearMapping--">clearMapping()</a></span> - Static method in class org.apache.hadoop.hbase.http.<a href="org/apache/hadoop/hbase/http/TestHttpServer.MyGroupsProvider.html" title="class in org.apache.hadoop.hbase.http">TestHttpServer.MyGroupsProvider</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestSecureExport.html#clearOutput-org.apache.hadoop.fs.Path-">clearOutput(Path)</a></span> - Static method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestSecureExport.html" title="class in org.apache.hadoop.hbase.coprocessor">TestSecureExport</a></dt>
@@ -6657,8 +6661,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestClearRegionBlockCache.html#clearRegionBlockCache-org.apache.hadoop.hbase.regionserver.HRegionServer-">clearRegionBlockCache(HRegionServer)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestClearRegionBlockCache.html" title="class in org.apache.hadoop.hbase.regionserver">TestClearRegionBlockCache</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#clearRegionBlockCache-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest-">clearRegionBlockCache(RpcController, AdminProtos.ClearRegionBlockCacheRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifierForTest.html#clearSnapshots--">clearSnapshots()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifierForTest.html" title="class in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifierForTest</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestPassCustomCellViaRegionObserver.html#clearTable--">clearTable()</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestPassCustomCellViaRegionObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestPassCustomCellViaRegionObserver</a></dt>
@@ -6864,8 +6866,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionServerNoMaster.html#closeRegion-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.regionserver.HRegionServer-org.apache.hadoop.hbase.HRegionInfo-">closeRegion(HBaseTestingUtility, HRegionServer, HRegionInfo)</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionServerNoMaster.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionServerNoMaster</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#closeRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest-">closeRegion(RpcController, AdminProtos.CloseRegionRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.html#closeRegion-org.apache.hadoop.hbase.regionserver.HRegion-">closeRegion(HRegion)</a></span> - Method in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.html" title="class in org.apache.hadoop.hbase.wal">WALPerformanceEvaluation</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseTestingUtility.html#closeRegionAndWAL-org.apache.hadoop.hbase.regionserver.Region-">closeRegionAndWAL(Region)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></dt>
@@ -7285,6 +7285,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/StripeCompactionsPerformanceEvaluation.html#COLUMN_FAMILY">COLUMN_FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/StripeCompactionsPerformanceEvaluation.html" title="class in org.apache.hadoop.hbase">StripeCompactionsPerformanceEvaluation</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#COLUMN_FAMILY">COLUMN_FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckCleanReplicationBarriers</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionServerOnlineConfigChange.html#COLUMN_FAMILY1">COLUMN_FAMILY1</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionServerOnlineConfigChange.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionServerOnlineConfigChange</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestFailedAppendAndSync.html#COLUMN_FAMILY_BYTES">COLUMN_FAMILY_BYTES</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestFailedAppendAndSync.html" title="class in org.apache.hadoop.hbase.regionserver">TestFailedAppendAndSync</a></dt>
@@ -7558,8 +7560,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#compactRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest-">compactRegion(RpcController, AdminProtos.CompactRegionRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#compactRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest-">compactRegion(RpcController, AdminProtos.CompactRegionRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticLoadBalancer.html#compactTable-org.apache.hadoop.hbase.TableName-">compactTable(TableName)</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">TestFavoredStochasticLoadBalancer</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/chaos/actions/CompactTableAction.html" title="class in org.apache.hadoop.hbase.chaos.actions"><span class="typeNameLink">CompactTableAction</span></a> - Class in <a href="org/apache/hadoop/hbase/chaos/actions/package-summary.html">org.apache.hadoop.hbase.chaos.actions</a></dt>
@@ -8024,6 +8024,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html#conf">conf</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSourceManager</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#CONF">CONF</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestWALEntryStream.html#CONF">CONF</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestWALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestWALEntryStream</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html#conf">conf</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationStateZKImpl</a></dt>
@@ -8366,6 +8368,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html#conn">conn</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationChecker</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#CONN">CONN</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AcidGuaranteesTestTool.AtomicGetReader.html#connection">connection</a></span> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/AcidGuaranteesTestTool.AtomicGetReader.html" title="class in org.apache.hadoop.hbase">AcidGuaranteesTestTool.AtomicGetReader</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/AcidGuaranteesTestTool.AtomicityWriter.html#connection">connection</a></span> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/AcidGuaranteesTestTool.AtomicityWriter.html" title="class in org.apache.hadoop.hbase">AcidGuaranteesTestTool.AtomicityWriter</a></dt>
@@ -9630,6 +9634,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/TestTagCompressionContext.html#createOffheapKVWithTags-int-">createOffheapKVWithTags(int)</a></span> - Method in class org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/TestTagCompressionContext.html" title="class in org.apache.hadoop.hbase.io">TestTagCompressionContext</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#createPeer--">createPeer()</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckCleanReplicationBarriers</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestTablePermissions.html#createPermissions--">createPermissions()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestTablePermissions.html" title="class in org.apache.hadoop.hbase.security.access">TestTablePermissions</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/compactions/TestStripeCompactionPolicy.html#createPolicy-org.apache.hadoop.conf.Configuration-">createPolicy(Configuration)</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.compactions.<a href="org/apache/hadoop/hbase/regionserver/compactions/TestStripeCompactionPolicy.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">TestStripeCompactionPolicy</a></dt>
@@ -9772,6 +9778,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#createReplicator-java.util.List-int-">createReplicator(List<WAL.Entry>, int)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#createReplicator-java.util.List-int-">createReplicator(List<WAL.Entry>, int)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint.TestEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#createReplicator-java.util.List-int-">createReplicator(List<WAL.Entry>, int)</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestMalformedCellFromClient.html#createRequest-org.apache.hadoop.hbase.client.RowMutations-byte:A-">createRequest(RowMutations, byte[])</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestMalformedCellFromClient.html" title="class in org.apache.hadoop.hbase.client">TestMalformedCellFromClient</a></dt>
@@ -11298,8 +11306,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/DelegatingKeyValueScanner.html#delegate">delegate</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/DelegatingKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">DelegatingKeyValueScanner</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#delegate">delegate</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/GenericTestUtils.DelegateAnswer.html#DelegateAnswer-java.lang.Object-">DelegateAnswer(Object)</a></span> - Constructor for class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/GenericTestUtils.DelegateAnswer.html" title="class in org.apache.hadoop.hbase">GenericTestUtils.DelegateAnswer</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/GenericTestUtils.DelegateAnswer.html#DelegateAnswer-org.apache.log4j.Logger-java.lang.Object-">DelegateAnswer(Logger, Object)</a></span> - Constructor for class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/GenericTestUtils.DelegateAnswer.html" title="class in org.apache.hadoop.hbase">GenericTestUtils.DelegateAnswer</a></dt>
@@ -11850,7 +11856,7 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#doFsck-org.apache.hadoop.conf.Configuration-boolean-org.apache.hadoop.hbase.TableName-">doFsck(Configuration, boolean, TableName)</a></span> - Static method in class org.apache.hadoop.hbase.util.hbck.<a href="org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html" title="class in org.apache.hadoop.hbase.util.hbck">HbckTestingUtil</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#doFsck-org.apache.hadoop.conf.Configuration-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-org.apache.hadoop.hbase.TableName-">doFsck(Configuration, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, TableName)</a></span> - Static method in class org.apache.hadoop.hbase.util.hbck.<a href="org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html" title="class in org.apache.hadoop.hbase.util.hbck">HbckTestingUtil</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#doFsck-org.apache.hadoop.conf.Configuration-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-boolean-org.apache.hadoop.hbase.TableName-">doFsck(Configuration, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, boolean, TableName)</a></span> - Static method in class org.apache.hadoop.hbase.util.hbck.<a href="org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html" title="class in org.apache.hadoop.hbase.util.hbck">HbckTestingUtil</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/http/TestHttpServer.EchoMapServlet.html#doGet-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-">doGet(HttpServletRequest, HttpServletResponse)</a></span> - Method in class org.apache.hadoop.hbase.http.<a href="org/apache/hadoop/hbase/http/TestHttpServer.EchoMapServlet.html" title="class in org.apache.hadoop.hbase.http">TestHttpServer.EchoMapServlet</a></dt>
<dd> </dd>
@@ -12309,8 +12315,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html#DummyReplicationListener--">DummyReplicationListener()</a></span> - Constructor for class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationTrackerZKImpl.DummyReplicationListener.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationTrackerZKImpl.DummyReplicationListener</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html#DummyReplicator-java.util.List-int-">DummyReplicator(List<WAL.Entry>, int)</a></span> - Constructor for class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/TestZooKeeperACL.DummySecurityConfiguration.html#DummySecurityConfiguration--">DummySecurityConfiguration()</a></span> - Constructor for class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/TestZooKeeperACL.DummySecurityConfiguration.html" title="class in org.apache.hadoop.hbase.zookeeper">TestZooKeeperACL.DummySecurityConfiguration</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.DummyServer.html#DummyServer--">DummyServer()</a></span> - Constructor for class org.apache.hadoop.hbase.master.cleaner.<a href="org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.DummyServer.html" title="class in org.apache.hadoop.hbase.master.cleaner">TestHFileCleaner.DummyServer</a></dt>
@@ -12640,6 +12644,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/asyncfs/TestSaslFanOutOneBlockAsyncDFSOutput.html#entryptionTestDirOnTestFs">entryptionTestDirOnTestFs</a></span> - Variable in class org.apache.hadoop.hbase.io.asyncfs.<a href="org/apache/hadoop/hbase/io/asyncfs/TestSaslFanOutOneBlockAsyncDFSOutput.html" title="class in org.apache.hadoop.hbase.io.asyncfs">TestSaslFanOutOneBlockAsyncDFSOutput</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#entryQueue">entryQueue</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint.TestEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/ColumnAggregationEndpoint.html#env">env</a></span> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/ColumnAggregationEndpoint.html" title="class in org.apache.hadoop.hbase.coprocessor">ColumnAggregationEndpoint</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/ColumnAggregationEndpointNullResponse.html#env">env</a></span> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/ColumnAggregationEndpointNullResponse.html" title="class in org.apache.hadoop.hbase.coprocessor">ColumnAggregationEndpointNullResponse</a></dt>
@@ -12982,8 +12988,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#executeProcedures-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest-">executeProcedures(RpcController, AdminProtos.ExecuteProceduresRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#executeProcedures-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest-">executeProcedures(RpcController, AdminProtos.ExecuteProceduresRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html#executionInfo">executionInfo</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html#ExecutionInfo-long-org.apache.hadoop.hbase.procedure2.TestYieldProcedures.TestStateMachineProcedure.State-boolean-">ExecutionInfo(long, TestYieldProcedures.TestStateMachineProcedure.State, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo.html" title="class in org.apache.hadoop.hbase.procedure2">TestYieldProcedures.TestStateMachineProcedure.ExecutionInfo</a></dt>
@@ -13277,8 +13281,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/TestNettyIPC.TestFailingRpcServer.FailingConnection.html#FailingConnection-org.apache.hadoop.hbase.ipc.TestNettyIPC.TestFailingRpcServer-org.apache.hbase.thirdparty.io.netty.channel.Channel-">FailingConnection(TestNettyIPC.TestFailingRpcServer, Channel)</a></span> - Constructor for class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestNettyIPC.TestFailingRpcServer.FailingConnection.html" title="class in org.apache.hadoop.hbase.ipc">TestNettyIPC.TestFailingRpcServer.FailingConnection</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html#FailingDummyReplicator-java.util.List-int-">FailingDummyReplicator(List<WAL.Entry>, int)</a></span> - Constructor for class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestStoreFileRefresherChore.FailingHRegionFileSystem.html#FailingHRegionFileSystem-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.client.RegionInfo-">FailingHRegionFileSystem(Configuration, FileSystem, Path, RegionInfo)</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestStoreFileRefresherChore.FailingHRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreFileRefresherChore.FailingHRegionFileSystem</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestEncryptionTest.FailingKeyProvider.html#FailingKeyProvider--">FailingKeyProvider()</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestEncryptionTest.FailingKeyProvider.html" title="class in org.apache.hadoop.hbase.util">TestEncryptionTest.FailingKeyProvider</a></dt>
@@ -13295,7 +13297,7 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/namespace/TestNamespaceAuditor.CPRegionServerObserver.html#failMerge-boolean-">failMerge(boolean)</a></span> - Method in class org.apache.hadoop.hbase.namespace.<a href="org/apache/hadoop/hbase/namespace/TestNamespaceAuditor.CPRegionServerObserver.html" title="class in org.apache.hadoop.hbase.namespace">TestNamespaceAuditor.CPRegionServerObserver</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#failNext">failNext</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html#failNext">failNext</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncProcess.html#FAILS">FAILS</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncProcess.html" title="class in org.apache.hadoop.hbase.client">TestAsyncProcess</a></dt>
<dd> </dd>
@@ -13311,12 +13313,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.html#FAILURE_PHASE_KEY">FAILURE_PHASE_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.html" title="class in org.apache.hadoop.hbase.backup">TestIncrementalBackupMergeWithFailures</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#FailureInjectingBlockingInterface-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-">FailureInjectingBlockingInterface(AdminProtos.AdminService.BlockingInterface)</a></span> - Constructor for class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html#FailureInjectingReplicationEndpointForTest--">FailureInjectingReplicationEndpointForTest()</a></span> - Constructor for class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html#FailureInjectingReplicatorForTest-java.util.List-int-">FailureInjectingReplicatorForTest(List<WAL.Entry>, int)</a></span> - Constructor for class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.BackupMergeJobWithFailures.html#failurePhase">failurePhase</a></span> - Variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.BackupMergeJobWithFailures.html" title="class in org.apache.hadoop.hbase.backup">TestIncrementalBackupMergeWithFailures.BackupMergeJobWithFailures</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html#FailurePhase--">FailurePhase()</a></span> - Constructor for enum org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup">TestIncrementalBackupMergeWithFailures.FailurePhase</a></dt>
@@ -14444,8 +14442,6 @@
<dd>
<div class="block">helper method to simulate region flush for a WAL.</div>
</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#flushRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest-">flushRegion(RpcController, AdminProtos.FlushRegionRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/TestFSHLogProvider.html#flushRegion-org.apache.hadoop.hbase.wal.WAL-byte:A-java.util.Set-">flushRegion(WAL, byte[], Set<byte[]>)</a></span> - Method in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/TestFSHLogProvider.html" title="class in org.apache.hadoop.hbase.wal">TestFSHLogProvider</a></dt>
<dd>
<div class="block">helper method to simulate region flush for a WAL.</div>
@@ -16049,6 +16045,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.html#getEndRow--">getEndRow()</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.html" title="class in org.apache.hadoop.hbase.mapreduce">TestTableSnapshotInputFormat</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#getEntries--">getEntries()</a></span> - Static method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint.TestEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#getEntriesCount--">getEntriesCount()</a></span> - Static method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#getErrorList--">getErrorList()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck.MockErrorReporter</a></dt>
@@ -17138,8 +17136,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#getOnlineRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest-">getOnlineRegion(RpcController, AdminProtos.GetOnlineRegionRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#getOnlineRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest-">getOnlineRegion(RpcController, AdminProtos.GetOnlineRegionRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestGlobalMemStoreSize.html#getOnlineRegionServers--">getOnlineRegionServers()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestGlobalMemStoreSize.html" title="class in org.apache.hadoop.hbase">TestGlobalMemStoreSize</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestRegionRebalancing.html#getOnlineRegionServers--">getOnlineRegionServers()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestRegionRebalancing.html" title="class in org.apache.hadoop.hbase">TestRegionRebalancing</a></dt>
@@ -17394,12 +17390,8 @@
<dd>
<div class="block">Use get to retrieve the HRegionInfo and validate it</div>
</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#getRegionInfo-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest-">getRegionInfo(RpcController, AdminProtos.GetRegionInfoRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#getRegionLoad-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest-">getRegionLoad(RpcController, AdminProtos.GetRegionLoadRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#getRegionLoad-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest-">getRegionLoad(RpcController, AdminProtos.GetRegionLoadRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TestMultiTableInputFormatBase.MRSplitsConnection.html#getRegionLocator-org.apache.hadoop.hbase.TableName-">getRegionLocator(TableName)</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestMultiTableInputFormatBase.MRSplitsConnection.html" title="class in org.apache.hadoop.hbase.mapreduce">TestMultiTableInputFormatBase.MRSplitsConnection</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TestTableInputFormatBase.ConnectionForMergeTesting.html#getRegionLocator-org.apache.hadoop.hbase.TableName-">getRegionLocator(TableName)</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestTableInputFormatBase.ConnectionForMergeTesting.html" title="class in org.apache.hadoop.hbase.mapreduce">TestTableInputFormatBase.ConnectionForMergeTesting</a></dt>
@@ -17598,6 +17590,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MockRegionServerServices.html#getRegionServerRpcQuotaManager--">getRegionServerRpcQuotaManager()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MockRegionServerServices.html" title="class in org.apache.hadoop.hbase">MockRegionServerServices</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#getRegionServers--">getRegionServers()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint.TestEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#getRegionServerSpaceQuotaManager--">getRegionServerSpaceQuotaManager()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MockRegionServerServices.html#getRegionServerSpaceQuotaManager--">getRegionServerSpaceQuotaManager()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MockRegionServerServices.html" title="class in org.apache.hadoop.hbase">MockRegionServerServices</a></dt>
@@ -17972,8 +17966,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#getServerInfo-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest-">getServerInfo(RpcController, AdminProtos.GetServerInfoRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#getServerInfo-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest-">getServerInfo(RpcController, AdminProtos.GetServerInfoRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/MockMasterServices.html#getServerManager--">getServerManager()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/MockMasterServices.html" title="class in org.apache.hadoop.hbase.master.assignment">MockMasterServices</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockNoopMasterServices.html#getServerManager--">getServerManager()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockNoopMasterServices.html" title="class in org.apache.hadoop.hbase.master">MockNoopMasterServices</a></dt>
@@ -18108,8 +18100,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#getSpaceQuotaSnapshots-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest-">getSpaceQuotaSnapshots(RpcController, QuotaProtos.GetSpaceQuotaSnapshotsRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#getSpaceQuotaSnapshots-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest-">getSpaceQuotaSnapshots(RpcController, QuotaProtos.GetSpaceQuotaSnapshotsRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.AdminCallable.html#getSpanName--">getSpanName()</a></span> - Method in class org.apache.hadoop.hbase.mttr.<a href="org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.AdminCallable.html" title="class in org.apache.hadoop.hbase.mttr">IntegrationTestMTTR.AdminCallable</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.PutCallable.html#getSpanName--">getSpanName()</a></span> - Method in class org.apache.hadoop.hbase.mttr.<a href="org/apache/hadoop/hbase/mttr/IntegrationTestMTTR.PutCallable.html" title="class in org.apache.hadoop.hbase.mttr">IntegrationTestMTTR.PutCallable</a></dt>
@@ -18255,8 +18245,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#getStoreFile-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest-">getStoreFile(RpcController, AdminProtos.GetStoreFileRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#getStoreFile-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest-">getStoreFile(RpcController, AdminProtos.GetStoreFileRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.html#getStoreFileIndexSize--">getStoreFileIndexSize()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapperStub</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestStoreFileRefresherChore.FailingHRegionFileSystem.html#getStoreFiles-java.lang.String-">getStoreFiles(String)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestStoreFileRefresherChore.FailingHRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreFileRefresherChore.FailingHRegionFileSystem</a></dt>
@@ -18782,6 +18770,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseZKTestingUtility.html#getZkCluster--">getZkCluster()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseZKTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseZKTestingUtility</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#getZKClusterKey--">getZKClusterKey()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/TestZKUtil.html#getZNodeDataVersion-java.lang.String-">getZNodeDataVersion(String)</a></span> - Method in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/TestZKUtil.html" title="class in org.apache.hadoop.hbase.zookeeper">TestZKUtil</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.DummyServer.html#getZooKeeper--">getZooKeeper()</a></span> - Method in class org.apache.hadoop.hbase.master.cleaner.<a href="org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.DummyServer.html" title="class in org.apache.hadoop.hbase.master.cleaner">TestHFileCleaner.DummyServer</a></dt>
@@ -27723,8 +27713,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionServerNoMaster.html#openRegion-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.regionserver.HRegionServer-org.apache.hadoop.hbase.HRegionInfo-">openRegion(HBaseTestingUtility, HRegionServer, HRegionInfo)</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionServerNoMaster.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionServerNoMaster</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#openRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest-">openRegion(RpcController, AdminProtos.OpenRegionRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.html#openRegion-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.wal.WALFactory-long-org.apache.hadoop.hbase.regionserver.LogRoller-">openRegion(FileSystem, Path, TableDescriptor, WALFactory, long, LogRoller)</a></span> - Method in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.html" title="class in org.apache.hadoop.hbase.wal">WALPerformanceEvaluation</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#openScanner-byte:A-org.apache.hadoop.hbase.client.Scan-">openScanner(byte[], Scan)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
@@ -27931,8 +27919,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestFilterList.html#orderingTest-org.apache.hadoop.hbase.filter.Filter-">orderingTest(Filter)</a></span> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilterList.html" title="class in org.apache.hadoop.hbase.filter">TestFilterList</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html#ordinal">ordinal</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</a></dt>
-<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a> - package org.apache.hadoop.hbase</dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/backup/package-summary.html">org.apache.hadoop.hbase.backup</a> - package org.apache.hadoop.hbase.backup</dt>
@@ -28418,6 +28404,10 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/ConstantDelayQueue.html#peek--">peek()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ConstantDelayQueue.html" title="class in org.apache.hadoop.hbase.util">ConstantDelayQueue</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#PEER_1">PEER_1</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckCleanReplicationBarriers</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#PEER_2">PEER_2</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckCleanReplicationBarriers</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSinkManager.html#PEER_CLUSTER_ID">PEER_CLUSTER_ID</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSinkManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSinkManager</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html#PEER_ID">PEER_ID</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationChecker</a></dt>
@@ -31088,6 +31078,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html#QUEUE_STORAGE">QUEUE_STORAGE</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationChecker</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#QUEUE_STORAGE">QUEUE_STORAGE</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckCleanReplicationBarriers</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/locking/TestLockProcedure.html#queueLock-org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockRequest-">queueLock(LockServiceProtos.LockRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.locking.<a href="org/apache/hadoop/hbase/master/locking/TestLockProcedure.html" title="class in org.apache.hadoop.hbase.master.locking">TestLockProcedure</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestSingleColumnValueFilter.html#QUICK_PATTERN">QUICK_PATTERN</a></span> - Static variable in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestSingleColumnValueFilter.html" title="class in org.apache.hadoop.hbase.filter">TestSingleColumnValueFilter</a></dt>
@@ -32150,8 +32142,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#replay-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.client.Put-long-">replay(HRegion, Put, long)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegionReplayEvents</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#replay-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest-">replay(RpcController, AdminProtos.ReplicateWALEntryRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#replayEdit-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.wal.WAL.Entry-">replayEdit(HRegion, WAL.Entry)</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegionReplayEvents</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.html#REPLICA_COUNT_DEFAULT">REPLICA_COUNT_DEFAULT</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.html" title="class in org.apache.hadoop.hbase">IntegrationTestRegionReplicaPerf</a></dt>
@@ -32192,16 +32182,10 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#replicated">replicated</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.ReplicationEndpointReturningFalse</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html#replicateEntries-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-java.util.List-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">replicateEntries(AdminProtos.AdminService.BlockingInterface, List<WAL.Entry>, String, Path, Path)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest</a></dt>
-<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html#replicateEntries-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-java.util.List-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">replicateEntries(AdminProtos.AdminService.BlockingInterface, List<WAL.Entry>, String, Path, Path)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpointNoMaster.html#replicateUsingCallable-org.apache.hadoop.hbase.client.ClusterConnection-java.util.Queue-">replicateUsingCallable(ClusterConnection, Queue<WAL.Entry>)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpointNoMaster.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestRegionReplicaReplicationEndpointNoMaster</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#replicateWALEntry-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest-">replicateWALEntry(RpcController, AdminProtos.ReplicateWALEntryRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#replicateWALEntry-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest-">replicateWALEntry(RpcController, AdminProtos.ReplicateWALEntryRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html#replication">replication</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSourceManager</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationWithTags.html#replicationAdmin">replicationAdmin</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationWithTags.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationWithTags</a></dt>
@@ -32230,8 +32214,6 @@
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html#replicationZNode">replicationZNode</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationStateZKImpl.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationStateZKImpl</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html#ReplicatorForTest-java.util.List-int-">ReplicatorForTest(List<WAL.Entry>, int)</a></span> - Constructor for class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#report-java.lang.String-">report(String)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck.MockErrorReporter</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/MultiThreadedAction.ProgressReporter.html#reporterId">reporterId</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/MultiThreadedAction.ProgressReporter.html" title="class in org.apache.hadoop.hbase.util">MultiThreadedAction.ProgressReporter</a></dt>
@@ -32324,6 +32306,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.LoadCounter.html#reset-java.util.Set-">reset(Set<Long>)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.LoadCounter.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.LoadCounter</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#reset--">reset()</a></span> - Static method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint.TestEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationProcedureRetry.MockHMaster.html#reset-boolean-">reset(boolean)</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationProcedureRetry.MockHMaster.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationProcedureRetry.MockHMaster</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.html#reset--">reset()</a></span> - Method in class org.apache.hadoop.hbase.test.<a href="org/apache/hadoop/hbase/test/MetricsAssertHelperImpl.html" title="class in org.apache.hadoop.hbase.test">MetricsAssertHelperImpl</a></dt>
@@ -32888,8 +32872,6 @@
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#rollWALWriter-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest-">rollWALWriter(RpcController, AdminProtos.RollWALWriterRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title="class in org.apache.hadoop.hbase.master">MockRegionServer</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#rollWALWriter-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest-">rollWALWriter(RpcController, AdminProtos.RollWALWriterRequest)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupHFileCleaner.html#root">root</a></span> - Variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupHFileCleaner.html" title="class in org.apache.hadoop.hbase.backup">TestBackupHFileCleaner</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/cleaner/TestReplicationHFileCleaner.html#root">root</a></span> - Variable in class org.apache.hadoop.hbase.master.cleaner.<a href="org/apache/hadoop/hbase/master/cleaner/TestReplicationHFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">TestReplicationHFileCleaner</a></dt>
@@ -36206,6 +36188,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationChecker</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestSerialReplicationEndpoint</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestWALEntryStream.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestWALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestWALEntryStream</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestAddToSerialReplicationPeer.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestAddToSerialReplicationPeer.html" title="class in org.apache.hadoop.hbase.replication">TestAddToSerialReplicationPeer</a></dt>
@@ -36381,6 +36365,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestFSVisitor.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestFSVisitor.html" title="class in org.apache.hadoop.hbase.util">TestFSVisitor</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckCleanReplicationBarriers</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckEncryption</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHBaseFsckMOB.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckMOB.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckMOB</a></dt>
@@ -39213,8 +39199,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockRegionServer.html#stopServer-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest-">stopServer(RpcController, AdminProtos.StopServerRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockRegionServer.html" title=
<TRUNCATED>
[15/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call() throws IOException {<a name="line.396"></a>
+<span class="sourceLineNo">397</span> try {<a name="line.397"></a>
+<spa
<TRUNCATED>
[44/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
index e1c2cca..785b6d1 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3856">HBaseFsck.HbckInfo</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3868">HBaseFsck.HbckInfo</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" title="interface in org.apache.hadoop.hbase.util">KeyRange</a></pre>
<div class="block">Maintain information about a particular region. It gathers information
@@ -305,7 +305,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>metaEntry</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.MetaEntry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3857">metaEntry</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.MetaEntry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3869">metaEntry</a></pre>
</li>
</ul>
<a name="hdfsEntry">
@@ -314,7 +314,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>hdfsEntry</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HdfsEntry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3858">hdfsEntry</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HdfsEntry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3870">hdfsEntry</a></pre>
</li>
</ul>
<a name="deployedEntries">
@@ -323,7 +323,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>deployedEntries</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.OnlineEntry</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3859">deployedEntries</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.OnlineEntry</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3871">deployedEntries</a></pre>
</li>
</ul>
<a name="deployedOn">
@@ -332,7 +332,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>deployedOn</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3860">deployedOn</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3872">deployedOn</a></pre>
</li>
</ul>
<a name="skipChecks">
@@ -341,7 +341,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>skipChecks</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3861">skipChecks</a></pre>
+<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3873">skipChecks</a></pre>
</li>
</ul>
<a name="isMerged">
@@ -350,7 +350,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>isMerged</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3862">isMerged</a></pre>
+<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3874">isMerged</a></pre>
</li>
</ul>
<a name="deployedReplicaId">
@@ -359,7 +359,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>deployedReplicaId</h4>
-<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3863">deployedReplicaId</a></pre>
+<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3875">deployedReplicaId</a></pre>
</li>
</ul>
<a name="primaryHRIForDeployedReplica">
@@ -368,7 +368,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockListLast">
<li class="blockList">
<h4>primaryHRIForDeployedReplica</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3864">primaryHRIForDeployedReplica</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3876">primaryHRIForDeployedReplica</a></pre>
</li>
</ul>
</li>
@@ -385,7 +385,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockListLast">
<li class="blockList">
<h4>HbckInfo</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3866">HbckInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.MetaEntry</a> metaEntry)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3878">HbckInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.MetaEntry</a> metaEntry)</pre>
</li>
</ul>
</li>
@@ -402,7 +402,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>getReplicaId</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3870">getReplicaId</a>()</pre>
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3882">getReplicaId</a>()</pre>
</li>
</ul>
<a name="addServer-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">
@@ -411,7 +411,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>addServer</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3874">addServer</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3886">addServer</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri,
<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> server)</pre>
</li>
</ul>
@@ -421,7 +421,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>toString</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3887">toString</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3899">toString</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code> in class <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -434,7 +434,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>getStartKey</h4>
-<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3899">getStartKey</a>()</pre>
+<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3911">getStartKey</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html#getStartKey--">getStartKey</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" title="interface in org.apache.hadoop.hbase.util">KeyRange</a></code></dd>
@@ -447,7 +447,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>getEndKey</h4>
-<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3911">getEndKey</a>()</pre>
+<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3923">getEndKey</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html#getEndKey--">getEndKey</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" title="interface in org.apache.hadoop.hbase.util">KeyRange</a></code></dd>
@@ -460,7 +460,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>getTableName</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3922">getTableName</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3934">getTableName</a>()</pre>
</li>
</ul>
<a name="getRegionNameAsString--">
@@ -469,7 +469,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>getRegionNameAsString</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3939">getRegionNameAsString</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3951">getRegionNameAsString</a>()</pre>
</li>
</ul>
<a name="getRegionName--">
@@ -478,7 +478,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>getRegionName</h4>
-<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3955">getRegionName</a>()</pre>
+<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3967">getRegionName</a>()</pre>
</li>
</ul>
<a name="getPrimaryHRIForDeployedReplica--">
@@ -487,7 +487,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>getPrimaryHRIForDeployedReplica</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3969">getPrimaryHRIForDeployedReplica</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3981">getPrimaryHRIForDeployedReplica</a>()</pre>
</li>
</ul>
<a name="getHdfsRegionDir--">
@@ -496,7 +496,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>getHdfsRegionDir</h4>
-<pre>org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3973">getHdfsRegionDir</a>()</pre>
+<pre>org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3985">getHdfsRegionDir</a>()</pre>
</li>
</ul>
<a name="containsOnlyHdfsEdits--">
@@ -505,7 +505,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>containsOnlyHdfsEdits</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3980">containsOnlyHdfsEdits</a>()</pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3992">containsOnlyHdfsEdits</a>()</pre>
</li>
</ul>
<a name="isHdfsRegioninfoPresent--">
@@ -514,7 +514,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>isHdfsRegioninfoPresent</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3987">isHdfsRegioninfoPresent</a>()</pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3999">isHdfsRegioninfoPresent</a>()</pre>
</li>
</ul>
<a name="getModTime--">
@@ -523,7 +523,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>getModTime</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3994">getModTime</a>()</pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4006">getModTime</a>()</pre>
</li>
</ul>
<a name="getHdfsHRI--">
@@ -532,7 +532,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>getHdfsHRI</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4001">getHdfsHRI</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4013">getHdfsHRI</a>()</pre>
</li>
</ul>
<a name="setSkipChecks-boolean-">
@@ -541,7 +541,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>setSkipChecks</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4008">setSkipChecks</a>(boolean skipChecks)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4020">setSkipChecks</a>(boolean skipChecks)</pre>
</li>
</ul>
<a name="isSkipChecks--">
@@ -550,7 +550,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>isSkipChecks</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4012">isSkipChecks</a>()</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4024">isSkipChecks</a>()</pre>
</li>
</ul>
<a name="setMerged-boolean-">
@@ -559,7 +559,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockList">
<li class="blockList">
<h4>setMerged</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4016">setMerged</a>(boolean isMerged)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4028">setMerged</a>(boolean isMerged)</pre>
</li>
</ul>
<a name="isMerged--">
@@ -568,7 +568,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" t
<ul class="blockListLast">
<li class="blockList">
<h4>isMerged</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4020">isMerged</a>()</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4032">isMerged</a>()</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
index 14e3f9e..348a72a 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html
@@ -107,7 +107,7 @@
</dl>
<hr>
<br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3831">HBaseFsck.HdfsEntry</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3843">HBaseFsck.HdfsEntry</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">Stores the regioninfo entries from HDFS</div>
</li>
@@ -201,7 +201,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>hri</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3832">hri</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3844">hri</a></pre>
</li>
</ul>
<a name="hdfsRegionDir">
@@ -210,7 +210,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>hdfsRegionDir</h4>
-<pre>org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3833">hdfsRegionDir</a></pre>
+<pre>org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3845">hdfsRegionDir</a></pre>
</li>
</ul>
<a name="hdfsRegionDirModTime">
@@ -219,7 +219,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>hdfsRegionDirModTime</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3834">hdfsRegionDirModTime</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3846">hdfsRegionDirModTime</a></pre>
</li>
</ul>
<a name="hdfsRegioninfoFilePresent">
@@ -228,7 +228,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>hdfsRegioninfoFilePresent</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3835">hdfsRegioninfoFilePresent</a></pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3847">hdfsRegioninfoFilePresent</a></pre>
</li>
</ul>
<a name="hdfsOnlyEdits">
@@ -237,7 +237,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>hdfsOnlyEdits</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3836">hdfsOnlyEdits</a></pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3848">hdfsOnlyEdits</a></pre>
</li>
</ul>
</li>
@@ -254,7 +254,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>HdfsEntry</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3831">HdfsEntry</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3843">HdfsEntry</a>()</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
index c8fba8d..9e23565 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3780">HBaseFsck.MetaEntry</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3792">HBaseFsck.MetaEntry</a>
extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a></pre>
<div class="block">Stores the regioninfo entries scanned from META</div>
</li>
@@ -264,7 +264,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
<ul class="blockList">
<li class="blockList">
<h4>regionServer</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3781">regionServer</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3793">regionServer</a></pre>
</li>
</ul>
<a name="modTime">
@@ -273,7 +273,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
<ul class="blockList">
<li class="blockList">
<h4>modTime</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3782">modTime</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3794">modTime</a></pre>
</li>
</ul>
<a name="splitA">
@@ -282,7 +282,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
<ul class="blockList">
<li class="blockList">
<h4>splitA</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3783">splitA</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3795">splitA</a></pre>
</li>
</ul>
<a name="splitB">
@@ -291,7 +291,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
<ul class="blockListLast">
<li class="blockList">
<h4>splitB</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3783">splitB</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3795">splitB</a></pre>
</li>
</ul>
</li>
@@ -308,7 +308,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
<ul class="blockList">
<li class="blockList">
<h4>MetaEntry</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3785">MetaEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> rinfo,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3797">MetaEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> rinfo,
<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> regionServer,
long modTime)</pre>
</li>
@@ -319,7 +319,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
<ul class="blockListLast">
<li class="blockList">
<h4>MetaEntry</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3789">MetaEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> rinfo,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3801">MetaEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> rinfo,
<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> regionServer,
long modTime,
<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> splitA,
@@ -340,7 +340,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
<ul class="blockList">
<li class="blockList">
<h4>equals</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3799">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> o)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3811">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> o)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html#equals-java.lang.Object-">equals</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a></code></dd>
@@ -355,7 +355,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title=
<ul class="blockListLast">
<li class="blockList">
<h4>hashCode</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3813">hashCode</a>()</pre>
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3825">hashCode</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html#hashCode--">hashCode</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
index 47d570b..93b3f15 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3842">HBaseFsck.OnlineEntry</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3854">HBaseFsck.OnlineEntry</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">Stores the regioninfo retrieved from Online region servers.</div>
</li>
@@ -206,7 +206,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>hri</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3843">hri</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3855">hri</a></pre>
</li>
</ul>
<a name="hsa">
@@ -215,7 +215,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>hsa</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3844">hsa</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3856">hsa</a></pre>
</li>
</ul>
</li>
@@ -232,7 +232,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>OnlineEntry</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3842">OnlineEntry</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3854">OnlineEntry</a>()</pre>
</li>
</ul>
</li>
@@ -249,7 +249,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>toString</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3847">toString</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3859">toString</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code> in class <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
index fda9ec4..b631494 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4152">HBaseFsck.PrintingErrorReporter</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4163">HBaseFsck.PrintingErrorReporter</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></pre>
</li>
@@ -301,7 +301,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>errorCount</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4153">errorCount</a></pre>
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4164">errorCount</a></pre>
</li>
</ul>
<a name="showProgress">
@@ -310,7 +310,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>showProgress</h4>
-<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4154">showProgress</a></pre>
+<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4165">showProgress</a></pre>
</li>
</ul>
<a name="progressThreshold">
@@ -319,7 +319,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>progressThreshold</h4>
-<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4156">progressThreshold</a></pre>
+<pre>private static final int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4167">progressThreshold</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.PrintingErrorReporter.progressThreshold">Constant Field Values</a></dd>
@@ -332,7 +332,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>errorTables</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4158">errorTables</a></pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4169">errorTables</a></pre>
</li>
</ul>
<a name="errorList">
@@ -341,7 +341,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockListLast">
<li class="blockList">
<h4>errorList</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4161">errorList</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4172">errorList</a></pre>
</li>
</ul>
</li>
@@ -358,7 +358,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockListLast">
<li class="blockList">
<h4>PrintingErrorReporter</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4152">PrintingErrorReporter</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4163">PrintingErrorReporter</a>()</pre>
</li>
</ul>
</li>
@@ -375,7 +375,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>clear</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4164">clear</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4175">clear</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#clear--">clear</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -388,7 +388,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>reportError</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4171">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4182">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -402,7 +402,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>reportError</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4186">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4197">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a> table)</pre>
<dl>
@@ -417,7 +417,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>reportError</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4192">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4203">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a> table,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> info)</pre>
@@ -433,7 +433,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>reportError</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4200">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4211">reportError</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a> errorCode,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a> table,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> info1,
@@ -450,7 +450,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>reportError</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4209">reportError</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4220">reportError</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#reportError-java.lang.String-">reportError</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -463,7 +463,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>report</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4219">report</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4230">report</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
<div class="block">Report error information, but do not increment the error count. Intended for cases
where the actual error would have been reported previously.</div>
<dl>
@@ -480,7 +480,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>summarize</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4227">summarize</a>()</pre>
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4238">summarize</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#summarize--">summarize</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -493,7 +493,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>getErrorList</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4240">getErrorList</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4251">getErrorList</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#getErrorList--">getErrorList</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -506,7 +506,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>print</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4245">print</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4256">print</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#print-java.lang.String-">print</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -519,7 +519,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>tableHasErrors</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4252">tableHasErrors</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a> table)</pre>
+<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4263">tableHasErrors</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a> table)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#tableHasErrors-org.apache.hadoop.hbase.util.HBaseFsck.TableInfo-">tableHasErrors</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -532,7 +532,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>resetErrors</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4257">resetErrors</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4268">resetErrors</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#resetErrors--">resetErrors</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -545,7 +545,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockList">
<li class="blockList">
<h4>detail</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4262">detail</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4273">detail</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> message)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#detail-java.lang.String-">detail</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
@@ -558,7 +558,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorR
<ul class="blockListLast">
<li class="blockList">
<h4>progress</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4270">progress</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4281">progress</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#progress--">progress</a></code> in interface <code><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
index 575ec16..2693c0e 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.827">HBaseFsck.RegionBoundariesInformation</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.839">HBaseFsck.RegionBoundariesInformation</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
</li>
</ul>
@@ -219,7 +219,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>regionName</h4>
-<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.828">regionName</a></pre>
+<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.840">regionName</a></pre>
</li>
</ul>
<a name="metaFirstKey">
@@ -228,7 +228,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>metaFirstKey</h4>
-<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.829">metaFirstKey</a></pre>
+<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.841">metaFirstKey</a></pre>
</li>
</ul>
<a name="metaLastKey">
@@ -237,7 +237,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>metaLastKey</h4>
-<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.830">metaLastKey</a></pre>
+<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.842">metaLastKey</a></pre>
</li>
</ul>
<a name="storesFirstKey">
@@ -246,7 +246,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>storesFirstKey</h4>
-<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.831">storesFirstKey</a></pre>
+<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.843">storesFirstKey</a></pre>
</li>
</ul>
<a name="storesLastKey">
@@ -255,7 +255,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>storesLastKey</h4>
-<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.832">storesLastKey</a></pre>
+<pre>public byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.844">storesLastKey</a></pre>
</li>
</ul>
</li>
@@ -272,7 +272,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>RegionBoundariesInformation</h4>
-<pre>private <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.827">RegionBoundariesInformation</a>()</pre>
+<pre>private <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.839">RegionBoundariesInformation</a>()</pre>
</li>
</ul>
</li>
@@ -289,7 +289,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>toString</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.834">toString</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.846">toString</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code> in class <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
index 2807a7b..e4fb91b 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html
@@ -126,7 +126,7 @@
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.1269">HBaseFsck.RegionRepairException</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.1281">HBaseFsck.RegionRepairException</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Exception thrown when a integrity repair operation fails in an
unresolvable way.</div>
@@ -221,7 +221,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.h
<ul class="blockList">
<li class="blockList">
<h4>serialVersionUID</h4>
-<pre>private static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html#line.1270">serialVersionUID</a></pre>
+<pre>private static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html#line.1282">serialVersionUID</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.HBaseFsck.RegionRepairException.serialVersionUID">Constant Field Values</a></dd>
@@ -234,7 +234,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.h
<ul class="blockListLast">
<li class="blockList">
<h4>ioe</h4>
-<pre>final <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html#line.1271">ioe</a></pre>
+<pre>final <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html#line.1283">ioe</a></pre>
</li>
</ul>
</li>
@@ -251,7 +251,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.h
<ul class="blockListLast">
<li class="blockList">
<h4>RegionRepairException</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html#line.1272">RegionRepairException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> s,
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html#line.1284">RegionRepairException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> s,
<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> ioe)</pre>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
index 1e3b381..fe72f1a 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2965">HBaseFsck.TableInfo.HDFSIntegrityFixer</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2977">HBaseFsck.TableInfo.HDFSIntegrityFixer</a>
extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo.IntegrityFixSuggester</a></pre>
<div class="block">This handler fixes integrity errors from hdfs information. There are
basically three classes of integrity problems 1) holes, 2) overlaps, and
@@ -295,7 +295,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
<ul class="blockList">
<li class="blockList">
<h4>conf</h4>
-<pre>org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2966">conf</a></pre>
+<pre>org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2978">conf</a></pre>
</li>
</ul>
<a name="fixOverlaps">
@@ -304,7 +304,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
<ul class="blockListLast">
<li class="blockList">
<h4>fixOverlaps</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2968">fixOverlaps</a></pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2980">fixOverlaps</a></pre>
</li>
</ul>
</li>
@@ -321,7 +321,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
<ul class="blockListLast">
<li class="blockList">
<h4>HDFSIntegrityFixer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2970">HDFSIntegrityFixer</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a> ti,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2982">HDFSIntegrityFixer</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a> ti,
<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a> errors,
org.apache.hadoop.conf.Configuration conf,
boolean fixHoles,
@@ -342,7 +342,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
<ul class="blockList">
<li class="blockList">
<h4>handleRegionStartKeyNotEmpty</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2984">handleRegionStartKeyNotEmpty</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> next)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2996">handleRegionStartKeyNotEmpty</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a> next)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">This is a special case hole -- when the first region of a table is
missing from META, HBase doesn't acknowledge the existance of the
@@ -367,7 +367,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
<ul class="blockList">
<li class="blockList">
<h4>handleRegionEndKeyNotEmpty</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3004">handleRegionEndKeyNotEmpty</a>(byte[] curEndKey)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3016">handleRegionEndKeyNotEmpty</a>(byte[] curEndKey)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandlerImpl.html#handleRegionEndKeyNotEmpty-byte:A-">TableIntegrityErrorHandlerImpl</a></code></span></div>
<div class="block">Callback for handling case where a Table has a last region that does not
@@ -391,7 +391,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
<ul class="blockList">
<li class="blockList">
<h4>handleHoleInRegionChain</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3026">handleHoleInRegionChain</a>(byte[] holeStartKey,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3038">handleHoleInRegionChain</a>(byte[] holeStartKey,
byte[] holeStopKey)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">There is a hole in the hdfs regions that violates the table integrity
@@ -415,7 +415,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
<ul class="blockList">
<li class="blockList">
<h4>handleOverlapGroup</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3056">handleOverlapGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> overlap)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3068">handleOverlapGroup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> overlap)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">This takes set of overlapping regions and merges them into a single
region. This covers cases like degenerate regions, shared start key,
@@ -444,7 +444,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
<ul class="blockList">
<li class="blockList">
<h4>removeParentsAndFixSplits</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3081">removeParentsAndFixSplits</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> overlap)
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3093">removeParentsAndFixSplits</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> overlap)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -458,7 +458,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
<ul class="blockList">
<li class="blockList">
<h4>mergeOverlaps</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3193">mergeOverlaps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> overlap)
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3205">mergeOverlaps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> overlap)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -472,7 +472,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo
<ul class="blockListLast">
<li class="blockList">
<h4>sidelineBigOverlaps</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3271">sidelineBigOverlaps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> bigOverlap)
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3283">sidelineBigOverlaps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a><<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>> bigOverlap)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<div class="block">Sideline some regions in a big overlap group so that it
will have fewer regions, and it is easier to merge them later on.</div>
[37/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
index c282308..094b592 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html
@@ -426,483 +426,481 @@
<span class="sourceLineNo">418</span> */<a name="line.418"></a>
<span class="sourceLineNo">419</span> void removeRecoveredSource(ReplicationSourceInterface src) {<a name="line.419"></a>
<span class="sourceLineNo">420</span> LOG.info("Done with the recovered queue " + src.getQueueId());<a name="line.420"></a>
-<span class="sourceLineNo">421</span> src.getSourceMetrics().clear();<a name="line.421"></a>
-<span class="sourceLineNo">422</span> this.oldsources.remove(src);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> // Delete queue from storage and memory<a name="line.423"></a>
-<span class="sourceLineNo">424</span> deleteQueue(src.getQueueId());<a name="line.424"></a>
-<span class="sourceLineNo">425</span> this.walsByIdRecoveredQueues.remove(src.getQueueId());<a name="line.425"></a>
-<span class="sourceLineNo">426</span> }<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span> /**<a name="line.428"></a>
-<span class="sourceLineNo">429</span> * Clear the metrics and related replication queue of the specified old source<a name="line.429"></a>
-<span class="sourceLineNo">430</span> * @param src source to clear<a name="line.430"></a>
-<span class="sourceLineNo">431</span> */<a name="line.431"></a>
-<span class="sourceLineNo">432</span> void removeSource(ReplicationSourceInterface src) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span> LOG.info("Done with the queue " + src.getQueueId());<a name="line.433"></a>
-<span class="sourceLineNo">434</span> src.getSourceMetrics().clear();<a name="line.434"></a>
-<span class="sourceLineNo">435</span> this.sources.remove(src.getPeerId());<a name="line.435"></a>
-<span class="sourceLineNo">436</span> // Delete queue from storage and memory<a name="line.436"></a>
-<span class="sourceLineNo">437</span> deleteQueue(src.getQueueId());<a name="line.437"></a>
-<span class="sourceLineNo">438</span> this.walsById.remove(src.getQueueId());<a name="line.438"></a>
-<span class="sourceLineNo">439</span> }<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span> /**<a name="line.441"></a>
-<span class="sourceLineNo">442</span> * Delete a complete queue of wals associated with a replication source<a name="line.442"></a>
-<span class="sourceLineNo">443</span> * @param queueId the id of replication queue to delete<a name="line.443"></a>
-<span class="sourceLineNo">444</span> */<a name="line.444"></a>
-<span class="sourceLineNo">445</span> private void deleteQueue(String queueId) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> abortWhenFail(() -> this.queueStorage.removeQueue(server.getServerName(), queueId));<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> @FunctionalInterface<a name="line.449"></a>
-<span class="sourceLineNo">450</span> private interface ReplicationQueueOperation {<a name="line.450"></a>
-<span class="sourceLineNo">451</span> void exec() throws ReplicationException;<a name="line.451"></a>
-<span class="sourceLineNo">452</span> }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span> private void abortWhenFail(ReplicationQueueOperation op) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span> try {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> op.exec();<a name="line.456"></a>
-<span class="sourceLineNo">457</span> } catch (ReplicationException e) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> server.abort("Failed to operate on replication queue", e);<a name="line.458"></a>
-<span class="sourceLineNo">459</span> }<a name="line.459"></a>
-<span class="sourceLineNo">460</span> }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span> private void throwIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> try {<a name="line.463"></a>
-<span class="sourceLineNo">464</span> op.exec();<a name="line.464"></a>
-<span class="sourceLineNo">465</span> } catch (ReplicationException e) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> throw new IOException(e);<a name="line.466"></a>
-<span class="sourceLineNo">467</span> }<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span> private void abortAndThrowIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> try {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> op.exec();<a name="line.472"></a>
-<span class="sourceLineNo">473</span> } catch (ReplicationException e) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span> server.abort("Failed to operate on replication queue", e);<a name="line.474"></a>
-<span class="sourceLineNo">475</span> throw new IOException(e);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> }<a name="line.476"></a>
-<span class="sourceLineNo">477</span> }<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
-<span class="sourceLineNo">479</span> /**<a name="line.479"></a>
-<span class="sourceLineNo">480</span> * This method will log the current position to storage. And also clean old logs from the<a name="line.480"></a>
-<span class="sourceLineNo">481</span> * replication queue.<a name="line.481"></a>
-<span class="sourceLineNo">482</span> * @param queueId id of the replication queue<a name="line.482"></a>
-<span class="sourceLineNo">483</span> * @param queueRecovered indicates if this queue comes from another region server<a name="line.483"></a>
-<span class="sourceLineNo">484</span> * @param entryBatch the wal entry batch we just shipped<a name="line.484"></a>
-<span class="sourceLineNo">485</span> */<a name="line.485"></a>
-<span class="sourceLineNo">486</span> public void logPositionAndCleanOldLogs(String queueId, boolean queueRecovered,<a name="line.486"></a>
-<span class="sourceLineNo">487</span> WALEntryBatch entryBatch) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span> String fileName = entryBatch.getLastWalPath().getName();<a name="line.488"></a>
-<span class="sourceLineNo">489</span> abortWhenFail(() -> this.queueStorage.setWALPosition(server.getServerName(), queueId, fileName,<a name="line.489"></a>
-<span class="sourceLineNo">490</span> entryBatch.getLastWalPosition(), entryBatch.getLastSeqIds()));<a name="line.490"></a>
-<span class="sourceLineNo">491</span> cleanOldLogs(fileName, entryBatch.isEndOfFile(), queueId, queueRecovered);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<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> * Cleans a log file and all older logs from replication queue. Called when we are sure that a log<a name="line.495"></a>
-<span class="sourceLineNo">496</span> * file is closed and has no more entries.<a name="line.496"></a>
-<span class="sourceLineNo">497</span> * @param log Path to the log<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * @param inclusive whether we should also remove the given log file<a name="line.498"></a>
-<span class="sourceLineNo">499</span> * @param queueId id of the replication queue<a name="line.499"></a>
-<span class="sourceLineNo">500</span> * @param queueRecovered Whether this is a recovered queue<a name="line.500"></a>
-<span class="sourceLineNo">501</span> */<a name="line.501"></a>
-<span class="sourceLineNo">502</span> @VisibleForTesting<a name="line.502"></a>
-<span class="sourceLineNo">503</span> void cleanOldLogs(String log, boolean inclusive, String queueId, boolean queueRecovered) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span> String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log);<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (queueRecovered) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> NavigableSet<String> wals = walsByIdRecoveredQueues.get(queueId).get(logPrefix);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> if (wals != null) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span> cleanOldLogs(wals, log, inclusive, queueId);<a name="line.508"></a>
-<span class="sourceLineNo">509</span> }<a name="line.509"></a>
-<span class="sourceLineNo">510</span> } else {<a name="line.510"></a>
-<span class="sourceLineNo">511</span> // synchronized on walsById to avoid race with preLogRoll<a name="line.511"></a>
-<span class="sourceLineNo">512</span> synchronized (this.walsById) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span> NavigableSet<String> wals = walsById.get(queueId).get(logPrefix);<a name="line.513"></a>
-<span class="sourceLineNo">514</span> if (wals != null) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span> cleanOldLogs(wals, log, inclusive, queueId);<a name="line.515"></a>
-<span class="sourceLineNo">516</span> }<a name="line.516"></a>
-<span class="sourceLineNo">517</span> }<a name="line.517"></a>
-<span class="sourceLineNo">518</span> }<a name="line.518"></a>
-<span class="sourceLineNo">519</span> }<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span> private void cleanOldLogs(NavigableSet<String> wals, String key, boolean inclusive, String id) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> NavigableSet<String> walSet = wals.headSet(key, inclusive);<a name="line.522"></a>
-<span class="sourceLineNo">523</span> if (walSet.isEmpty()) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> return;<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span> LOG.debug("Removing {} logs in the list: {}", walSet.size(), walSet);<a name="line.526"></a>
-<span class="sourceLineNo">527</span> for (String wal : walSet) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span> abortWhenFail(() -> this.queueStorage.removeWAL(server.getServerName(), id, wal));<a name="line.528"></a>
-<span class="sourceLineNo">529</span> }<a name="line.529"></a>
-<span class="sourceLineNo">530</span> walSet.clear();<a name="line.530"></a>
-<span class="sourceLineNo">531</span> }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span> // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.533"></a>
-<span class="sourceLineNo">534</span> @VisibleForTesting<a name="line.534"></a>
-<span class="sourceLineNo">535</span> public void preLogRoll(Path newLog) throws IOException {<a name="line.535"></a>
-<span class="sourceLineNo">536</span> String logName = newLog.getName();<a name="line.536"></a>
-<span class="sourceLineNo">537</span> String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(logName);<a name="line.537"></a>
-<span class="sourceLineNo">538</span> // synchronized on latestPaths to avoid the new open source miss the new log<a name="line.538"></a>
-<span class="sourceLineNo">539</span> synchronized (this.latestPaths) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span> // Add log to queue storage<a name="line.540"></a>
-<span class="sourceLineNo">541</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span> // If record log to queue storage failed, abort RS and throw exception to make log roll<a name="line.542"></a>
-<span class="sourceLineNo">543</span> // failed<a name="line.543"></a>
-<span class="sourceLineNo">544</span> abortAndThrowIOExceptionWhenFail(<a name="line.544"></a>
-<span class="sourceLineNo">545</span> () -> this.queueStorage.addWAL(server.getServerName(), source.getQueueId(), logName));<a name="line.545"></a>
-<span class="sourceLineNo">546</span> }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span> // synchronized on walsById to avoid race with cleanOldLogs<a name="line.548"></a>
-<span class="sourceLineNo">549</span> synchronized (this.walsById) {<a name="line.549"></a>
-<span class="sourceLineNo">550</span> // Update walsById map<a name="line.550"></a>
-<span class="sourceLineNo">551</span> for (Map.Entry<String, Map<String, NavigableSet<String>>> entry : this.walsById<a name="line.551"></a>
-<span class="sourceLineNo">552</span> .entrySet()) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span> String peerId = entry.getKey();<a name="line.553"></a>
-<span class="sourceLineNo">554</span> Map<String, NavigableSet<String>> walsByPrefix = entry.getValue();<a name="line.554"></a>
-<span class="sourceLineNo">555</span> boolean existingPrefix = false;<a name="line.555"></a>
-<span class="sourceLineNo">556</span> for (Map.Entry<String, NavigableSet<String>> walsEntry : walsByPrefix.entrySet()) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span> SortedSet<String> wals = walsEntry.getValue();<a name="line.557"></a>
-<span class="sourceLineNo">558</span> if (this.sources.isEmpty()) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span> // If there's no slaves, don't need to keep the old wals since<a name="line.559"></a>
-<span class="sourceLineNo">560</span> // we only consider the last one when a new slave comes in<a name="line.560"></a>
-<span class="sourceLineNo">561</span> wals.clear();<a name="line.561"></a>
-<span class="sourceLineNo">562</span> }<a name="line.562"></a>
-<span class="sourceLineNo">563</span> if (logPrefix.equals(walsEntry.getKey())) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span> wals.add(logName);<a name="line.564"></a>
-<span class="sourceLineNo">565</span> existingPrefix = true;<a name="line.565"></a>
-<span class="sourceLineNo">566</span> }<a name="line.566"></a>
-<span class="sourceLineNo">567</span> }<a name="line.567"></a>
-<span class="sourceLineNo">568</span> if (!existingPrefix) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span> // The new log belongs to a new group, add it into this peer<a name="line.569"></a>
-<span class="sourceLineNo">570</span> LOG.debug("Start tracking logs for wal group {} for peer {}", logPrefix, peerId);<a name="line.570"></a>
-<span class="sourceLineNo">571</span> NavigableSet<String> wals = new TreeSet<>();<a name="line.571"></a>
-<span class="sourceLineNo">572</span> wals.add(logName);<a name="line.572"></a>
-<span class="sourceLineNo">573</span> walsByPrefix.put(logPrefix, wals);<a name="line.573"></a>
-<span class="sourceLineNo">574</span> }<a name="line.574"></a>
-<span class="sourceLineNo">575</span> }<a name="line.575"></a>
-<span class="sourceLineNo">576</span> }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span> // Add to latestPaths<a name="line.578"></a>
-<span class="sourceLineNo">579</span> Iterator<Path> iterator = latestPaths.iterator();<a name="line.579"></a>
-<span class="sourceLineNo">580</span> while (iterator.hasNext()) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span> Path path = iterator.next();<a name="line.581"></a>
-<span class="sourceLineNo">582</span> if (path.getName().contains(logPrefix)) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span> iterator.remove();<a name="line.583"></a>
-<span class="sourceLineNo">584</span> break;<a name="line.584"></a>
-<span class="sourceLineNo">585</span> }<a name="line.585"></a>
-<span class="sourceLineNo">586</span> }<a name="line.586"></a>
-<span class="sourceLineNo">587</span> this.latestPaths.add(newLog);<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><a name="line.590"></a>
-<span class="sourceLineNo">591</span> // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.591"></a>
-<span class="sourceLineNo">592</span> @VisibleForTesting<a name="line.592"></a>
-<span class="sourceLineNo">593</span> public void postLogRoll(Path newLog) throws IOException {<a name="line.593"></a>
-<span class="sourceLineNo">594</span> // This only updates the sources we own, not the recovered ones<a name="line.594"></a>
-<span class="sourceLineNo">595</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span> source.enqueueLog(newLog);<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><a name="line.599"></a>
-<span class="sourceLineNo">600</span> @Override<a name="line.600"></a>
-<span class="sourceLineNo">601</span> public void regionServerRemoved(String regionserver) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span> transferQueues(ServerName.valueOf(regionserver));<a name="line.602"></a>
-<span class="sourceLineNo">603</span> }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span> /**<a name="line.605"></a>
-<span class="sourceLineNo">606</span> * Transfer all the queues of the specified to this region server. First it tries to grab a lock<a name="line.606"></a>
-<span class="sourceLineNo">607</span> * and if it works it will move the old queues and finally will delete the old queues.<a name="line.607"></a>
-<span class="sourceLineNo">608</span> * <p><a name="line.608"></a>
-<span class="sourceLineNo">609</span> * It creates one old source for any type of source of the old rs.<a name="line.609"></a>
-<span class="sourceLineNo">610</span> */<a name="line.610"></a>
-<span class="sourceLineNo">611</span> private void transferQueues(ServerName deadRS) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span> if (server.getServerName().equals(deadRS)) {<a name="line.612"></a>
-<span class="sourceLineNo">613</span> // it's just us, give up<a name="line.613"></a>
-<span class="sourceLineNo">614</span> return;<a name="line.614"></a>
-<span class="sourceLineNo">615</span> }<a name="line.615"></a>
-<span class="sourceLineNo">616</span> NodeFailoverWorker transfer = new NodeFailoverWorker(deadRS);<a name="line.616"></a>
-<span class="sourceLineNo">617</span> try {<a name="line.617"></a>
-<span class="sourceLineNo">618</span> this.executor.execute(transfer);<a name="line.618"></a>
-<span class="sourceLineNo">619</span> } catch (RejectedExecutionException ex) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span> LOG.info("Cancelling the transfer of " + deadRS + " because of " + ex.getMessage());<a name="line.620"></a>
-<span class="sourceLineNo">621</span> }<a name="line.621"></a>
-<span class="sourceLineNo">622</span> }<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span> /**<a name="line.624"></a>
-<span class="sourceLineNo">625</span> * Class responsible to setup new ReplicationSources to take care of the queues from dead region<a name="line.625"></a>
-<span class="sourceLineNo">626</span> * servers.<a name="line.626"></a>
-<span class="sourceLineNo">627</span> */<a name="line.627"></a>
-<span class="sourceLineNo">628</span> class NodeFailoverWorker extends Thread {<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span> private final ServerName deadRS;<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // After claim the queues from dead region server, the NodeFailoverWorker will skip to start<a name="line.631"></a>
-<span class="sourceLineNo">632</span> // the RecoveredReplicationSource if the peer has been removed. but there's possible that<a name="line.632"></a>
-<span class="sourceLineNo">633</span> // remove a peer with peerId = 2 and add a peer with peerId = 2 again during the<a name="line.633"></a>
-<span class="sourceLineNo">634</span> // NodeFailoverWorker. So we need a deep copied <peerId, peer> map to decide whether we<a name="line.634"></a>
-<span class="sourceLineNo">635</span> // should start the RecoveredReplicationSource. If the latest peer is not the old peer when<a name="line.635"></a>
-<span class="sourceLineNo">636</span> // NodeFailoverWorker begin, we should skip to start the RecoveredReplicationSource, Otherwise<a name="line.636"></a>
-<span class="sourceLineNo">637</span> // the rs will abort (See HBASE-20475).<a name="line.637"></a>
-<span class="sourceLineNo">638</span> private final Map<String, ReplicationPeerImpl> peersSnapshot;<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span> @VisibleForTesting<a name="line.640"></a>
-<span class="sourceLineNo">641</span> public NodeFailoverWorker(ServerName deadRS) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span> super("Failover-for-" + deadRS);<a name="line.642"></a>
-<span class="sourceLineNo">643</span> this.deadRS = deadRS;<a name="line.643"></a>
-<span class="sourceLineNo">644</span> peersSnapshot = new HashMap<>(replicationPeers.getPeerCache());<a name="line.644"></a>
-<span class="sourceLineNo">645</span> }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span> private boolean isOldPeer(String peerId, ReplicationPeerImpl newPeerRef) {<a name="line.647"></a>
-<span class="sourceLineNo">648</span> ReplicationPeerImpl oldPeerRef = peersSnapshot.get(peerId);<a name="line.648"></a>
-<span class="sourceLineNo">649</span> return oldPeerRef != null && oldPeerRef == newPeerRef;<a name="line.649"></a>
-<span class="sourceLineNo">650</span> }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span> @Override<a name="line.652"></a>
-<span class="sourceLineNo">653</span> public void run() {<a name="line.653"></a>
-<span class="sourceLineNo">654</span> // Wait a bit before transferring the queues, we may be shutting down.<a name="line.654"></a>
-<span class="sourceLineNo">655</span> // This sleep may not be enough in some cases.<a name="line.655"></a>
-<span class="sourceLineNo">656</span> try {<a name="line.656"></a>
-<span class="sourceLineNo">657</span> Thread.sleep(sleepBeforeFailover +<a name="line.657"></a>
-<span class="sourceLineNo">658</span> (long) (ThreadLocalRandom.current().nextFloat() * sleepBeforeFailover));<a name="line.658"></a>
-<span class="sourceLineNo">659</span> } catch (InterruptedException e) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span> LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.660"></a>
-<span class="sourceLineNo">661</span> Thread.currentThread().interrupt();<a name="line.661"></a>
-<span class="sourceLineNo">662</span> }<a name="line.662"></a>
-<span class="sourceLineNo">663</span> // We try to lock that rs' queue directory<a name="line.663"></a>
-<span class="sourceLineNo">664</span> if (server.isStopped()) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span> LOG.info("Not transferring queue since we are shutting down");<a name="line.665"></a>
-<span class="sourceLineNo">666</span> return;<a name="line.666"></a>
-<span class="sourceLineNo">667</span> }<a name="line.667"></a>
-<span class="sourceLineNo">668</span> Map<String, Set<String>> newQueues = new HashMap<>();<a name="line.668"></a>
-<span class="sourceLineNo">669</span> try {<a name="line.669"></a>
-<span class="sourceLineNo">670</span> List<String> queues = queueStorage.getAllQueues(deadRS);<a name="line.670"></a>
-<span class="sourceLineNo">671</span> while (!queues.isEmpty()) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> Pair<String, SortedSet<String>> peer = queueStorage.claimQueue(deadRS,<a name="line.672"></a>
-<span class="sourceLineNo">673</span> queues.get(ThreadLocalRandom.current().nextInt(queues.size())), server.getServerName());<a name="line.673"></a>
-<span class="sourceLineNo">674</span> long sleep = sleepBeforeFailover / 2;<a name="line.674"></a>
-<span class="sourceLineNo">675</span> if (!peer.getSecond().isEmpty()) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span> newQueues.put(peer.getFirst(), peer.getSecond());<a name="line.676"></a>
-<span class="sourceLineNo">677</span> sleep = sleepBeforeFailover;<a name="line.677"></a>
-<span class="sourceLineNo">678</span> }<a name="line.678"></a>
-<span class="sourceLineNo">679</span> try {<a name="line.679"></a>
-<span class="sourceLineNo">680</span> Thread.sleep(sleep);<a name="line.680"></a>
-<span class="sourceLineNo">681</span> } catch (InterruptedException e) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span> LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.682"></a>
-<span class="sourceLineNo">683</span> Thread.currentThread().interrupt();<a name="line.683"></a>
-<span class="sourceLineNo">684</span> }<a name="line.684"></a>
-<span class="sourceLineNo">685</span> queues = queueStorage.getAllQueues(deadRS);<a name="line.685"></a>
-<span class="sourceLineNo">686</span> }<a name="line.686"></a>
-<span class="sourceLineNo">687</span> if (queues.isEmpty()) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span> queueStorage.removeReplicatorIfQueueIsEmpty(deadRS);<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span> } catch (ReplicationException e) {<a name="line.690"></a>
-<span class="sourceLineNo">691</span> server.abort("Failed to claim queue from dead regionserver", e);<a name="line.691"></a>
-<span class="sourceLineNo">692</span> return;<a name="line.692"></a>
-<span class="sourceLineNo">693</span> }<a name="line.693"></a>
-<span class="sourceLineNo">694</span> // Copying over the failed queue is completed.<a name="line.694"></a>
-<span class="sourceLineNo">695</span> if (newQueues.isEmpty()) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span> // We either didn't get the lock or the failed region server didn't have any outstanding<a name="line.696"></a>
-<span class="sourceLineNo">697</span> // WALs to replicate, so we are done.<a name="line.697"></a>
-<span class="sourceLineNo">698</span> return;<a name="line.698"></a>
-<span class="sourceLineNo">699</span> }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> for (Map.Entry<String, Set<String>> entry : newQueues.entrySet()) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span> String queueId = entry.getKey();<a name="line.702"></a>
-<span class="sourceLineNo">703</span> Set<String> walsSet = entry.getValue();<a name="line.703"></a>
-<span class="sourceLineNo">704</span> try {<a name="line.704"></a>
-<span class="sourceLineNo">705</span> // there is not an actual peer defined corresponding to peerId for the failover.<a name="line.705"></a>
-<span class="sourceLineNo">706</span> ReplicationQueueInfo replicationQueueInfo = new ReplicationQueueInfo(queueId);<a name="line.706"></a>
-<span class="sourceLineNo">707</span> String actualPeerId = replicationQueueInfo.getPeerId();<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span> ReplicationPeerImpl peer = replicationPeers.getPeer(actualPeerId);<a name="line.709"></a>
-<span class="sourceLineNo">710</span> if (peer == null || !isOldPeer(actualPeerId, peer)) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span> LOG.warn("Skipping failover for peer {} of node {}, peer is null", actualPeerId,<a name="line.711"></a>
-<span class="sourceLineNo">712</span> deadRS);<a name="line.712"></a>
-<span class="sourceLineNo">713</span> abortWhenFail(() -> queueStorage.removeQueue(server.getServerName(), queueId));<a name="line.713"></a>
-<span class="sourceLineNo">714</span> continue;<a name="line.714"></a>
-<span class="sourceLineNo">715</span> }<a name="line.715"></a>
-<span class="sourceLineNo">716</span> if (server instanceof ReplicationSyncUp.DummyServer<a name="line.716"></a>
-<span class="sourceLineNo">717</span> && peer.getPeerState().equals(PeerState.DISABLED)) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span> LOG.warn("Peer {} is disabled. ReplicationSyncUp tool will skip "<a name="line.718"></a>
-<span class="sourceLineNo">719</span> + "replicating data to this peer.",<a name="line.719"></a>
-<span class="sourceLineNo">720</span> actualPeerId);<a name="line.720"></a>
-<span class="sourceLineNo">721</span> continue;<a name="line.721"></a>
-<span class="sourceLineNo">722</span> }<a name="line.722"></a>
-<span class="sourceLineNo">723</span> // track sources in walsByIdRecoveredQueues<a name="line.723"></a>
-<span class="sourceLineNo">724</span> Map<String, NavigableSet<String>> walsByGroup = new HashMap<>();<a name="line.724"></a>
-<span class="sourceLineNo">725</span> walsByIdRecoveredQueues.put(queueId, walsByGroup);<a name="line.725"></a>
-<span class="sourceLineNo">726</span> for (String wal : walsSet) {<a name="line.726"></a>
-<span class="sourceLineNo">727</span> String walPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(wal);<a name="line.727"></a>
-<span class="sourceLineNo">728</span> NavigableSet<String> wals = walsByGroup.get(walPrefix);<a name="line.728"></a>
-<span class="sourceLineNo">729</span> if (wals == null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span> wals = new TreeSet<>();<a name="line.730"></a>
-<span class="sourceLineNo">731</span> walsByGroup.put(walPrefix, wals);<a name="line.731"></a>
-<span class="sourceLineNo">732</span> }<a name="line.732"></a>
-<span class="sourceLineNo">733</span> wals.add(wal);<a name="line.733"></a>
-<span class="sourceLineNo">734</span> }<a name="line.734"></a>
-<span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span> ReplicationSourceInterface src = createSource(queueId, peer);<a name="line.736"></a>
-<span class="sourceLineNo">737</span> // synchronized on oldsources to avoid adding recovered source for the to-be-removed peer<a name="line.737"></a>
-<span class="sourceLineNo">738</span> synchronized (oldsources) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span> peer = replicationPeers.getPeer(src.getPeerId());<a name="line.739"></a>
-<span class="sourceLineNo">740</span> if (peer == null || !isOldPeer(src.getPeerId(), peer)) {<a name="line.740"></a>
-<span class="sourceLineNo">741</span> src.terminate("Recovered queue doesn't belong to any current peer");<a name="line.741"></a>
-<span class="sourceLineNo">742</span> removeRecoveredSource(src);<a name="line.742"></a>
-<span class="sourceLineNo">743</span> continue;<a name="line.743"></a>
-<span class="sourceLineNo">744</span> }<a name="line.744"></a>
-<span class="sourceLineNo">745</span> oldsources.add(src);<a name="line.745"></a>
-<span class="sourceLineNo">746</span> for (String wal : walsSet) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span> src.enqueueLog(new Path(oldLogDir, wal));<a name="line.747"></a>
-<span class="sourceLineNo">748</span> }<a name="line.748"></a>
-<span class="sourceLineNo">749</span> src.startup();<a name="line.749"></a>
-<span class="sourceLineNo">750</span> }<a name="line.750"></a>
-<span class="sourceLineNo">751</span> } catch (IOException e) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span> // TODO manage it<a name="line.752"></a>
-<span class="sourceLineNo">753</span> LOG.error("Failed creating a source", e);<a name="line.753"></a>
-<span class="sourceLineNo">754</span> }<a name="line.754"></a>
-<span class="sourceLineNo">755</span> }<a name="line.755"></a>
-<span class="sourceLineNo">756</span> }<a name="line.756"></a>
-<span class="sourceLineNo">757</span> }<a name="line.757"></a>
-<span class="sourceLineNo">758</span><a name="line.758"></a>
-<span class="sourceLineNo">759</span> /**<a name="line.759"></a>
-<span class="sourceLineNo">760</span> * Terminate the replication on this region server<a name="line.760"></a>
-<span class="sourceLineNo">761</span> */<a name="line.761"></a>
-<span class="sourceLineNo">762</span> public void join() {<a name="line.762"></a>
-<span class="sourceLineNo">763</span> this.executor.shutdown();<a name="line.763"></a>
-<span class="sourceLineNo">764</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.764"></a>
-<span class="sourceLineNo">765</span> source.terminate("Region server is closing");<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span> }<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> * Get a copy of the wals of the normal sources on this rs<a name="line.770"></a>
-<span class="sourceLineNo">771</span> * @return a sorted set of wal names<a name="line.771"></a>
-<span class="sourceLineNo">772</span> */<a name="line.772"></a>
-<span class="sourceLineNo">773</span> @VisibleForTesting<a name="line.773"></a>
-<span class="sourceLineNo">774</span> public Map<String, Map<String, NavigableSet<String>>> getWALs() {<a name="line.774"></a>
-<span class="sourceLineNo">775</span> return Collections.unmodifiableMap(walsById);<a name="line.775"></a>
-<span class="sourceLineNo">776</span> }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span> /**<a name="line.778"></a>
-<span class="sourceLineNo">779</span> * Get a copy of the wals of the recovered sources on this rs<a name="line.779"></a>
-<span class="sourceLineNo">780</span> * @return a sorted set of wal names<a name="line.780"></a>
-<span class="sourceLineNo">781</span> */<a name="line.781"></a>
-<span class="sourceLineNo">782</span> @VisibleForTesting<a name="line.782"></a>
-<span class="sourceLineNo">783</span> Map<String, Map<String, NavigableSet<String>>> getWalsByIdRecoveredQueues() {<a name="line.783"></a>
-<span class="sourceLineNo">784</span> return Collections.unmodifiableMap(walsByIdRecoveredQueues);<a name="line.784"></a>
-<span class="sourceLineNo">785</span> }<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span> /**<a name="line.787"></a>
-<span class="sourceLineNo">788</span> * Get a list of all the normal sources of this rs<a name="line.788"></a>
-<span class="sourceLineNo">789</span> * @return list of all normal sources<a name="line.789"></a>
-<span class="sourceLineNo">790</span> */<a name="line.790"></a>
-<span class="sourceLineNo">791</span> public List<ReplicationSourceInterface> getSources() {<a name="line.791"></a>
-<span class="sourceLineNo">792</span> return new ArrayList<>(this.sources.values());<a name="line.792"></a>
-<span class="sourceLineNo">793</span> }<a name="line.793"></a>
-<span class="sourceLineNo">794</span><a name="line.794"></a>
-<span class="sourceLineNo">795</span> /**<a name="line.795"></a>
-<span class="sourceLineNo">796</span> * Get a list of all the recovered sources of this rs<a name="line.796"></a>
-<span class="sourceLineNo">797</span> * @return list of all recovered sources<a name="line.797"></a>
-<span class="sourceLineNo">798</span> */<a name="line.798"></a>
-<span class="sourceLineNo">799</span> public List<ReplicationSourceInterface> getOldSources() {<a name="line.799"></a>
-<span class="sourceLineNo">800</span> return this.oldsources;<a name="line.800"></a>
-<span class="sourceLineNo">801</span> }<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span> /**<a name="line.803"></a>
-<span class="sourceLineNo">804</span> * Get the normal source for a given peer<a name="line.804"></a>
-<span class="sourceLineNo">805</span> * @return the normal source for the give peer if it exists, otherwise null.<a name="line.805"></a>
-<span class="sourceLineNo">806</span> */<a name="line.806"></a>
-<span class="sourceLineNo">807</span> @VisibleForTesting<a name="line.807"></a>
-<span class="sourceLineNo">808</span> public ReplicationSourceInterface getSource(String peerId) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span> return this.sources.get(peerId);<a name="line.809"></a>
-<span class="sourceLineNo">810</span> }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span> @VisibleForTesting<a name="line.812"></a>
-<span class="sourceLineNo">813</span> List<String> getAllQueues() throws IOException {<a name="line.813"></a>
-<span class="sourceLineNo">814</span> List<String> allQueues = Collections.emptyList();<a name="line.814"></a>
-<span class="sourceLineNo">815</span> try {<a name="line.815"></a>
-<span class="sourceLineNo">816</span> allQueues = queueStorage.getAllQueues(server.getServerName());<a name="line.816"></a>
-<span class="sourceLineNo">817</span> } catch (ReplicationException e) {<a name="line.817"></a>
-<span class="sourceLineNo">818</span> throw new IOException(e);<a name="line.818"></a>
-<span class="sourceLineNo">819</span> }<a name="line.819"></a>
-<span class="sourceLineNo">820</span> return allQueues;<a name="line.820"></a>
-<span class="sourceLineNo">821</span> }<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span> @VisibleForTesting<a name="line.823"></a>
-<span class="sourceLineNo">824</span> int getSizeOfLatestPath() {<a name="line.824"></a>
-<span class="sourceLineNo">825</span> synchronized (latestPaths) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> return latestPaths.size();<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span> }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span> @VisibleForTesting<a name="line.830"></a>
-<span class="sourceLineNo">831</span> public AtomicLong getTotalBufferUsed() {<a name="line.831"></a>
-<span class="sourceLineNo">832</span> return totalBufferUsed;<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> /**<a name="line.835"></a>
-<span class="sourceLineNo">836</span> * Get the directory where wals are archived<a name="line.836"></a>
-<span class="sourceLineNo">837</span> * @return the directory where wals are archived<a name="line.837"></a>
-<span class="sourceLineNo">838</span> */<a name="line.838"></a>
-<span class="sourceLineNo">839</span> public Path getOldLogDir() {<a name="line.839"></a>
-<span class="sourceLineNo">840</span> return this.oldLogDir;<a name="line.840"></a>
-<span class="sourceLineNo">841</span> }<a name="line.841"></a>
-<span class="sourceLineNo">842</span><a name="line.842"></a>
-<span class="sourceLineNo">843</span> /**<a name="line.843"></a>
-<span class="sourceLineNo">844</span> * Get the directory where wals are stored by their RSs<a name="line.844"></a>
-<span class="sourceLineNo">845</span> * @return the directory where wals are stored by their RSs<a name="line.845"></a>
-<span class="sourceLineNo">846</span> */<a name="line.846"></a>
-<span class="sourceLineNo">847</span> public Path getLogDir() {<a name="line.847"></a>
-<span class="sourceLineNo">848</span> return this.logDir;<a name="line.848"></a>
-<span class="sourceLineNo">849</span> }<a name="line.849"></a>
-<span class="sourceLineNo">850</span><a name="line.850"></a>
-<span class="sourceLineNo">851</span> /**<a name="line.851"></a>
-<span class="sourceLineNo">852</span> * Get the handle on the local file system<a name="line.852"></a>
-<span class="sourceLineNo">853</span> * @return Handle on the local file system<a name="line.853"></a>
-<span class="sourceLineNo">854</span> */<a name="line.854"></a>
-<span class="sourceLineNo">855</span> public FileSystem getFs() {<a name="line.855"></a>
-<span class="sourceLineNo">856</span> return this.fs;<a name="line.856"></a>
-<span class="sourceLineNo">857</span> }<a name="line.857"></a>
-<span class="sourceLineNo">858</span><a name="line.858"></a>
-<span class="sourceLineNo">859</span> /**<a name="line.859"></a>
-<span class="sourceLineNo">860</span> * Get the ReplicationPeers used by this ReplicationSourceManager<a name="line.860"></a>
-<span class="sourceLineNo">861</span> * @return the ReplicationPeers used by this ReplicationSourceManager<a name="line.861"></a>
-<span class="sourceLineNo">862</span> */<a name="line.862"></a>
-<span class="sourceLineNo">863</span> public ReplicationPeers getReplicationPeers() {<a name="line.863"></a>
-<span class="sourceLineNo">864</span> return this.replicationPeers;<a name="line.864"></a>
-<span class="sourceLineNo">865</span> }<a name="line.865"></a>
-<span class="sourceLineNo">866</span><a name="line.866"></a>
-<span class="sourceLineNo">867</span> /**<a name="line.867"></a>
-<span class="sourceLineNo">868</span> * Get a string representation of all the sources' metrics<a name="line.868"></a>
-<span class="sourceLineNo">869</span> */<a name="line.869"></a>
-<span class="sourceLineNo">870</span> public String getStats() {<a name="line.870"></a>
-<span class="sourceLineNo">871</span> StringBuilder stats = new StringBuilder();<a name="line.871"></a>
-<span class="sourceLineNo">872</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.872"></a>
-<span class="sourceLineNo">873</span> stats.append("Normal source for cluster " + source.getPeerId() + ": ");<a name="line.873"></a>
-<span class="sourceLineNo">874</span> stats.append(source.getStats() + "\n");<a name="line.874"></a>
-<span class="sourceLineNo">875</span> }<a name="line.875"></a>
-<span class="sourceLineNo">876</span> for (ReplicationSourceInterface oldSource : oldsources) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> stats.append("Recovered source for cluster/machine(s) " + oldSource.getPeerId() + ": ");<a name="line.877"></a>
-<span class="sourceLineNo">878</span> stats.append(oldSource.getStats() + "\n");<a name="line.878"></a>
-<span class="sourceLineNo">879</span> }<a name="line.879"></a>
-<span class="sourceLineNo">880</span> return stats.toString();<a name="line.880"></a>
-<span class="sourceLineNo">881</span> }<a name="line.881"></a>
-<span class="sourceLineNo">882</span><a name="line.882"></a>
-<span class="sourceLineNo">883</span> public void addHFileRefs(TableName tableName, byte[] family, List<Pair<Path, Path>> pairs)<a name="line.883"></a>
-<span class="sourceLineNo">884</span> throws IOException {<a name="line.884"></a>
-<span class="sourceLineNo">885</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.885"></a>
-<span class="sourceLineNo">886</span> throwIOExceptionWhenFail(() -> source.addHFileRefs(tableName, family, pairs));<a name="line.886"></a>
-<span class="sourceLineNo">887</span> }<a name="line.887"></a>
-<span class="sourceLineNo">888</span> }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span> public void cleanUpHFileRefs(String peerId, List<String> files) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span> abortWhenFail(() -> this.queueStorage.removeHFileRefs(peerId, files));<a name="line.891"></a>
-<span class="sourceLineNo">892</span> }<a name="line.892"></a>
-<span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span> int activeFailoverTaskCount() {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> return executor.getActiveCount();<a name="line.895"></a>
-<span class="sourceLineNo">896</span> }<a name="line.896"></a>
-<span class="sourceLineNo">897</span>}<a name="line.897"></a>
+<span class="sourceLineNo">421</span> this.oldsources.remove(src);<a name="line.421"></a>
+<span class="sourceLineNo">422</span> // Delete queue from storage and memory<a name="line.422"></a>
+<span class="sourceLineNo">423</span> deleteQueue(src.getQueueId());<a name="line.423"></a>
+<span class="sourceLineNo">424</span> this.walsByIdRecoveredQueues.remove(src.getQueueId());<a name="line.424"></a>
+<span class="sourceLineNo">425</span> }<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span> /**<a name="line.427"></a>
+<span class="sourceLineNo">428</span> * Clear the metrics and related replication queue of the specified old source<a name="line.428"></a>
+<span class="sourceLineNo">429</span> * @param src source to clear<a name="line.429"></a>
+<span class="sourceLineNo">430</span> */<a name="line.430"></a>
+<span class="sourceLineNo">431</span> void removeSource(ReplicationSourceInterface src) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span> LOG.info("Done with the queue " + src.getQueueId());<a name="line.432"></a>
+<span class="sourceLineNo">433</span> this.sources.remove(src.getPeerId());<a name="line.433"></a>
+<span class="sourceLineNo">434</span> // Delete queue from storage and memory<a name="line.434"></a>
+<span class="sourceLineNo">435</span> deleteQueue(src.getQueueId());<a name="line.435"></a>
+<span class="sourceLineNo">436</span> this.walsById.remove(src.getQueueId());<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> /**<a name="line.439"></a>
+<span class="sourceLineNo">440</span> * Delete a complete queue of wals associated with a replication source<a name="line.440"></a>
+<span class="sourceLineNo">441</span> * @param queueId the id of replication queue to delete<a name="line.441"></a>
+<span class="sourceLineNo">442</span> */<a name="line.442"></a>
+<span class="sourceLineNo">443</span> private void deleteQueue(String queueId) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span> abortWhenFail(() -> this.queueStorage.removeQueue(server.getServerName(), queueId));<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> @FunctionalInterface<a name="line.447"></a>
+<span class="sourceLineNo">448</span> private interface ReplicationQueueOperation {<a name="line.448"></a>
+<span class="sourceLineNo">449</span> void exec() throws ReplicationException;<a name="line.449"></a>
+<span class="sourceLineNo">450</span> }<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span> private void abortWhenFail(ReplicationQueueOperation op) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span> try {<a name="line.453"></a>
+<span class="sourceLineNo">454</span> op.exec();<a name="line.454"></a>
+<span class="sourceLineNo">455</span> } catch (ReplicationException e) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span> server.abort("Failed to operate on replication queue", e);<a name="line.456"></a>
+<span class="sourceLineNo">457</span> }<a name="line.457"></a>
+<span class="sourceLineNo">458</span> }<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span> private void throwIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.460"></a>
+<span class="sourceLineNo">461</span> try {<a name="line.461"></a>
+<span class="sourceLineNo">462</span> op.exec();<a name="line.462"></a>
+<span class="sourceLineNo">463</span> } catch (ReplicationException e) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span> throw new IOException(e);<a name="line.464"></a>
+<span class="sourceLineNo">465</span> }<a name="line.465"></a>
+<span class="sourceLineNo">466</span> }<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span> private void abortAndThrowIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.468"></a>
+<span class="sourceLineNo">469</span> try {<a name="line.469"></a>
+<span class="sourceLineNo">470</span> op.exec();<a name="line.470"></a>
+<span class="sourceLineNo">471</span> } catch (ReplicationException e) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span> server.abort("Failed to operate on replication queue", e);<a name="line.472"></a>
+<span class="sourceLineNo">473</span> throw new IOException(e);<a name="line.473"></a>
+<span class="sourceLineNo">474</span> }<a name="line.474"></a>
+<span class="sourceLineNo">475</span> }<a name="line.475"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span> /**<a name="line.477"></a>
+<span class="sourceLineNo">478</span> * This method will log the current position to storage. And also clean old logs from the<a name="line.478"></a>
+<span class="sourceLineNo">479</span> * replication queue.<a name="line.479"></a>
+<span class="sourceLineNo">480</span> * @param queueId id of the replication queue<a name="line.480"></a>
+<span class="sourceLineNo">481</span> * @param queueRecovered indicates if this queue comes from another region server<a name="line.481"></a>
+<span class="sourceLineNo">482</span> * @param entryBatch the wal entry batch we just shipped<a name="line.482"></a>
+<span class="sourceLineNo">483</span> */<a name="line.483"></a>
+<span class="sourceLineNo">484</span> public void logPositionAndCleanOldLogs(String queueId, boolean queueRecovered,<a name="line.484"></a>
+<span class="sourceLineNo">485</span> WALEntryBatch entryBatch) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span> String fileName = entryBatch.getLastWalPath().getName();<a name="line.486"></a>
+<span class="sourceLineNo">487</span> abortWhenFail(() -> this.queueStorage.setWALPosition(server.getServerName(), queueId, fileName,<a name="line.487"></a>
+<span class="sourceLineNo">488</span> entryBatch.getLastWalPosition(), entryBatch.getLastSeqIds()));<a name="line.488"></a>
+<span class="sourceLineNo">489</span> cleanOldLogs(fileName, entryBatch.isEndOfFile(), queueId, queueRecovered);<a name="line.489"></a>
+<span class="sourceLineNo">490</span> }<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span> /**<a name="line.492"></a>
+<span class="sourceLineNo">493</span> * Cleans a log file and all older logs from replication queue. Called when we are sure that a log<a name="line.493"></a>
+<span class="sourceLineNo">494</span> * file is closed and has no more entries.<a name="line.494"></a>
+<span class="sourceLineNo">495</span> * @param log Path to the log<a name="line.495"></a>
+<span class="sourceLineNo">496</span> * @param inclusive whether we should also remove the given log file<a name="line.496"></a>
+<span class="sourceLineNo">497</span> * @param queueId id of the replication queue<a name="line.497"></a>
+<span class="sourceLineNo">498</span> * @param queueRecovered Whether this is a recovered queue<a name="line.498"></a>
+<span class="sourceLineNo">499</span> */<a name="line.499"></a>
+<span class="sourceLineNo">500</span> @VisibleForTesting<a name="line.500"></a>
+<span class="sourceLineNo">501</span> void cleanOldLogs(String log, boolean inclusive, String queueId, boolean queueRecovered) {<a name="line.501"></a>
+<span class="sourceLineNo">502</span> String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log);<a name="line.502"></a>
+<span class="sourceLineNo">503</span> if (queueRecovered) {<a name="line.503"></a>
+<span class="sourceLineNo">504</span> NavigableSet<String> wals = walsByIdRecoveredQueues.get(queueId).get(logPrefix);<a name="line.504"></a>
+<span class="sourceLineNo">505</span> if (wals != null) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span> cleanOldLogs(wals, log, inclusive, queueId);<a name="line.506"></a>
+<span class="sourceLineNo">507</span> }<a name="line.507"></a>
+<span class="sourceLineNo">508</span> } else {<a name="line.508"></a>
+<span class="sourceLineNo">509</span> // synchronized on walsById to avoid race with preLogRoll<a name="line.509"></a>
+<span class="sourceLineNo">510</span> synchronized (this.walsById) {<a name="line.510"></a>
+<span class="sourceLineNo">511</span> NavigableSet<String> wals = walsById.get(queueId).get(logPrefix);<a name="line.511"></a>
+<span class="sourceLineNo">512</span> if (wals != null) {<a name="line.512"></a>
+<span class="sourceLineNo">513</span> cleanOldLogs(wals, log, inclusive, queueId);<a name="line.513"></a>
+<span class="sourceLineNo">514</span> }<a name="line.514"></a>
+<span class="sourceLineNo">515</span> }<a name="line.515"></a>
+<span class="sourceLineNo">516</span> }<a name="line.516"></a>
+<span class="sourceLineNo">517</span> }<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span> private void cleanOldLogs(NavigableSet<String> wals, String key, boolean inclusive, String id) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span> NavigableSet<String> walSet = wals.headSet(key, inclusive);<a name="line.520"></a>
+<span class="sourceLineNo">521</span> if (walSet.isEmpty()) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span> return;<a name="line.522"></a>
+<span class="sourceLineNo">523</span> }<a name="line.523"></a>
+<span class="sourceLineNo">524</span> LOG.debug("Removing {} logs in the list: {}", walSet.size(), walSet);<a name="line.524"></a>
+<span class="sourceLineNo">525</span> for (String wal : walSet) {<a name="line.525"></a>
+<span class="sourceLineNo">526</span> abortWhenFail(() -> this.queueStorage.removeWAL(server.getServerName(), id, wal));<a name="line.526"></a>
+<span class="sourceLineNo">527</span> }<a name="line.527"></a>
+<span class="sourceLineNo">528</span> walSet.clear();<a name="line.528"></a>
+<span class="sourceLineNo">529</span> }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span> // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.531"></a>
+<span class="sourceLineNo">532</span> @VisibleForTesting<a name="line.532"></a>
+<span class="sourceLineNo">533</span> public void preLogRoll(Path newLog) throws IOException {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> String logName = newLog.getName();<a name="line.534"></a>
+<span class="sourceLineNo">535</span> String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(logName);<a name="line.535"></a>
+<span class="sourceLineNo">536</span> // synchronized on latestPaths to avoid the new open source miss the new log<a name="line.536"></a>
+<span class="sourceLineNo">537</span> synchronized (this.latestPaths) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span> // Add log to queue storage<a name="line.538"></a>
+<span class="sourceLineNo">539</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span> // If record log to queue storage failed, abort RS and throw exception to make log roll<a name="line.540"></a>
+<span class="sourceLineNo">541</span> // failed<a name="line.541"></a>
+<span class="sourceLineNo">542</span> abortAndThrowIOExceptionWhenFail(<a name="line.542"></a>
+<span class="sourceLineNo">543</span> () -> this.queueStorage.addWAL(server.getServerName(), source.getQueueId(), logName));<a name="line.543"></a>
+<span class="sourceLineNo">544</span> }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span> // synchronized on walsById to avoid race with cleanOldLogs<a name="line.546"></a>
+<span class="sourceLineNo">547</span> synchronized (this.walsById) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span> // Update walsById map<a name="line.548"></a>
+<span class="sourceLineNo">549</span> for (Map.Entry<String, Map<String, NavigableSet<String>>> entry : this.walsById<a name="line.549"></a>
+<span class="sourceLineNo">550</span> .entrySet()) {<a name="line.550"></a>
+<span class="sourceLineNo">551</span> String peerId = entry.getKey();<a name="line.551"></a>
+<span class="sourceLineNo">552</span> Map<String, NavigableSet<String>> walsByPrefix = entry.getValue();<a name="line.552"></a>
+<span class="sourceLineNo">553</span> boolean existingPrefix = false;<a name="line.553"></a>
+<span class="sourceLineNo">554</span> for (Map.Entry<String, NavigableSet<String>> walsEntry : walsByPrefix.entrySet()) {<a name="line.554"></a>
+<span class="sourceLineNo">555</span> SortedSet<String> wals = walsEntry.getValue();<a name="line.555"></a>
+<span class="sourceLineNo">556</span> if (this.sources.isEmpty()) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span> // If there's no slaves, don't need to keep the old wals since<a name="line.557"></a>
+<span class="sourceLineNo">558</span> // we only consider the last one when a new slave comes in<a name="line.558"></a>
+<span class="sourceLineNo">559</span> wals.clear();<a name="line.559"></a>
+<span class="sourceLineNo">560</span> }<a name="line.560"></a>
+<span class="sourceLineNo">561</span> if (logPrefix.equals(walsEntry.getKey())) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span> wals.add(logName);<a name="line.562"></a>
+<span class="sourceLineNo">563</span> existingPrefix = true;<a name="line.563"></a>
+<span class="sourceLineNo">564</span> }<a name="line.564"></a>
+<span class="sourceLineNo">565</span> }<a name="line.565"></a>
+<span class="sourceLineNo">566</span> if (!existingPrefix) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span> // The new log belongs to a new group, add it into this peer<a name="line.567"></a>
+<span class="sourceLineNo">568</span> LOG.debug("Start tracking logs for wal group {} for peer {}", logPrefix, peerId);<a name="line.568"></a>
+<span class="sourceLineNo">569</span> NavigableSet<String> wals = new TreeSet<>();<a name="line.569"></a>
+<span class="sourceLineNo">570</span> wals.add(logName);<a name="line.570"></a>
+<span class="sourceLineNo">571</span> walsByPrefix.put(logPrefix, wals);<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> }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span> // Add to latestPaths<a name="line.576"></a>
+<span class="sourceLineNo">577</span> Iterator<Path> iterator = latestPaths.iterator();<a name="line.577"></a>
+<span class="sourceLineNo">578</span> while (iterator.hasNext()) {<a name="line.578"></a>
+<span class="sourceLineNo">579</span> Path path = iterator.next();<a name="line.579"></a>
+<span class="sourceLineNo">580</span> if (path.getName().contains(logPrefix)) {<a name="line.580"></a>
+<span class="sourceLineNo">581</span> iterator.remove();<a name="line.581"></a>
+<span class="sourceLineNo">582</span> break;<a name="line.582"></a>
+<span class="sourceLineNo">583</span> }<a name="line.583"></a>
+<span class="sourceLineNo">584</span> }<a name="line.584"></a>
+<span class="sourceLineNo">585</span> this.latestPaths.add(newLog);<a name="line.585"></a>
+<span class="sourceLineNo">586</span> }<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> // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.589"></a>
+<span class="sourceLineNo">590</span> @VisibleForTesting<a name="line.590"></a>
+<span class="sourceLineNo">591</span> public void postLogRoll(Path newLog) throws IOException {<a name="line.591"></a>
+<span class="sourceLineNo">592</span> // This only updates the sources we own, not the recovered ones<a name="line.592"></a>
+<span class="sourceLineNo">593</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span> source.enqueueLog(newLog);<a name="line.594"></a>
+<span class="sourceLineNo">595</span> }<a name="line.595"></a>
+<span class="sourceLineNo">596</span> }<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span> @Override<a name="line.598"></a>
+<span class="sourceLineNo">599</span> public void regionServerRemoved(String regionserver) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span> transferQueues(ServerName.valueOf(regionserver));<a name="line.600"></a>
+<span class="sourceLineNo">601</span> }<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span> /**<a name="line.603"></a>
+<span class="sourceLineNo">604</span> * Transfer all the queues of the specified to this region server. First it tries to grab a lock<a name="line.604"></a>
+<span class="sourceLineNo">605</span> * and if it works it will move the old queues and finally will delete the old queues.<a name="line.605"></a>
+<span class="sourceLineNo">606</span> * <p><a name="line.606"></a>
+<span class="sourceLineNo">607</span> * It creates one old source for any type of source of the old rs.<a name="line.607"></a>
+<span class="sourceLineNo">608</span> */<a name="line.608"></a>
+<span class="sourceLineNo">609</span> private void transferQueues(ServerName deadRS) {<a name="line.609"></a>
+<span class="sourceLineNo">610</span> if (server.getServerName().equals(deadRS)) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span> // it's just us, give up<a name="line.611"></a>
+<span class="sourceLineNo">612</span> return;<a name="line.612"></a>
+<span class="sourceLineNo">613</span> }<a name="line.613"></a>
+<span class="sourceLineNo">614</span> NodeFailoverWorker transfer = new NodeFailoverWorker(deadRS);<a name="line.614"></a>
+<span class="sourceLineNo">615</span> try {<a name="line.615"></a>
+<span class="sourceLineNo">616</span> this.executor.execute(transfer);<a name="line.616"></a>
+<span class="sourceLineNo">617</span> } catch (RejectedExecutionException ex) {<a name="line.617"></a>
+<span class="sourceLineNo">618</span> LOG.info("Cancelling the transfer of " + deadRS + " because of " + ex.getMessage());<a name="line.618"></a>
+<span class="sourceLineNo">619</span> }<a name="line.619"></a>
+<span class="sourceLineNo">620</span> }<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span> /**<a name="line.622"></a>
+<span class="sourceLineNo">623</span> * Class responsible to setup new ReplicationSources to take care of the queues from dead region<a name="line.623"></a>
+<span class="sourceLineNo">624</span> * servers.<a name="line.624"></a>
+<span class="sourceLineNo">625</span> */<a name="line.625"></a>
+<span class="sourceLineNo">626</span> class NodeFailoverWorker extends Thread {<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span> private final ServerName deadRS;<a name="line.628"></a>
+<span class="sourceLineNo">629</span> // After claim the queues from dead region server, the NodeFailoverWorker will skip to start<a name="line.629"></a>
+<span class="sourceLineNo">630</span> // the RecoveredReplicationSource if the peer has been removed. but there's possible that<a name="line.630"></a>
+<span class="sourceLineNo">631</span> // remove a peer with peerId = 2 and add a peer with peerId = 2 again during the<a name="line.631"></a>
+<span class="sourceLineNo">632</span> // NodeFailoverWorker. So we need a deep copied <peerId, peer> map to decide whether we<a name="line.632"></a>
+<span class="sourceLineNo">633</span> // should start the RecoveredReplicationSource. If the latest peer is not the old peer when<a name="line.633"></a>
+<span class="sourceLineNo">634</span> // NodeFailoverWorker begin, we should skip to start the RecoveredReplicationSource, Otherwise<a name="line.634"></a>
+<span class="sourceLineNo">635</span> // the rs will abort (See HBASE-20475).<a name="line.635"></a>
+<span class="sourceLineNo">636</span> private final Map<String, ReplicationPeerImpl> peersSnapshot;<a name="line.636"></a>
+<span class="sourceLineNo">637</span><a name="line.637"></a>
+<span class="sourceLineNo">638</span> @VisibleForTesting<a name="line.638"></a>
+<span class="sourceLineNo">639</span> public NodeFailoverWorker(ServerName deadRS) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span> super("Failover-for-" + deadRS);<a name="line.640"></a>
+<span class="sourceLineNo">641</span> this.deadRS = deadRS;<a name="line.641"></a>
+<span class="sourceLineNo">642</span> peersSnapshot = new HashMap<>(replicationPeers.getPeerCache());<a name="line.642"></a>
+<span class="sourceLineNo">643</span> }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span> private boolean isOldPeer(String peerId, ReplicationPeerImpl newPeerRef) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span> ReplicationPeerImpl oldPeerRef = peersSnapshot.get(peerId);<a name="line.646"></a>
+<span class="sourceLineNo">647</span> return oldPeerRef != null && oldPeerRef == newPeerRef;<a name="line.647"></a>
+<span class="sourceLineNo">648</span> }<a name="line.648"></a>
+<span class="sourceLineNo">649</span><a name="line.649"></a>
+<span class="sourceLineNo">650</span> @Override<a name="line.650"></a>
+<span class="sourceLineNo">651</span> public void run() {<a name="line.651"></a>
+<span class="sourceLineNo">652</span> // Wait a bit before transferring the queues, we may be shutting down.<a name="line.652"></a>
+<span class="sourceLineNo">653</span> // This sleep may not be enough in some cases.<a name="line.653"></a>
+<span class="sourceLineNo">654</span> try {<a name="line.654"></a>
+<span class="sourceLineNo">655</span> Thread.sleep(sleepBeforeFailover +<a name="line.655"></a>
+<span class="sourceLineNo">656</span> (long) (ThreadLocalRandom.current().nextFloat() * sleepBeforeFailover));<a name="line.656"></a>
+<span class="sourceLineNo">657</span> } catch (InterruptedException e) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span> LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.658"></a>
+<span class="sourceLineNo">659</span> Thread.currentThread().interrupt();<a name="line.659"></a>
+<span class="sourceLineNo">660</span> }<a name="line.660"></a>
+<span class="sourceLineNo">661</span> // We try to lock that rs' queue directory<a name="line.661"></a>
+<span class="sourceLineNo">662</span> if (server.isStopped()) {<a name="line.662"></a>
+<span class="sourceLineNo">663</span> LOG.info("Not transferring queue since we are shutting down");<a name="line.663"></a>
+<span class="sourceLineNo">664</span> return;<a name="line.664"></a>
+<span class="sourceLineNo">665</span> }<a name="line.665"></a>
+<span class="sourceLineNo">666</span> Map<String, Set<String>> newQueues = new HashMap<>();<a name="line.666"></a>
+<span class="sourceLineNo">667</span> try {<a name="line.667"></a>
+<span class="sourceLineNo">668</span> List<String> queues = queueStorage.getAllQueues(deadRS);<a name="line.668"></a>
+<span class="sourceLineNo">669</span> while (!queues.isEmpty()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> Pair<String, SortedSet<String>> peer = queueStorage.claimQueue(deadRS,<a name="line.670"></a>
+<span class="sourceLineNo">671</span> queues.get(ThreadLocalRandom.current().nextInt(queues.size())), server.getServerName());<a name="line.671"></a>
+<span class="sourceLineNo">672</span> long sleep = sleepBeforeFailover / 2;<a name="line.672"></a>
+<span class="sourceLineNo">673</span> if (!peer.getSecond().isEmpty()) {<a name="line.673"></a>
+<span class="sourceLineNo">674</span> newQueues.put(peer.getFirst(), peer.getSecond());<a name="line.674"></a>
+<span class="sourceLineNo">675</span> sleep = sleepBeforeFailover;<a name="line.675"></a>
+<span class="sourceLineNo">676</span> }<a name="line.676"></a>
+<span class="sourceLineNo">677</span> try {<a name="line.677"></a>
+<span class="sourceLineNo">678</span> Thread.sleep(sleep);<a name="line.678"></a>
+<span class="sourceLineNo">679</span> } catch (InterruptedException e) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span> LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.680"></a>
+<span class="sourceLineNo">681</span> Thread.currentThread().interrupt();<a name="line.681"></a>
+<span class="sourceLineNo">682</span> }<a name="line.682"></a>
+<span class="sourceLineNo">683</span> queues = queueStorage.getAllQueues(deadRS);<a name="line.683"></a>
+<span class="sourceLineNo">684</span> }<a name="line.684"></a>
+<span class="sourceLineNo">685</span> if (queues.isEmpty()) {<a name="line.685"></a>
+<span class="sourceLineNo">686</span> queueStorage.removeReplicatorIfQueueIsEmpty(deadRS);<a name="line.686"></a>
+<span class="sourceLineNo">687</span> }<a name="line.687"></a>
+<span class="sourceLineNo">688</span> } catch (ReplicationException e) {<a name="line.688"></a>
+<span class="sourceLineNo">689</span> server.abort("Failed to claim queue from dead regionserver", e);<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> // Copying over the failed queue is completed.<a name="line.692"></a>
+<span class="sourceLineNo">693</span> if (newQueues.isEmpty()) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span> // We either didn't get the lock or the failed region server didn't have any outstanding<a name="line.694"></a>
+<span class="sourceLineNo">695</span> // WALs to replicate, so we are done.<a name="line.695"></a>
+<span class="sourceLineNo">696</span> return;<a name="line.696"></a>
+<span class="sourceLineNo">697</span> }<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span> for (Map.Entry<String, Set<String>> entry : newQueues.entrySet()) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span> String queueId = entry.getKey();<a name="line.700"></a>
+<span class="sourceLineNo">701</span> Set<String> walsSet = entry.getValue();<a name="line.701"></a>
+<span class="sourceLineNo">702</span> try {<a name="line.702"></a>
+<span class="sourceLineNo">703</span> // there is not an actual peer defined corresponding to peerId for the failover.<a name="line.703"></a>
+<span class="sourceLineNo">704</span> ReplicationQueueInfo replicationQueueInfo = new ReplicationQueueInfo(queueId);<a name="line.704"></a>
+<span class="sourceLineNo">705</span> String actualPeerId = replicationQueueInfo.getPeerId();<a name="line.705"></a>
+<span class="sourceLineNo">706</span><a name="line.706"></a>
+<span class="sourceLineNo">707</span> ReplicationPeerImpl peer = replicationPeers.getPeer(actualPeerId);<a name="line.707"></a>
+<span class="sourceLineNo">708</span> if (peer == null || !isOldPeer(actualPeerId, peer)) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span> LOG.warn("Skipping failover for peer {} of node {}, peer is null", actualPeerId,<a name="line.709"></a>
+<span class="sourceLineNo">710</span> deadRS);<a name="line.710"></a>
+<span class="sourceLineNo">711</span> abortWhenFail(() -> queueStorage.removeQueue(server.getServerName(), queueId));<a name="line.711"></a>
+<span class="sourceLineNo">712</span> continue;<a name="line.712"></a>
+<span class="sourceLineNo">713</span> }<a name="line.713"></a>
+<span class="sourceLineNo">714</span> if (server instanceof ReplicationSyncUp.DummyServer<a name="line.714"></a>
+<span class="sourceLineNo">715</span> && peer.getPeerState().equals(PeerState.DISABLED)) {<a name="line.715"></a>
+<span class="sourceLineNo">716</span> LOG.warn("Peer {} is disabled. ReplicationSyncUp tool will skip "<a name="line.716"></a>
+<span class="sourceLineNo">717</span> + "replicating data to this peer.",<a name="line.717"></a>
+<span class="sourceLineNo">718</span> actualPeerId);<a name="line.718"></a>
+<span class="sourceLineNo">719</span> continue;<a name="line.719"></a>
+<span class="sourceLineNo">720</span> }<a name="line.720"></a>
+<span class="sourceLineNo">721</span> // track sources in walsByIdRecoveredQueues<a name="line.721"></a>
+<span class="sourceLineNo">722</span> Map<String, NavigableSet<String>> walsByGroup = new HashMap<>();<a name="line.722"></a>
+<span class="sourceLineNo">723</span> walsByIdRecoveredQueues.put(queueId, walsByGroup);<a name="line.723"></a>
+<span class="sourceLineNo">724</span> for (String wal : walsSet) {<a name="line.724"></a>
+<span class="sourceLineNo">725</span> String walPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(wal);<a name="line.725"></a>
+<span class="sourceLineNo">726</span> NavigableSet<String> wals = walsByGroup.get(walPrefix);<a name="line.726"></a>
+<span class="sourceLineNo">727</span> if (wals == null) {<a name="line.727"></a>
+<span class="sourceLineNo">728</span> wals = new TreeSet<>();<a name="line.728"></a>
+<span class="sourceLineNo">729</span> walsByGroup.put(walPrefix, wals);<a name="line.729"></a>
+<span class="sourceLineNo">730</span> }<a name="line.730"></a>
+<span class="sourceLineNo">731</span> wals.add(wal);<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> ReplicationSourceInterface src = createSource(queueId, peer);<a name="line.734"></a>
+<span class="sourceLineNo">735</span> // synchronized on oldsources to avoid adding recovered source for the to-be-removed peer<a name="line.735"></a>
+<span class="sourceLineNo">736</span> synchronized (oldsources) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span> peer = replicationPeers.getPeer(src.getPeerId());<a name="line.737"></a>
+<span class="sourceLineNo">738</span> if (peer == null || !isOldPeer(src.getPeerId(), peer)) {<a name="line.738"></a>
+<span class="sourceLineNo">739</span> src.terminate("Recovered queue doesn't belong to any current peer");<a name="line.739"></a>
+<span class="sourceLineNo">740</span> removeRecoveredSource(src);<a name="line.740"></a>
+<span class="sourceLineNo">741</span> continue;<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span> oldsources.add(src);<a name="line.743"></a>
+<span class="sourceLineNo">744</span> for (String wal : walsSet) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> src.enqueueLog(new Path(oldLogDir, wal));<a name="line.745"></a>
+<span class="sourceLineNo">746</span> }<a name="line.746"></a>
+<span class="sourceLineNo">747</span> src.startup();<a name="line.747"></a>
+<span class="sourceLineNo">748</span> }<a name="line.748"></a>
+<span class="sourceLineNo">749</span> } catch (IOException e) {<a name="line.749"></a>
+<span class="sourceLineNo">750</span> // TODO manage it<a name="line.750"></a>
+<span class="sourceLineNo">751</span> LOG.error("Failed creating a source", e);<a name="line.751"></a>
+<span class="sourceLineNo">752</span> }<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span> }<a name="line.754"></a>
+<span class="sourceLineNo">755</span> }<a name="line.755"></a>
+<span class="sourceLineNo">756</span><a name="line.756"></a>
+<span class="sourceLineNo">757</span> /**<a name="line.757"></a>
+<span class="sourceLineNo">758</span> * Terminate the replication on this region server<a name="line.758"></a>
+<span class="sourceLineNo">759</span> */<a name="line.759"></a>
+<span class="sourceLineNo">760</span> public void join() {<a name="line.760"></a>
+<span class="sourceLineNo">761</span> this.executor.shutdown();<a name="line.761"></a>
+<span class="sourceLineNo">762</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.762"></a>
+<span class="sourceLineNo">763</span> source.terminate("Region server is closing");<a name="line.763"></a>
+<span class="sourceLineNo">764</span> }<a name="line.764"></a>
+<span class="sourceLineNo">765</span> }<a name="line.765"></a>
+<span class="sourceLineNo">766</span><a name="line.766"></a>
+<span class="sourceLineNo">767</span> /**<a name="line.767"></a>
+<span class="sourceLineNo">768</span> * Get a copy of the wals of the normal sources on this rs<a name="line.768"></a>
+<span class="sourceLineNo">769</span> * @return a sorted set of wal names<a name="line.769"></a>
+<span class="sourceLineNo">770</span> */<a name="line.770"></a>
+<span class="sourceLineNo">771</span> @VisibleForTesting<a name="line.771"></a>
+<span class="sourceLineNo">772</span> public Map<String, Map<String, NavigableSet<String>>> getWALs() {<a name="line.772"></a>
+<span class="sourceLineNo">773</span> return Collections.unmodifiableMap(walsById);<a name="line.773"></a>
+<span class="sourceLineNo">774</span> }<a name="line.774"></a>
+<span class="sourceLineNo">775</span><a name="line.775"></a>
+<span class="sourceLineNo">776</span> /**<a name="line.776"></a>
+<span class="sourceLineNo">777</span> * Get a copy of the wals of the recovered sources on this rs<a name="line.777"></a>
+<span class="sourceLineNo">778</span> * @return a sorted set of wal names<a name="line.778"></a>
+<span class="sourceLineNo">779</span> */<a name="line.779"></a>
+<span class="sourceLineNo">780</span> @VisibleForTesting<a name="line.780"></a>
+<span class="sourceLineNo">781</span> Map<String, Map<String, NavigableSet<String>>> getWalsByIdRecoveredQueues() {<a name="line.781"></a>
+<span class="sourceLineNo">782</span> return Collections.unmodifiableMap(walsByIdRecoveredQueues);<a name="line.782"></a>
+<span class="sourceLineNo">783</span> }<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span> /**<a name="line.785"></a>
+<span class="sourceLineNo">786</span> * Get a list of all the normal sources of this rs<a name="line.786"></a>
+<span class="sourceLineNo">787</span> * @return list of all normal sources<a name="line.787"></a>
+<span class="sourceLineNo">788</span> */<a name="line.788"></a>
+<span class="sourceLineNo">789</span> public List<ReplicationSourceInterface> getSources() {<a name="line.789"></a>
+<span class="sourceLineNo">790</span> return new ArrayList<>(this.sources.values());<a name="line.790"></a>
+<span class="sourceLineNo">791</span> }<a name="line.791"></a>
+<span class="sourceLineNo">792</span><a name="line.792"></a>
+<span class="sourceLineNo">793</span> /**<a name="line.793"></a>
+<span class="sourceLineNo">794</span> * Get a list of all the recovered sources of this rs<a name="line.794"></a>
+<span class="sourceLineNo">795</span> * @return list of all recovered sources<a name="line.795"></a>
+<span class="sourceLineNo">796</span> */<a name="line.796"></a>
+<span class="sourceLineNo">797</span> public List<ReplicationSourceInterface> getOldSources() {<a name="line.797"></a>
+<span class="sourceLineNo">798</span> return this.oldsources;<a name="line.798"></a>
+<span class="sourceLineNo">799</span> }<a name="line.799"></a>
+<span class="sourceLineNo">800</span><a name="line.800"></a>
+<span class="sourceLineNo">801</span> /**<a name="line.801"></a>
+<span class="sourceLineNo">802</span> * Get the normal source for a given peer<a name="line.802"></a>
+<span class="sourceLineNo">803</span> * @return the normal source for the give peer if it exists, otherwise null.<a name="line.803"></a>
+<span class="sourceLineNo">804</span> */<a name="line.804"></a>
+<span class="sourceLineNo">805</span> @VisibleForTesting<a name="line.805"></a>
+<span class="sourceLineNo">806</span> public ReplicationSourceInterface getSource(String peerId) {<a name="line.806"></a>
+<span class="sourceLineNo">807</span> return this.sources.get(peerId);<a name="line.807"></a>
+<span class="sourceLineNo">808</span> }<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span> @VisibleForTesting<a name="line.810"></a>
+<span class="sourceLineNo">811</span> List<String> getAllQueues() throws IOException {<a name="line.811"></a>
+<span class="sourceLineNo">812</span> List<String> allQueues = Collections.emptyList();<a name="line.812"></a>
+<span class="sourceLineNo">813</span> try {<a name="line.813"></a>
+<span class="sourceLineNo">814</span> allQueues = queueStorage.getAllQueues(server.getServerName());<a name="line.814"></a>
+<span class="sourceLineNo">815</span> } catch (ReplicationException e) {<a name="line.815"></a>
+<span class="sourceLineNo">816</span> throw new IOException(e);<a name="line.816"></a>
+<span class="sourceLineNo">817</span> }<a name="line.817"></a>
+<span class="sourceLineNo">818</span> return allQueues;<a name="line.818"></a>
+<span class="sourceLineNo">819</span> }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span> @VisibleForTesting<a name="line.821"></a>
+<span class="sourceLineNo">822</span> int getSizeOfLatestPath() {<a name="line.822"></a>
+<span class="sourceLineNo">823</span> synchronized (latestPaths) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> return latestPaths.size();<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span> }<a name="line.826"></a>
+<span class="sourceLineNo">827</span><a name="line.827"></a>
+<span class="sourceLineNo">828</span> @VisibleForTesting<a name="line.828"></a>
+<span class="sourceLineNo">829</span> public AtomicLong getTotalBufferUsed() {<a name="line.829"></a>
+<span class="sourceLineNo">830</span> return totalBufferUsed;<a name="line.830"></a>
+<span class="sourceLineNo">831</span> }<a name="line.831"></a>
+<span class="sourceLineNo">832</span><a name="line.832"></a>
+<span class="sourceLineNo">833</span> /**<a name="line.833"></a>
+<span class="sourceLineNo">834</span> * Get the directory where wals are archived<a name="line.834"></a>
+<span class="sourceLineNo">835</span> * @return the directory where wals are archived<a name="line.835"></a>
+<span class="sourceLineNo">836</span> */<a name="line.836"></a>
+<span class="sourceLineNo">837</span> public Path getOldLogDir() {<a name="line.837"></a>
+<span class="sourceLineNo">838</span> return this.oldLogDir;<a name="line.838"></a>
+<span class="sourceLineNo">839</span> }<a name="line.839"></a>
+<span class="sourceLineNo">840</span><a name="line.840"></a>
+<span class="sourceLineNo">841</span> /**<a name="line.841"></a>
+<span class="sourceLineNo">842</span> * Get the directory where wals are stored by their RSs<a name="line.842"></a>
+<span class="sourceLineNo">843</span> * @return the directory where wals are stored by their RSs<a name="line.843"></a>
+<span class="sourceLineNo">844</span> */
<TRUNCATED>
[20/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call() throws IOException {<a name="line.396"></a>
+<span class="sourceLineNo">
<TRUNCATED>
[36/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
index c282308..094b592 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html
@@ -426,483 +426,481 @@
<span class="sourceLineNo">418</span> */<a name="line.418"></a>
<span class="sourceLineNo">419</span> void removeRecoveredSource(ReplicationSourceInterface src) {<a name="line.419"></a>
<span class="sourceLineNo">420</span> LOG.info("Done with the recovered queue " + src.getQueueId());<a name="line.420"></a>
-<span class="sourceLineNo">421</span> src.getSourceMetrics().clear();<a name="line.421"></a>
-<span class="sourceLineNo">422</span> this.oldsources.remove(src);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> // Delete queue from storage and memory<a name="line.423"></a>
-<span class="sourceLineNo">424</span> deleteQueue(src.getQueueId());<a name="line.424"></a>
-<span class="sourceLineNo">425</span> this.walsByIdRecoveredQueues.remove(src.getQueueId());<a name="line.425"></a>
-<span class="sourceLineNo">426</span> }<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span> /**<a name="line.428"></a>
-<span class="sourceLineNo">429</span> * Clear the metrics and related replication queue of the specified old source<a name="line.429"></a>
-<span class="sourceLineNo">430</span> * @param src source to clear<a name="line.430"></a>
-<span class="sourceLineNo">431</span> */<a name="line.431"></a>
-<span class="sourceLineNo">432</span> void removeSource(ReplicationSourceInterface src) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span> LOG.info("Done with the queue " + src.getQueueId());<a name="line.433"></a>
-<span class="sourceLineNo">434</span> src.getSourceMetrics().clear();<a name="line.434"></a>
-<span class="sourceLineNo">435</span> this.sources.remove(src.getPeerId());<a name="line.435"></a>
-<span class="sourceLineNo">436</span> // Delete queue from storage and memory<a name="line.436"></a>
-<span class="sourceLineNo">437</span> deleteQueue(src.getQueueId());<a name="line.437"></a>
-<span class="sourceLineNo">438</span> this.walsById.remove(src.getQueueId());<a name="line.438"></a>
-<span class="sourceLineNo">439</span> }<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span> /**<a name="line.441"></a>
-<span class="sourceLineNo">442</span> * Delete a complete queue of wals associated with a replication source<a name="line.442"></a>
-<span class="sourceLineNo">443</span> * @param queueId the id of replication queue to delete<a name="line.443"></a>
-<span class="sourceLineNo">444</span> */<a name="line.444"></a>
-<span class="sourceLineNo">445</span> private void deleteQueue(String queueId) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span> abortWhenFail(() -> this.queueStorage.removeQueue(server.getServerName(), queueId));<a name="line.446"></a>
-<span class="sourceLineNo">447</span> }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span> @FunctionalInterface<a name="line.449"></a>
-<span class="sourceLineNo">450</span> private interface ReplicationQueueOperation {<a name="line.450"></a>
-<span class="sourceLineNo">451</span> void exec() throws ReplicationException;<a name="line.451"></a>
-<span class="sourceLineNo">452</span> }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span> private void abortWhenFail(ReplicationQueueOperation op) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span> try {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> op.exec();<a name="line.456"></a>
-<span class="sourceLineNo">457</span> } catch (ReplicationException e) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> server.abort("Failed to operate on replication queue", e);<a name="line.458"></a>
-<span class="sourceLineNo">459</span> }<a name="line.459"></a>
-<span class="sourceLineNo">460</span> }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span> private void throwIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> try {<a name="line.463"></a>
-<span class="sourceLineNo">464</span> op.exec();<a name="line.464"></a>
-<span class="sourceLineNo">465</span> } catch (ReplicationException e) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> throw new IOException(e);<a name="line.466"></a>
-<span class="sourceLineNo">467</span> }<a name="line.467"></a>
-<span class="sourceLineNo">468</span> }<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span> private void abortAndThrowIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.470"></a>
-<span class="sourceLineNo">471</span> try {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> op.exec();<a name="line.472"></a>
-<span class="sourceLineNo">473</span> } catch (ReplicationException e) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span> server.abort("Failed to operate on replication queue", e);<a name="line.474"></a>
-<span class="sourceLineNo">475</span> throw new IOException(e);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> }<a name="line.476"></a>
-<span class="sourceLineNo">477</span> }<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
-<span class="sourceLineNo">479</span> /**<a name="line.479"></a>
-<span class="sourceLineNo">480</span> * This method will log the current position to storage. And also clean old logs from the<a name="line.480"></a>
-<span class="sourceLineNo">481</span> * replication queue.<a name="line.481"></a>
-<span class="sourceLineNo">482</span> * @param queueId id of the replication queue<a name="line.482"></a>
-<span class="sourceLineNo">483</span> * @param queueRecovered indicates if this queue comes from another region server<a name="line.483"></a>
-<span class="sourceLineNo">484</span> * @param entryBatch the wal entry batch we just shipped<a name="line.484"></a>
-<span class="sourceLineNo">485</span> */<a name="line.485"></a>
-<span class="sourceLineNo">486</span> public void logPositionAndCleanOldLogs(String queueId, boolean queueRecovered,<a name="line.486"></a>
-<span class="sourceLineNo">487</span> WALEntryBatch entryBatch) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span> String fileName = entryBatch.getLastWalPath().getName();<a name="line.488"></a>
-<span class="sourceLineNo">489</span> abortWhenFail(() -> this.queueStorage.setWALPosition(server.getServerName(), queueId, fileName,<a name="line.489"></a>
-<span class="sourceLineNo">490</span> entryBatch.getLastWalPosition(), entryBatch.getLastSeqIds()));<a name="line.490"></a>
-<span class="sourceLineNo">491</span> cleanOldLogs(fileName, entryBatch.isEndOfFile(), queueId, queueRecovered);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> }<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> * Cleans a log file and all older logs from replication queue. Called when we are sure that a log<a name="line.495"></a>
-<span class="sourceLineNo">496</span> * file is closed and has no more entries.<a name="line.496"></a>
-<span class="sourceLineNo">497</span> * @param log Path to the log<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * @param inclusive whether we should also remove the given log file<a name="line.498"></a>
-<span class="sourceLineNo">499</span> * @param queueId id of the replication queue<a name="line.499"></a>
-<span class="sourceLineNo">500</span> * @param queueRecovered Whether this is a recovered queue<a name="line.500"></a>
-<span class="sourceLineNo">501</span> */<a name="line.501"></a>
-<span class="sourceLineNo">502</span> @VisibleForTesting<a name="line.502"></a>
-<span class="sourceLineNo">503</span> void cleanOldLogs(String log, boolean inclusive, String queueId, boolean queueRecovered) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span> String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log);<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (queueRecovered) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> NavigableSet<String> wals = walsByIdRecoveredQueues.get(queueId).get(logPrefix);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> if (wals != null) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span> cleanOldLogs(wals, log, inclusive, queueId);<a name="line.508"></a>
-<span class="sourceLineNo">509</span> }<a name="line.509"></a>
-<span class="sourceLineNo">510</span> } else {<a name="line.510"></a>
-<span class="sourceLineNo">511</span> // synchronized on walsById to avoid race with preLogRoll<a name="line.511"></a>
-<span class="sourceLineNo">512</span> synchronized (this.walsById) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span> NavigableSet<String> wals = walsById.get(queueId).get(logPrefix);<a name="line.513"></a>
-<span class="sourceLineNo">514</span> if (wals != null) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span> cleanOldLogs(wals, log, inclusive, queueId);<a name="line.515"></a>
-<span class="sourceLineNo">516</span> }<a name="line.516"></a>
-<span class="sourceLineNo">517</span> }<a name="line.517"></a>
-<span class="sourceLineNo">518</span> }<a name="line.518"></a>
-<span class="sourceLineNo">519</span> }<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span> private void cleanOldLogs(NavigableSet<String> wals, String key, boolean inclusive, String id) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> NavigableSet<String> walSet = wals.headSet(key, inclusive);<a name="line.522"></a>
-<span class="sourceLineNo">523</span> if (walSet.isEmpty()) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> return;<a name="line.524"></a>
-<span class="sourceLineNo">525</span> }<a name="line.525"></a>
-<span class="sourceLineNo">526</span> LOG.debug("Removing {} logs in the list: {}", walSet.size(), walSet);<a name="line.526"></a>
-<span class="sourceLineNo">527</span> for (String wal : walSet) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span> abortWhenFail(() -> this.queueStorage.removeWAL(server.getServerName(), id, wal));<a name="line.528"></a>
-<span class="sourceLineNo">529</span> }<a name="line.529"></a>
-<span class="sourceLineNo">530</span> walSet.clear();<a name="line.530"></a>
-<span class="sourceLineNo">531</span> }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span> // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.533"></a>
-<span class="sourceLineNo">534</span> @VisibleForTesting<a name="line.534"></a>
-<span class="sourceLineNo">535</span> public void preLogRoll(Path newLog) throws IOException {<a name="line.535"></a>
-<span class="sourceLineNo">536</span> String logName = newLog.getName();<a name="line.536"></a>
-<span class="sourceLineNo">537</span> String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(logName);<a name="line.537"></a>
-<span class="sourceLineNo">538</span> // synchronized on latestPaths to avoid the new open source miss the new log<a name="line.538"></a>
-<span class="sourceLineNo">539</span> synchronized (this.latestPaths) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span> // Add log to queue storage<a name="line.540"></a>
-<span class="sourceLineNo">541</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span> // If record log to queue storage failed, abort RS and throw exception to make log roll<a name="line.542"></a>
-<span class="sourceLineNo">543</span> // failed<a name="line.543"></a>
-<span class="sourceLineNo">544</span> abortAndThrowIOExceptionWhenFail(<a name="line.544"></a>
-<span class="sourceLineNo">545</span> () -> this.queueStorage.addWAL(server.getServerName(), source.getQueueId(), logName));<a name="line.545"></a>
-<span class="sourceLineNo">546</span> }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span> // synchronized on walsById to avoid race with cleanOldLogs<a name="line.548"></a>
-<span class="sourceLineNo">549</span> synchronized (this.walsById) {<a name="line.549"></a>
-<span class="sourceLineNo">550</span> // Update walsById map<a name="line.550"></a>
-<span class="sourceLineNo">551</span> for (Map.Entry<String, Map<String, NavigableSet<String>>> entry : this.walsById<a name="line.551"></a>
-<span class="sourceLineNo">552</span> .entrySet()) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span> String peerId = entry.getKey();<a name="line.553"></a>
-<span class="sourceLineNo">554</span> Map<String, NavigableSet<String>> walsByPrefix = entry.getValue();<a name="line.554"></a>
-<span class="sourceLineNo">555</span> boolean existingPrefix = false;<a name="line.555"></a>
-<span class="sourceLineNo">556</span> for (Map.Entry<String, NavigableSet<String>> walsEntry : walsByPrefix.entrySet()) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span> SortedSet<String> wals = walsEntry.getValue();<a name="line.557"></a>
-<span class="sourceLineNo">558</span> if (this.sources.isEmpty()) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span> // If there's no slaves, don't need to keep the old wals since<a name="line.559"></a>
-<span class="sourceLineNo">560</span> // we only consider the last one when a new slave comes in<a name="line.560"></a>
-<span class="sourceLineNo">561</span> wals.clear();<a name="line.561"></a>
-<span class="sourceLineNo">562</span> }<a name="line.562"></a>
-<span class="sourceLineNo">563</span> if (logPrefix.equals(walsEntry.getKey())) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span> wals.add(logName);<a name="line.564"></a>
-<span class="sourceLineNo">565</span> existingPrefix = true;<a name="line.565"></a>
-<span class="sourceLineNo">566</span> }<a name="line.566"></a>
-<span class="sourceLineNo">567</span> }<a name="line.567"></a>
-<span class="sourceLineNo">568</span> if (!existingPrefix) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span> // The new log belongs to a new group, add it into this peer<a name="line.569"></a>
-<span class="sourceLineNo">570</span> LOG.debug("Start tracking logs for wal group {} for peer {}", logPrefix, peerId);<a name="line.570"></a>
-<span class="sourceLineNo">571</span> NavigableSet<String> wals = new TreeSet<>();<a name="line.571"></a>
-<span class="sourceLineNo">572</span> wals.add(logName);<a name="line.572"></a>
-<span class="sourceLineNo">573</span> walsByPrefix.put(logPrefix, wals);<a name="line.573"></a>
-<span class="sourceLineNo">574</span> }<a name="line.574"></a>
-<span class="sourceLineNo">575</span> }<a name="line.575"></a>
-<span class="sourceLineNo">576</span> }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span> // Add to latestPaths<a name="line.578"></a>
-<span class="sourceLineNo">579</span> Iterator<Path> iterator = latestPaths.iterator();<a name="line.579"></a>
-<span class="sourceLineNo">580</span> while (iterator.hasNext()) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span> Path path = iterator.next();<a name="line.581"></a>
-<span class="sourceLineNo">582</span> if (path.getName().contains(logPrefix)) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span> iterator.remove();<a name="line.583"></a>
-<span class="sourceLineNo">584</span> break;<a name="line.584"></a>
-<span class="sourceLineNo">585</span> }<a name="line.585"></a>
-<span class="sourceLineNo">586</span> }<a name="line.586"></a>
-<span class="sourceLineNo">587</span> this.latestPaths.add(newLog);<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><a name="line.590"></a>
-<span class="sourceLineNo">591</span> // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.591"></a>
-<span class="sourceLineNo">592</span> @VisibleForTesting<a name="line.592"></a>
-<span class="sourceLineNo">593</span> public void postLogRoll(Path newLog) throws IOException {<a name="line.593"></a>
-<span class="sourceLineNo">594</span> // This only updates the sources we own, not the recovered ones<a name="line.594"></a>
-<span class="sourceLineNo">595</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span> source.enqueueLog(newLog);<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><a name="line.599"></a>
-<span class="sourceLineNo">600</span> @Override<a name="line.600"></a>
-<span class="sourceLineNo">601</span> public void regionServerRemoved(String regionserver) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span> transferQueues(ServerName.valueOf(regionserver));<a name="line.602"></a>
-<span class="sourceLineNo">603</span> }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span> /**<a name="line.605"></a>
-<span class="sourceLineNo">606</span> * Transfer all the queues of the specified to this region server. First it tries to grab a lock<a name="line.606"></a>
-<span class="sourceLineNo">607</span> * and if it works it will move the old queues and finally will delete the old queues.<a name="line.607"></a>
-<span class="sourceLineNo">608</span> * <p><a name="line.608"></a>
-<span class="sourceLineNo">609</span> * It creates one old source for any type of source of the old rs.<a name="line.609"></a>
-<span class="sourceLineNo">610</span> */<a name="line.610"></a>
-<span class="sourceLineNo">611</span> private void transferQueues(ServerName deadRS) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span> if (server.getServerName().equals(deadRS)) {<a name="line.612"></a>
-<span class="sourceLineNo">613</span> // it's just us, give up<a name="line.613"></a>
-<span class="sourceLineNo">614</span> return;<a name="line.614"></a>
-<span class="sourceLineNo">615</span> }<a name="line.615"></a>
-<span class="sourceLineNo">616</span> NodeFailoverWorker transfer = new NodeFailoverWorker(deadRS);<a name="line.616"></a>
-<span class="sourceLineNo">617</span> try {<a name="line.617"></a>
-<span class="sourceLineNo">618</span> this.executor.execute(transfer);<a name="line.618"></a>
-<span class="sourceLineNo">619</span> } catch (RejectedExecutionException ex) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span> LOG.info("Cancelling the transfer of " + deadRS + " because of " + ex.getMessage());<a name="line.620"></a>
-<span class="sourceLineNo">621</span> }<a name="line.621"></a>
-<span class="sourceLineNo">622</span> }<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span> /**<a name="line.624"></a>
-<span class="sourceLineNo">625</span> * Class responsible to setup new ReplicationSources to take care of the queues from dead region<a name="line.625"></a>
-<span class="sourceLineNo">626</span> * servers.<a name="line.626"></a>
-<span class="sourceLineNo">627</span> */<a name="line.627"></a>
-<span class="sourceLineNo">628</span> class NodeFailoverWorker extends Thread {<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span> private final ServerName deadRS;<a name="line.630"></a>
-<span class="sourceLineNo">631</span> // After claim the queues from dead region server, the NodeFailoverWorker will skip to start<a name="line.631"></a>
-<span class="sourceLineNo">632</span> // the RecoveredReplicationSource if the peer has been removed. but there's possible that<a name="line.632"></a>
-<span class="sourceLineNo">633</span> // remove a peer with peerId = 2 and add a peer with peerId = 2 again during the<a name="line.633"></a>
-<span class="sourceLineNo">634</span> // NodeFailoverWorker. So we need a deep copied <peerId, peer> map to decide whether we<a name="line.634"></a>
-<span class="sourceLineNo">635</span> // should start the RecoveredReplicationSource. If the latest peer is not the old peer when<a name="line.635"></a>
-<span class="sourceLineNo">636</span> // NodeFailoverWorker begin, we should skip to start the RecoveredReplicationSource, Otherwise<a name="line.636"></a>
-<span class="sourceLineNo">637</span> // the rs will abort (See HBASE-20475).<a name="line.637"></a>
-<span class="sourceLineNo">638</span> private final Map<String, ReplicationPeerImpl> peersSnapshot;<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span> @VisibleForTesting<a name="line.640"></a>
-<span class="sourceLineNo">641</span> public NodeFailoverWorker(ServerName deadRS) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span> super("Failover-for-" + deadRS);<a name="line.642"></a>
-<span class="sourceLineNo">643</span> this.deadRS = deadRS;<a name="line.643"></a>
-<span class="sourceLineNo">644</span> peersSnapshot = new HashMap<>(replicationPeers.getPeerCache());<a name="line.644"></a>
-<span class="sourceLineNo">645</span> }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span> private boolean isOldPeer(String peerId, ReplicationPeerImpl newPeerRef) {<a name="line.647"></a>
-<span class="sourceLineNo">648</span> ReplicationPeerImpl oldPeerRef = peersSnapshot.get(peerId);<a name="line.648"></a>
-<span class="sourceLineNo">649</span> return oldPeerRef != null && oldPeerRef == newPeerRef;<a name="line.649"></a>
-<span class="sourceLineNo">650</span> }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span> @Override<a name="line.652"></a>
-<span class="sourceLineNo">653</span> public void run() {<a name="line.653"></a>
-<span class="sourceLineNo">654</span> // Wait a bit before transferring the queues, we may be shutting down.<a name="line.654"></a>
-<span class="sourceLineNo">655</span> // This sleep may not be enough in some cases.<a name="line.655"></a>
-<span class="sourceLineNo">656</span> try {<a name="line.656"></a>
-<span class="sourceLineNo">657</span> Thread.sleep(sleepBeforeFailover +<a name="line.657"></a>
-<span class="sourceLineNo">658</span> (long) (ThreadLocalRandom.current().nextFloat() * sleepBeforeFailover));<a name="line.658"></a>
-<span class="sourceLineNo">659</span> } catch (InterruptedException e) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span> LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.660"></a>
-<span class="sourceLineNo">661</span> Thread.currentThread().interrupt();<a name="line.661"></a>
-<span class="sourceLineNo">662</span> }<a name="line.662"></a>
-<span class="sourceLineNo">663</span> // We try to lock that rs' queue directory<a name="line.663"></a>
-<span class="sourceLineNo">664</span> if (server.isStopped()) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span> LOG.info("Not transferring queue since we are shutting down");<a name="line.665"></a>
-<span class="sourceLineNo">666</span> return;<a name="line.666"></a>
-<span class="sourceLineNo">667</span> }<a name="line.667"></a>
-<span class="sourceLineNo">668</span> Map<String, Set<String>> newQueues = new HashMap<>();<a name="line.668"></a>
-<span class="sourceLineNo">669</span> try {<a name="line.669"></a>
-<span class="sourceLineNo">670</span> List<String> queues = queueStorage.getAllQueues(deadRS);<a name="line.670"></a>
-<span class="sourceLineNo">671</span> while (!queues.isEmpty()) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> Pair<String, SortedSet<String>> peer = queueStorage.claimQueue(deadRS,<a name="line.672"></a>
-<span class="sourceLineNo">673</span> queues.get(ThreadLocalRandom.current().nextInt(queues.size())), server.getServerName());<a name="line.673"></a>
-<span class="sourceLineNo">674</span> long sleep = sleepBeforeFailover / 2;<a name="line.674"></a>
-<span class="sourceLineNo">675</span> if (!peer.getSecond().isEmpty()) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span> newQueues.put(peer.getFirst(), peer.getSecond());<a name="line.676"></a>
-<span class="sourceLineNo">677</span> sleep = sleepBeforeFailover;<a name="line.677"></a>
-<span class="sourceLineNo">678</span> }<a name="line.678"></a>
-<span class="sourceLineNo">679</span> try {<a name="line.679"></a>
-<span class="sourceLineNo">680</span> Thread.sleep(sleep);<a name="line.680"></a>
-<span class="sourceLineNo">681</span> } catch (InterruptedException e) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span> LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.682"></a>
-<span class="sourceLineNo">683</span> Thread.currentThread().interrupt();<a name="line.683"></a>
-<span class="sourceLineNo">684</span> }<a name="line.684"></a>
-<span class="sourceLineNo">685</span> queues = queueStorage.getAllQueues(deadRS);<a name="line.685"></a>
-<span class="sourceLineNo">686</span> }<a name="line.686"></a>
-<span class="sourceLineNo">687</span> if (queues.isEmpty()) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span> queueStorage.removeReplicatorIfQueueIsEmpty(deadRS);<a name="line.688"></a>
-<span class="sourceLineNo">689</span> }<a name="line.689"></a>
-<span class="sourceLineNo">690</span> } catch (ReplicationException e) {<a name="line.690"></a>
-<span class="sourceLineNo">691</span> server.abort("Failed to claim queue from dead regionserver", e);<a name="line.691"></a>
-<span class="sourceLineNo">692</span> return;<a name="line.692"></a>
-<span class="sourceLineNo">693</span> }<a name="line.693"></a>
-<span class="sourceLineNo">694</span> // Copying over the failed queue is completed.<a name="line.694"></a>
-<span class="sourceLineNo">695</span> if (newQueues.isEmpty()) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span> // We either didn't get the lock or the failed region server didn't have any outstanding<a name="line.696"></a>
-<span class="sourceLineNo">697</span> // WALs to replicate, so we are done.<a name="line.697"></a>
-<span class="sourceLineNo">698</span> return;<a name="line.698"></a>
-<span class="sourceLineNo">699</span> }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span> for (Map.Entry<String, Set<String>> entry : newQueues.entrySet()) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span> String queueId = entry.getKey();<a name="line.702"></a>
-<span class="sourceLineNo">703</span> Set<String> walsSet = entry.getValue();<a name="line.703"></a>
-<span class="sourceLineNo">704</span> try {<a name="line.704"></a>
-<span class="sourceLineNo">705</span> // there is not an actual peer defined corresponding to peerId for the failover.<a name="line.705"></a>
-<span class="sourceLineNo">706</span> ReplicationQueueInfo replicationQueueInfo = new ReplicationQueueInfo(queueId);<a name="line.706"></a>
-<span class="sourceLineNo">707</span> String actualPeerId = replicationQueueInfo.getPeerId();<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span> ReplicationPeerImpl peer = replicationPeers.getPeer(actualPeerId);<a name="line.709"></a>
-<span class="sourceLineNo">710</span> if (peer == null || !isOldPeer(actualPeerId, peer)) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span> LOG.warn("Skipping failover for peer {} of node {}, peer is null", actualPeerId,<a name="line.711"></a>
-<span class="sourceLineNo">712</span> deadRS);<a name="line.712"></a>
-<span class="sourceLineNo">713</span> abortWhenFail(() -> queueStorage.removeQueue(server.getServerName(), queueId));<a name="line.713"></a>
-<span class="sourceLineNo">714</span> continue;<a name="line.714"></a>
-<span class="sourceLineNo">715</span> }<a name="line.715"></a>
-<span class="sourceLineNo">716</span> if (server instanceof ReplicationSyncUp.DummyServer<a name="line.716"></a>
-<span class="sourceLineNo">717</span> && peer.getPeerState().equals(PeerState.DISABLED)) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span> LOG.warn("Peer {} is disabled. ReplicationSyncUp tool will skip "<a name="line.718"></a>
-<span class="sourceLineNo">719</span> + "replicating data to this peer.",<a name="line.719"></a>
-<span class="sourceLineNo">720</span> actualPeerId);<a name="line.720"></a>
-<span class="sourceLineNo">721</span> continue;<a name="line.721"></a>
-<span class="sourceLineNo">722</span> }<a name="line.722"></a>
-<span class="sourceLineNo">723</span> // track sources in walsByIdRecoveredQueues<a name="line.723"></a>
-<span class="sourceLineNo">724</span> Map<String, NavigableSet<String>> walsByGroup = new HashMap<>();<a name="line.724"></a>
-<span class="sourceLineNo">725</span> walsByIdRecoveredQueues.put(queueId, walsByGroup);<a name="line.725"></a>
-<span class="sourceLineNo">726</span> for (String wal : walsSet) {<a name="line.726"></a>
-<span class="sourceLineNo">727</span> String walPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(wal);<a name="line.727"></a>
-<span class="sourceLineNo">728</span> NavigableSet<String> wals = walsByGroup.get(walPrefix);<a name="line.728"></a>
-<span class="sourceLineNo">729</span> if (wals == null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span> wals = new TreeSet<>();<a name="line.730"></a>
-<span class="sourceLineNo">731</span> walsByGroup.put(walPrefix, wals);<a name="line.731"></a>
-<span class="sourceLineNo">732</span> }<a name="line.732"></a>
-<span class="sourceLineNo">733</span> wals.add(wal);<a name="line.733"></a>
-<span class="sourceLineNo">734</span> }<a name="line.734"></a>
-<span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span> ReplicationSourceInterface src = createSource(queueId, peer);<a name="line.736"></a>
-<span class="sourceLineNo">737</span> // synchronized on oldsources to avoid adding recovered source for the to-be-removed peer<a name="line.737"></a>
-<span class="sourceLineNo">738</span> synchronized (oldsources) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span> peer = replicationPeers.getPeer(src.getPeerId());<a name="line.739"></a>
-<span class="sourceLineNo">740</span> if (peer == null || !isOldPeer(src.getPeerId(), peer)) {<a name="line.740"></a>
-<span class="sourceLineNo">741</span> src.terminate("Recovered queue doesn't belong to any current peer");<a name="line.741"></a>
-<span class="sourceLineNo">742</span> removeRecoveredSource(src);<a name="line.742"></a>
-<span class="sourceLineNo">743</span> continue;<a name="line.743"></a>
-<span class="sourceLineNo">744</span> }<a name="line.744"></a>
-<span class="sourceLineNo">745</span> oldsources.add(src);<a name="line.745"></a>
-<span class="sourceLineNo">746</span> for (String wal : walsSet) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span> src.enqueueLog(new Path(oldLogDir, wal));<a name="line.747"></a>
-<span class="sourceLineNo">748</span> }<a name="line.748"></a>
-<span class="sourceLineNo">749</span> src.startup();<a name="line.749"></a>
-<span class="sourceLineNo">750</span> }<a name="line.750"></a>
-<span class="sourceLineNo">751</span> } catch (IOException e) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span> // TODO manage it<a name="line.752"></a>
-<span class="sourceLineNo">753</span> LOG.error("Failed creating a source", e);<a name="line.753"></a>
-<span class="sourceLineNo">754</span> }<a name="line.754"></a>
-<span class="sourceLineNo">755</span> }<a name="line.755"></a>
-<span class="sourceLineNo">756</span> }<a name="line.756"></a>
-<span class="sourceLineNo">757</span> }<a name="line.757"></a>
-<span class="sourceLineNo">758</span><a name="line.758"></a>
-<span class="sourceLineNo">759</span> /**<a name="line.759"></a>
-<span class="sourceLineNo">760</span> * Terminate the replication on this region server<a name="line.760"></a>
-<span class="sourceLineNo">761</span> */<a name="line.761"></a>
-<span class="sourceLineNo">762</span> public void join() {<a name="line.762"></a>
-<span class="sourceLineNo">763</span> this.executor.shutdown();<a name="line.763"></a>
-<span class="sourceLineNo">764</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.764"></a>
-<span class="sourceLineNo">765</span> source.terminate("Region server is closing");<a name="line.765"></a>
-<span class="sourceLineNo">766</span> }<a name="line.766"></a>
-<span class="sourceLineNo">767</span> }<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> * Get a copy of the wals of the normal sources on this rs<a name="line.770"></a>
-<span class="sourceLineNo">771</span> * @return a sorted set of wal names<a name="line.771"></a>
-<span class="sourceLineNo">772</span> */<a name="line.772"></a>
-<span class="sourceLineNo">773</span> @VisibleForTesting<a name="line.773"></a>
-<span class="sourceLineNo">774</span> public Map<String, Map<String, NavigableSet<String>>> getWALs() {<a name="line.774"></a>
-<span class="sourceLineNo">775</span> return Collections.unmodifiableMap(walsById);<a name="line.775"></a>
-<span class="sourceLineNo">776</span> }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span> /**<a name="line.778"></a>
-<span class="sourceLineNo">779</span> * Get a copy of the wals of the recovered sources on this rs<a name="line.779"></a>
-<span class="sourceLineNo">780</span> * @return a sorted set of wal names<a name="line.780"></a>
-<span class="sourceLineNo">781</span> */<a name="line.781"></a>
-<span class="sourceLineNo">782</span> @VisibleForTesting<a name="line.782"></a>
-<span class="sourceLineNo">783</span> Map<String, Map<String, NavigableSet<String>>> getWalsByIdRecoveredQueues() {<a name="line.783"></a>
-<span class="sourceLineNo">784</span> return Collections.unmodifiableMap(walsByIdRecoveredQueues);<a name="line.784"></a>
-<span class="sourceLineNo">785</span> }<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span> /**<a name="line.787"></a>
-<span class="sourceLineNo">788</span> * Get a list of all the normal sources of this rs<a name="line.788"></a>
-<span class="sourceLineNo">789</span> * @return list of all normal sources<a name="line.789"></a>
-<span class="sourceLineNo">790</span> */<a name="line.790"></a>
-<span class="sourceLineNo">791</span> public List<ReplicationSourceInterface> getSources() {<a name="line.791"></a>
-<span class="sourceLineNo">792</span> return new ArrayList<>(this.sources.values());<a name="line.792"></a>
-<span class="sourceLineNo">793</span> }<a name="line.793"></a>
-<span class="sourceLineNo">794</span><a name="line.794"></a>
-<span class="sourceLineNo">795</span> /**<a name="line.795"></a>
-<span class="sourceLineNo">796</span> * Get a list of all the recovered sources of this rs<a name="line.796"></a>
-<span class="sourceLineNo">797</span> * @return list of all recovered sources<a name="line.797"></a>
-<span class="sourceLineNo">798</span> */<a name="line.798"></a>
-<span class="sourceLineNo">799</span> public List<ReplicationSourceInterface> getOldSources() {<a name="line.799"></a>
-<span class="sourceLineNo">800</span> return this.oldsources;<a name="line.800"></a>
-<span class="sourceLineNo">801</span> }<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span> /**<a name="line.803"></a>
-<span class="sourceLineNo">804</span> * Get the normal source for a given peer<a name="line.804"></a>
-<span class="sourceLineNo">805</span> * @return the normal source for the give peer if it exists, otherwise null.<a name="line.805"></a>
-<span class="sourceLineNo">806</span> */<a name="line.806"></a>
-<span class="sourceLineNo">807</span> @VisibleForTesting<a name="line.807"></a>
-<span class="sourceLineNo">808</span> public ReplicationSourceInterface getSource(String peerId) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span> return this.sources.get(peerId);<a name="line.809"></a>
-<span class="sourceLineNo">810</span> }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span> @VisibleForTesting<a name="line.812"></a>
-<span class="sourceLineNo">813</span> List<String> getAllQueues() throws IOException {<a name="line.813"></a>
-<span class="sourceLineNo">814</span> List<String> allQueues = Collections.emptyList();<a name="line.814"></a>
-<span class="sourceLineNo">815</span> try {<a name="line.815"></a>
-<span class="sourceLineNo">816</span> allQueues = queueStorage.getAllQueues(server.getServerName());<a name="line.816"></a>
-<span class="sourceLineNo">817</span> } catch (ReplicationException e) {<a name="line.817"></a>
-<span class="sourceLineNo">818</span> throw new IOException(e);<a name="line.818"></a>
-<span class="sourceLineNo">819</span> }<a name="line.819"></a>
-<span class="sourceLineNo">820</span> return allQueues;<a name="line.820"></a>
-<span class="sourceLineNo">821</span> }<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span> @VisibleForTesting<a name="line.823"></a>
-<span class="sourceLineNo">824</span> int getSizeOfLatestPath() {<a name="line.824"></a>
-<span class="sourceLineNo">825</span> synchronized (latestPaths) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span> return latestPaths.size();<a name="line.826"></a>
-<span class="sourceLineNo">827</span> }<a name="line.827"></a>
-<span class="sourceLineNo">828</span> }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span> @VisibleForTesting<a name="line.830"></a>
-<span class="sourceLineNo">831</span> public AtomicLong getTotalBufferUsed() {<a name="line.831"></a>
-<span class="sourceLineNo">832</span> return totalBufferUsed;<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> /**<a name="line.835"></a>
-<span class="sourceLineNo">836</span> * Get the directory where wals are archived<a name="line.836"></a>
-<span class="sourceLineNo">837</span> * @return the directory where wals are archived<a name="line.837"></a>
-<span class="sourceLineNo">838</span> */<a name="line.838"></a>
-<span class="sourceLineNo">839</span> public Path getOldLogDir() {<a name="line.839"></a>
-<span class="sourceLineNo">840</span> return this.oldLogDir;<a name="line.840"></a>
-<span class="sourceLineNo">841</span> }<a name="line.841"></a>
-<span class="sourceLineNo">842</span><a name="line.842"></a>
-<span class="sourceLineNo">843</span> /**<a name="line.843"></a>
-<span class="sourceLineNo">844</span> * Get the directory where wals are stored by their RSs<a name="line.844"></a>
-<span class="sourceLineNo">845</span> * @return the directory where wals are stored by their RSs<a name="line.845"></a>
-<span class="sourceLineNo">846</span> */<a name="line.846"></a>
-<span class="sourceLineNo">847</span> public Path getLogDir() {<a name="line.847"></a>
-<span class="sourceLineNo">848</span> return this.logDir;<a name="line.848"></a>
-<span class="sourceLineNo">849</span> }<a name="line.849"></a>
-<span class="sourceLineNo">850</span><a name="line.850"></a>
-<span class="sourceLineNo">851</span> /**<a name="line.851"></a>
-<span class="sourceLineNo">852</span> * Get the handle on the local file system<a name="line.852"></a>
-<span class="sourceLineNo">853</span> * @return Handle on the local file system<a name="line.853"></a>
-<span class="sourceLineNo">854</span> */<a name="line.854"></a>
-<span class="sourceLineNo">855</span> public FileSystem getFs() {<a name="line.855"></a>
-<span class="sourceLineNo">856</span> return this.fs;<a name="line.856"></a>
-<span class="sourceLineNo">857</span> }<a name="line.857"></a>
-<span class="sourceLineNo">858</span><a name="line.858"></a>
-<span class="sourceLineNo">859</span> /**<a name="line.859"></a>
-<span class="sourceLineNo">860</span> * Get the ReplicationPeers used by this ReplicationSourceManager<a name="line.860"></a>
-<span class="sourceLineNo">861</span> * @return the ReplicationPeers used by this ReplicationSourceManager<a name="line.861"></a>
-<span class="sourceLineNo">862</span> */<a name="line.862"></a>
-<span class="sourceLineNo">863</span> public ReplicationPeers getReplicationPeers() {<a name="line.863"></a>
-<span class="sourceLineNo">864</span> return this.replicationPeers;<a name="line.864"></a>
-<span class="sourceLineNo">865</span> }<a name="line.865"></a>
-<span class="sourceLineNo">866</span><a name="line.866"></a>
-<span class="sourceLineNo">867</span> /**<a name="line.867"></a>
-<span class="sourceLineNo">868</span> * Get a string representation of all the sources' metrics<a name="line.868"></a>
-<span class="sourceLineNo">869</span> */<a name="line.869"></a>
-<span class="sourceLineNo">870</span> public String getStats() {<a name="line.870"></a>
-<span class="sourceLineNo">871</span> StringBuilder stats = new StringBuilder();<a name="line.871"></a>
-<span class="sourceLineNo">872</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.872"></a>
-<span class="sourceLineNo">873</span> stats.append("Normal source for cluster " + source.getPeerId() + ": ");<a name="line.873"></a>
-<span class="sourceLineNo">874</span> stats.append(source.getStats() + "\n");<a name="line.874"></a>
-<span class="sourceLineNo">875</span> }<a name="line.875"></a>
-<span class="sourceLineNo">876</span> for (ReplicationSourceInterface oldSource : oldsources) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span> stats.append("Recovered source for cluster/machine(s) " + oldSource.getPeerId() + ": ");<a name="line.877"></a>
-<span class="sourceLineNo">878</span> stats.append(oldSource.getStats() + "\n");<a name="line.878"></a>
-<span class="sourceLineNo">879</span> }<a name="line.879"></a>
-<span class="sourceLineNo">880</span> return stats.toString();<a name="line.880"></a>
-<span class="sourceLineNo">881</span> }<a name="line.881"></a>
-<span class="sourceLineNo">882</span><a name="line.882"></a>
-<span class="sourceLineNo">883</span> public void addHFileRefs(TableName tableName, byte[] family, List<Pair<Path, Path>> pairs)<a name="line.883"></a>
-<span class="sourceLineNo">884</span> throws IOException {<a name="line.884"></a>
-<span class="sourceLineNo">885</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.885"></a>
-<span class="sourceLineNo">886</span> throwIOExceptionWhenFail(() -> source.addHFileRefs(tableName, family, pairs));<a name="line.886"></a>
-<span class="sourceLineNo">887</span> }<a name="line.887"></a>
-<span class="sourceLineNo">888</span> }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span> public void cleanUpHFileRefs(String peerId, List<String> files) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span> abortWhenFail(() -> this.queueStorage.removeHFileRefs(peerId, files));<a name="line.891"></a>
-<span class="sourceLineNo">892</span> }<a name="line.892"></a>
-<span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span> int activeFailoverTaskCount() {<a name="line.894"></a>
-<span class="sourceLineNo">895</span> return executor.getActiveCount();<a name="line.895"></a>
-<span class="sourceLineNo">896</span> }<a name="line.896"></a>
-<span class="sourceLineNo">897</span>}<a name="line.897"></a>
+<span class="sourceLineNo">421</span> this.oldsources.remove(src);<a name="line.421"></a>
+<span class="sourceLineNo">422</span> // Delete queue from storage and memory<a name="line.422"></a>
+<span class="sourceLineNo">423</span> deleteQueue(src.getQueueId());<a name="line.423"></a>
+<span class="sourceLineNo">424</span> this.walsByIdRecoveredQueues.remove(src.getQueueId());<a name="line.424"></a>
+<span class="sourceLineNo">425</span> }<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span> /**<a name="line.427"></a>
+<span class="sourceLineNo">428</span> * Clear the metrics and related replication queue of the specified old source<a name="line.428"></a>
+<span class="sourceLineNo">429</span> * @param src source to clear<a name="line.429"></a>
+<span class="sourceLineNo">430</span> */<a name="line.430"></a>
+<span class="sourceLineNo">431</span> void removeSource(ReplicationSourceInterface src) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span> LOG.info("Done with the queue " + src.getQueueId());<a name="line.432"></a>
+<span class="sourceLineNo">433</span> this.sources.remove(src.getPeerId());<a name="line.433"></a>
+<span class="sourceLineNo">434</span> // Delete queue from storage and memory<a name="line.434"></a>
+<span class="sourceLineNo">435</span> deleteQueue(src.getQueueId());<a name="line.435"></a>
+<span class="sourceLineNo">436</span> this.walsById.remove(src.getQueueId());<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> /**<a name="line.439"></a>
+<span class="sourceLineNo">440</span> * Delete a complete queue of wals associated with a replication source<a name="line.440"></a>
+<span class="sourceLineNo">441</span> * @param queueId the id of replication queue to delete<a name="line.441"></a>
+<span class="sourceLineNo">442</span> */<a name="line.442"></a>
+<span class="sourceLineNo">443</span> private void deleteQueue(String queueId) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span> abortWhenFail(() -> this.queueStorage.removeQueue(server.getServerName(), queueId));<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> @FunctionalInterface<a name="line.447"></a>
+<span class="sourceLineNo">448</span> private interface ReplicationQueueOperation {<a name="line.448"></a>
+<span class="sourceLineNo">449</span> void exec() throws ReplicationException;<a name="line.449"></a>
+<span class="sourceLineNo">450</span> }<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span> private void abortWhenFail(ReplicationQueueOperation op) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span> try {<a name="line.453"></a>
+<span class="sourceLineNo">454</span> op.exec();<a name="line.454"></a>
+<span class="sourceLineNo">455</span> } catch (ReplicationException e) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span> server.abort("Failed to operate on replication queue", e);<a name="line.456"></a>
+<span class="sourceLineNo">457</span> }<a name="line.457"></a>
+<span class="sourceLineNo">458</span> }<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span> private void throwIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.460"></a>
+<span class="sourceLineNo">461</span> try {<a name="line.461"></a>
+<span class="sourceLineNo">462</span> op.exec();<a name="line.462"></a>
+<span class="sourceLineNo">463</span> } catch (ReplicationException e) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span> throw new IOException(e);<a name="line.464"></a>
+<span class="sourceLineNo">465</span> }<a name="line.465"></a>
+<span class="sourceLineNo">466</span> }<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span> private void abortAndThrowIOExceptionWhenFail(ReplicationQueueOperation op) throws IOException {<a name="line.468"></a>
+<span class="sourceLineNo">469</span> try {<a name="line.469"></a>
+<span class="sourceLineNo">470</span> op.exec();<a name="line.470"></a>
+<span class="sourceLineNo">471</span> } catch (ReplicationException e) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span> server.abort("Failed to operate on replication queue", e);<a name="line.472"></a>
+<span class="sourceLineNo">473</span> throw new IOException(e);<a name="line.473"></a>
+<span class="sourceLineNo">474</span> }<a name="line.474"></a>
+<span class="sourceLineNo">475</span> }<a name="line.475"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span> /**<a name="line.477"></a>
+<span class="sourceLineNo">478</span> * This method will log the current position to storage. And also clean old logs from the<a name="line.478"></a>
+<span class="sourceLineNo">479</span> * replication queue.<a name="line.479"></a>
+<span class="sourceLineNo">480</span> * @param queueId id of the replication queue<a name="line.480"></a>
+<span class="sourceLineNo">481</span> * @param queueRecovered indicates if this queue comes from another region server<a name="line.481"></a>
+<span class="sourceLineNo">482</span> * @param entryBatch the wal entry batch we just shipped<a name="line.482"></a>
+<span class="sourceLineNo">483</span> */<a name="line.483"></a>
+<span class="sourceLineNo">484</span> public void logPositionAndCleanOldLogs(String queueId, boolean queueRecovered,<a name="line.484"></a>
+<span class="sourceLineNo">485</span> WALEntryBatch entryBatch) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span> String fileName = entryBatch.getLastWalPath().getName();<a name="line.486"></a>
+<span class="sourceLineNo">487</span> abortWhenFail(() -> this.queueStorage.setWALPosition(server.getServerName(), queueId, fileName,<a name="line.487"></a>
+<span class="sourceLineNo">488</span> entryBatch.getLastWalPosition(), entryBatch.getLastSeqIds()));<a name="line.488"></a>
+<span class="sourceLineNo">489</span> cleanOldLogs(fileName, entryBatch.isEndOfFile(), queueId, queueRecovered);<a name="line.489"></a>
+<span class="sourceLineNo">490</span> }<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span> /**<a name="line.492"></a>
+<span class="sourceLineNo">493</span> * Cleans a log file and all older logs from replication queue. Called when we are sure that a log<a name="line.493"></a>
+<span class="sourceLineNo">494</span> * file is closed and has no more entries.<a name="line.494"></a>
+<span class="sourceLineNo">495</span> * @param log Path to the log<a name="line.495"></a>
+<span class="sourceLineNo">496</span> * @param inclusive whether we should also remove the given log file<a name="line.496"></a>
+<span class="sourceLineNo">497</span> * @param queueId id of the replication queue<a name="line.497"></a>
+<span class="sourceLineNo">498</span> * @param queueRecovered Whether this is a recovered queue<a name="line.498"></a>
+<span class="sourceLineNo">499</span> */<a name="line.499"></a>
+<span class="sourceLineNo">500</span> @VisibleForTesting<a name="line.500"></a>
+<span class="sourceLineNo">501</span> void cleanOldLogs(String log, boolean inclusive, String queueId, boolean queueRecovered) {<a name="line.501"></a>
+<span class="sourceLineNo">502</span> String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(log);<a name="line.502"></a>
+<span class="sourceLineNo">503</span> if (queueRecovered) {<a name="line.503"></a>
+<span class="sourceLineNo">504</span> NavigableSet<String> wals = walsByIdRecoveredQueues.get(queueId).get(logPrefix);<a name="line.504"></a>
+<span class="sourceLineNo">505</span> if (wals != null) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span> cleanOldLogs(wals, log, inclusive, queueId);<a name="line.506"></a>
+<span class="sourceLineNo">507</span> }<a name="line.507"></a>
+<span class="sourceLineNo">508</span> } else {<a name="line.508"></a>
+<span class="sourceLineNo">509</span> // synchronized on walsById to avoid race with preLogRoll<a name="line.509"></a>
+<span class="sourceLineNo">510</span> synchronized (this.walsById) {<a name="line.510"></a>
+<span class="sourceLineNo">511</span> NavigableSet<String> wals = walsById.get(queueId).get(logPrefix);<a name="line.511"></a>
+<span class="sourceLineNo">512</span> if (wals != null) {<a name="line.512"></a>
+<span class="sourceLineNo">513</span> cleanOldLogs(wals, log, inclusive, queueId);<a name="line.513"></a>
+<span class="sourceLineNo">514</span> }<a name="line.514"></a>
+<span class="sourceLineNo">515</span> }<a name="line.515"></a>
+<span class="sourceLineNo">516</span> }<a name="line.516"></a>
+<span class="sourceLineNo">517</span> }<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span> private void cleanOldLogs(NavigableSet<String> wals, String key, boolean inclusive, String id) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span> NavigableSet<String> walSet = wals.headSet(key, inclusive);<a name="line.520"></a>
+<span class="sourceLineNo">521</span> if (walSet.isEmpty()) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span> return;<a name="line.522"></a>
+<span class="sourceLineNo">523</span> }<a name="line.523"></a>
+<span class="sourceLineNo">524</span> LOG.debug("Removing {} logs in the list: {}", walSet.size(), walSet);<a name="line.524"></a>
+<span class="sourceLineNo">525</span> for (String wal : walSet) {<a name="line.525"></a>
+<span class="sourceLineNo">526</span> abortWhenFail(() -> this.queueStorage.removeWAL(server.getServerName(), id, wal));<a name="line.526"></a>
+<span class="sourceLineNo">527</span> }<a name="line.527"></a>
+<span class="sourceLineNo">528</span> walSet.clear();<a name="line.528"></a>
+<span class="sourceLineNo">529</span> }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span> // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.531"></a>
+<span class="sourceLineNo">532</span> @VisibleForTesting<a name="line.532"></a>
+<span class="sourceLineNo">533</span> public void preLogRoll(Path newLog) throws IOException {<a name="line.533"></a>
+<span class="sourceLineNo">534</span> String logName = newLog.getName();<a name="line.534"></a>
+<span class="sourceLineNo">535</span> String logPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(logName);<a name="line.535"></a>
+<span class="sourceLineNo">536</span> // synchronized on latestPaths to avoid the new open source miss the new log<a name="line.536"></a>
+<span class="sourceLineNo">537</span> synchronized (this.latestPaths) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span> // Add log to queue storage<a name="line.538"></a>
+<span class="sourceLineNo">539</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span> // If record log to queue storage failed, abort RS and throw exception to make log roll<a name="line.540"></a>
+<span class="sourceLineNo">541</span> // failed<a name="line.541"></a>
+<span class="sourceLineNo">542</span> abortAndThrowIOExceptionWhenFail(<a name="line.542"></a>
+<span class="sourceLineNo">543</span> () -> this.queueStorage.addWAL(server.getServerName(), source.getQueueId(), logName));<a name="line.543"></a>
+<span class="sourceLineNo">544</span> }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span> // synchronized on walsById to avoid race with cleanOldLogs<a name="line.546"></a>
+<span class="sourceLineNo">547</span> synchronized (this.walsById) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span> // Update walsById map<a name="line.548"></a>
+<span class="sourceLineNo">549</span> for (Map.Entry<String, Map<String, NavigableSet<String>>> entry : this.walsById<a name="line.549"></a>
+<span class="sourceLineNo">550</span> .entrySet()) {<a name="line.550"></a>
+<span class="sourceLineNo">551</span> String peerId = entry.getKey();<a name="line.551"></a>
+<span class="sourceLineNo">552</span> Map<String, NavigableSet<String>> walsByPrefix = entry.getValue();<a name="line.552"></a>
+<span class="sourceLineNo">553</span> boolean existingPrefix = false;<a name="line.553"></a>
+<span class="sourceLineNo">554</span> for (Map.Entry<String, NavigableSet<String>> walsEntry : walsByPrefix.entrySet()) {<a name="line.554"></a>
+<span class="sourceLineNo">555</span> SortedSet<String> wals = walsEntry.getValue();<a name="line.555"></a>
+<span class="sourceLineNo">556</span> if (this.sources.isEmpty()) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span> // If there's no slaves, don't need to keep the old wals since<a name="line.557"></a>
+<span class="sourceLineNo">558</span> // we only consider the last one when a new slave comes in<a name="line.558"></a>
+<span class="sourceLineNo">559</span> wals.clear();<a name="line.559"></a>
+<span class="sourceLineNo">560</span> }<a name="line.560"></a>
+<span class="sourceLineNo">561</span> if (logPrefix.equals(walsEntry.getKey())) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span> wals.add(logName);<a name="line.562"></a>
+<span class="sourceLineNo">563</span> existingPrefix = true;<a name="line.563"></a>
+<span class="sourceLineNo">564</span> }<a name="line.564"></a>
+<span class="sourceLineNo">565</span> }<a name="line.565"></a>
+<span class="sourceLineNo">566</span> if (!existingPrefix) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span> // The new log belongs to a new group, add it into this peer<a name="line.567"></a>
+<span class="sourceLineNo">568</span> LOG.debug("Start tracking logs for wal group {} for peer {}", logPrefix, peerId);<a name="line.568"></a>
+<span class="sourceLineNo">569</span> NavigableSet<String> wals = new TreeSet<>();<a name="line.569"></a>
+<span class="sourceLineNo">570</span> wals.add(logName);<a name="line.570"></a>
+<span class="sourceLineNo">571</span> walsByPrefix.put(logPrefix, wals);<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> }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span> // Add to latestPaths<a name="line.576"></a>
+<span class="sourceLineNo">577</span> Iterator<Path> iterator = latestPaths.iterator();<a name="line.577"></a>
+<span class="sourceLineNo">578</span> while (iterator.hasNext()) {<a name="line.578"></a>
+<span class="sourceLineNo">579</span> Path path = iterator.next();<a name="line.579"></a>
+<span class="sourceLineNo">580</span> if (path.getName().contains(logPrefix)) {<a name="line.580"></a>
+<span class="sourceLineNo">581</span> iterator.remove();<a name="line.581"></a>
+<span class="sourceLineNo">582</span> break;<a name="line.582"></a>
+<span class="sourceLineNo">583</span> }<a name="line.583"></a>
+<span class="sourceLineNo">584</span> }<a name="line.584"></a>
+<span class="sourceLineNo">585</span> this.latestPaths.add(newLog);<a name="line.585"></a>
+<span class="sourceLineNo">586</span> }<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> // public because of we call it in TestReplicationEmptyWALRecovery<a name="line.589"></a>
+<span class="sourceLineNo">590</span> @VisibleForTesting<a name="line.590"></a>
+<span class="sourceLineNo">591</span> public void postLogRoll(Path newLog) throws IOException {<a name="line.591"></a>
+<span class="sourceLineNo">592</span> // This only updates the sources we own, not the recovered ones<a name="line.592"></a>
+<span class="sourceLineNo">593</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span> source.enqueueLog(newLog);<a name="line.594"></a>
+<span class="sourceLineNo">595</span> }<a name="line.595"></a>
+<span class="sourceLineNo">596</span> }<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span> @Override<a name="line.598"></a>
+<span class="sourceLineNo">599</span> public void regionServerRemoved(String regionserver) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span> transferQueues(ServerName.valueOf(regionserver));<a name="line.600"></a>
+<span class="sourceLineNo">601</span> }<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span> /**<a name="line.603"></a>
+<span class="sourceLineNo">604</span> * Transfer all the queues of the specified to this region server. First it tries to grab a lock<a name="line.604"></a>
+<span class="sourceLineNo">605</span> * and if it works it will move the old queues and finally will delete the old queues.<a name="line.605"></a>
+<span class="sourceLineNo">606</span> * <p><a name="line.606"></a>
+<span class="sourceLineNo">607</span> * It creates one old source for any type of source of the old rs.<a name="line.607"></a>
+<span class="sourceLineNo">608</span> */<a name="line.608"></a>
+<span class="sourceLineNo">609</span> private void transferQueues(ServerName deadRS) {<a name="line.609"></a>
+<span class="sourceLineNo">610</span> if (server.getServerName().equals(deadRS)) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span> // it's just us, give up<a name="line.611"></a>
+<span class="sourceLineNo">612</span> return;<a name="line.612"></a>
+<span class="sourceLineNo">613</span> }<a name="line.613"></a>
+<span class="sourceLineNo">614</span> NodeFailoverWorker transfer = new NodeFailoverWorker(deadRS);<a name="line.614"></a>
+<span class="sourceLineNo">615</span> try {<a name="line.615"></a>
+<span class="sourceLineNo">616</span> this.executor.execute(transfer);<a name="line.616"></a>
+<span class="sourceLineNo">617</span> } catch (RejectedExecutionException ex) {<a name="line.617"></a>
+<span class="sourceLineNo">618</span> LOG.info("Cancelling the transfer of " + deadRS + " because of " + ex.getMessage());<a name="line.618"></a>
+<span class="sourceLineNo">619</span> }<a name="line.619"></a>
+<span class="sourceLineNo">620</span> }<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span> /**<a name="line.622"></a>
+<span class="sourceLineNo">623</span> * Class responsible to setup new ReplicationSources to take care of the queues from dead region<a name="line.623"></a>
+<span class="sourceLineNo">624</span> * servers.<a name="line.624"></a>
+<span class="sourceLineNo">625</span> */<a name="line.625"></a>
+<span class="sourceLineNo">626</span> class NodeFailoverWorker extends Thread {<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span> private final ServerName deadRS;<a name="line.628"></a>
+<span class="sourceLineNo">629</span> // After claim the queues from dead region server, the NodeFailoverWorker will skip to start<a name="line.629"></a>
+<span class="sourceLineNo">630</span> // the RecoveredReplicationSource if the peer has been removed. but there's possible that<a name="line.630"></a>
+<span class="sourceLineNo">631</span> // remove a peer with peerId = 2 and add a peer with peerId = 2 again during the<a name="line.631"></a>
+<span class="sourceLineNo">632</span> // NodeFailoverWorker. So we need a deep copied <peerId, peer> map to decide whether we<a name="line.632"></a>
+<span class="sourceLineNo">633</span> // should start the RecoveredReplicationSource. If the latest peer is not the old peer when<a name="line.633"></a>
+<span class="sourceLineNo">634</span> // NodeFailoverWorker begin, we should skip to start the RecoveredReplicationSource, Otherwise<a name="line.634"></a>
+<span class="sourceLineNo">635</span> // the rs will abort (See HBASE-20475).<a name="line.635"></a>
+<span class="sourceLineNo">636</span> private final Map<String, ReplicationPeerImpl> peersSnapshot;<a name="line.636"></a>
+<span class="sourceLineNo">637</span><a name="line.637"></a>
+<span class="sourceLineNo">638</span> @VisibleForTesting<a name="line.638"></a>
+<span class="sourceLineNo">639</span> public NodeFailoverWorker(ServerName deadRS) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span> super("Failover-for-" + deadRS);<a name="line.640"></a>
+<span class="sourceLineNo">641</span> this.deadRS = deadRS;<a name="line.641"></a>
+<span class="sourceLineNo">642</span> peersSnapshot = new HashMap<>(replicationPeers.getPeerCache());<a name="line.642"></a>
+<span class="sourceLineNo">643</span> }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span> private boolean isOldPeer(String peerId, ReplicationPeerImpl newPeerRef) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span> ReplicationPeerImpl oldPeerRef = peersSnapshot.get(peerId);<a name="line.646"></a>
+<span class="sourceLineNo">647</span> return oldPeerRef != null && oldPeerRef == newPeerRef;<a name="line.647"></a>
+<span class="sourceLineNo">648</span> }<a name="line.648"></a>
+<span class="sourceLineNo">649</span><a name="line.649"></a>
+<span class="sourceLineNo">650</span> @Override<a name="line.650"></a>
+<span class="sourceLineNo">651</span> public void run() {<a name="line.651"></a>
+<span class="sourceLineNo">652</span> // Wait a bit before transferring the queues, we may be shutting down.<a name="line.652"></a>
+<span class="sourceLineNo">653</span> // This sleep may not be enough in some cases.<a name="line.653"></a>
+<span class="sourceLineNo">654</span> try {<a name="line.654"></a>
+<span class="sourceLineNo">655</span> Thread.sleep(sleepBeforeFailover +<a name="line.655"></a>
+<span class="sourceLineNo">656</span> (long) (ThreadLocalRandom.current().nextFloat() * sleepBeforeFailover));<a name="line.656"></a>
+<span class="sourceLineNo">657</span> } catch (InterruptedException e) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span> LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.658"></a>
+<span class="sourceLineNo">659</span> Thread.currentThread().interrupt();<a name="line.659"></a>
+<span class="sourceLineNo">660</span> }<a name="line.660"></a>
+<span class="sourceLineNo">661</span> // We try to lock that rs' queue directory<a name="line.661"></a>
+<span class="sourceLineNo">662</span> if (server.isStopped()) {<a name="line.662"></a>
+<span class="sourceLineNo">663</span> LOG.info("Not transferring queue since we are shutting down");<a name="line.663"></a>
+<span class="sourceLineNo">664</span> return;<a name="line.664"></a>
+<span class="sourceLineNo">665</span> }<a name="line.665"></a>
+<span class="sourceLineNo">666</span> Map<String, Set<String>> newQueues = new HashMap<>();<a name="line.666"></a>
+<span class="sourceLineNo">667</span> try {<a name="line.667"></a>
+<span class="sourceLineNo">668</span> List<String> queues = queueStorage.getAllQueues(deadRS);<a name="line.668"></a>
+<span class="sourceLineNo">669</span> while (!queues.isEmpty()) {<a name="line.669"></a>
+<span class="sourceLineNo">670</span> Pair<String, SortedSet<String>> peer = queueStorage.claimQueue(deadRS,<a name="line.670"></a>
+<span class="sourceLineNo">671</span> queues.get(ThreadLocalRandom.current().nextInt(queues.size())), server.getServerName());<a name="line.671"></a>
+<span class="sourceLineNo">672</span> long sleep = sleepBeforeFailover / 2;<a name="line.672"></a>
+<span class="sourceLineNo">673</span> if (!peer.getSecond().isEmpty()) {<a name="line.673"></a>
+<span class="sourceLineNo">674</span> newQueues.put(peer.getFirst(), peer.getSecond());<a name="line.674"></a>
+<span class="sourceLineNo">675</span> sleep = sleepBeforeFailover;<a name="line.675"></a>
+<span class="sourceLineNo">676</span> }<a name="line.676"></a>
+<span class="sourceLineNo">677</span> try {<a name="line.677"></a>
+<span class="sourceLineNo">678</span> Thread.sleep(sleep);<a name="line.678"></a>
+<span class="sourceLineNo">679</span> } catch (InterruptedException e) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span> LOG.warn("Interrupted while waiting before transferring a queue.");<a name="line.680"></a>
+<span class="sourceLineNo">681</span> Thread.currentThread().interrupt();<a name="line.681"></a>
+<span class="sourceLineNo">682</span> }<a name="line.682"></a>
+<span class="sourceLineNo">683</span> queues = queueStorage.getAllQueues(deadRS);<a name="line.683"></a>
+<span class="sourceLineNo">684</span> }<a name="line.684"></a>
+<span class="sourceLineNo">685</span> if (queues.isEmpty()) {<a name="line.685"></a>
+<span class="sourceLineNo">686</span> queueStorage.removeReplicatorIfQueueIsEmpty(deadRS);<a name="line.686"></a>
+<span class="sourceLineNo">687</span> }<a name="line.687"></a>
+<span class="sourceLineNo">688</span> } catch (ReplicationException e) {<a name="line.688"></a>
+<span class="sourceLineNo">689</span> server.abort("Failed to claim queue from dead regionserver", e);<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> // Copying over the failed queue is completed.<a name="line.692"></a>
+<span class="sourceLineNo">693</span> if (newQueues.isEmpty()) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span> // We either didn't get the lock or the failed region server didn't have any outstanding<a name="line.694"></a>
+<span class="sourceLineNo">695</span> // WALs to replicate, so we are done.<a name="line.695"></a>
+<span class="sourceLineNo">696</span> return;<a name="line.696"></a>
+<span class="sourceLineNo">697</span> }<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span> for (Map.Entry<String, Set<String>> entry : newQueues.entrySet()) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span> String queueId = entry.getKey();<a name="line.700"></a>
+<span class="sourceLineNo">701</span> Set<String> walsSet = entry.getValue();<a name="line.701"></a>
+<span class="sourceLineNo">702</span> try {<a name="line.702"></a>
+<span class="sourceLineNo">703</span> // there is not an actual peer defined corresponding to peerId for the failover.<a name="line.703"></a>
+<span class="sourceLineNo">704</span> ReplicationQueueInfo replicationQueueInfo = new ReplicationQueueInfo(queueId);<a name="line.704"></a>
+<span class="sourceLineNo">705</span> String actualPeerId = replicationQueueInfo.getPeerId();<a name="line.705"></a>
+<span class="sourceLineNo">706</span><a name="line.706"></a>
+<span class="sourceLineNo">707</span> ReplicationPeerImpl peer = replicationPeers.getPeer(actualPeerId);<a name="line.707"></a>
+<span class="sourceLineNo">708</span> if (peer == null || !isOldPeer(actualPeerId, peer)) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span> LOG.warn("Skipping failover for peer {} of node {}, peer is null", actualPeerId,<a name="line.709"></a>
+<span class="sourceLineNo">710</span> deadRS);<a name="line.710"></a>
+<span class="sourceLineNo">711</span> abortWhenFail(() -> queueStorage.removeQueue(server.getServerName(), queueId));<a name="line.711"></a>
+<span class="sourceLineNo">712</span> continue;<a name="line.712"></a>
+<span class="sourceLineNo">713</span> }<a name="line.713"></a>
+<span class="sourceLineNo">714</span> if (server instanceof ReplicationSyncUp.DummyServer<a name="line.714"></a>
+<span class="sourceLineNo">715</span> && peer.getPeerState().equals(PeerState.DISABLED)) {<a name="line.715"></a>
+<span class="sourceLineNo">716</span> LOG.warn("Peer {} is disabled. ReplicationSyncUp tool will skip "<a name="line.716"></a>
+<span class="sourceLineNo">717</span> + "replicating data to this peer.",<a name="line.717"></a>
+<span class="sourceLineNo">718</span> actualPeerId);<a name="line.718"></a>
+<span class="sourceLineNo">719</span> continue;<a name="line.719"></a>
+<span class="sourceLineNo">720</span> }<a name="line.720"></a>
+<span class="sourceLineNo">721</span> // track sources in walsByIdRecoveredQueues<a name="line.721"></a>
+<span class="sourceLineNo">722</span> Map<String, NavigableSet<String>> walsByGroup = new HashMap<>();<a name="line.722"></a>
+<span class="sourceLineNo">723</span> walsByIdRecoveredQueues.put(queueId, walsByGroup);<a name="line.723"></a>
+<span class="sourceLineNo">724</span> for (String wal : walsSet) {<a name="line.724"></a>
+<span class="sourceLineNo">725</span> String walPrefix = AbstractFSWALProvider.getWALPrefixFromWALName(wal);<a name="line.725"></a>
+<span class="sourceLineNo">726</span> NavigableSet<String> wals = walsByGroup.get(walPrefix);<a name="line.726"></a>
+<span class="sourceLineNo">727</span> if (wals == null) {<a name="line.727"></a>
+<span class="sourceLineNo">728</span> wals = new TreeSet<>();<a name="line.728"></a>
+<span class="sourceLineNo">729</span> walsByGroup.put(walPrefix, wals);<a name="line.729"></a>
+<span class="sourceLineNo">730</span> }<a name="line.730"></a>
+<span class="sourceLineNo">731</span> wals.add(wal);<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> ReplicationSourceInterface src = createSource(queueId, peer);<a name="line.734"></a>
+<span class="sourceLineNo">735</span> // synchronized on oldsources to avoid adding recovered source for the to-be-removed peer<a name="line.735"></a>
+<span class="sourceLineNo">736</span> synchronized (oldsources) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span> peer = replicationPeers.getPeer(src.getPeerId());<a name="line.737"></a>
+<span class="sourceLineNo">738</span> if (peer == null || !isOldPeer(src.getPeerId(), peer)) {<a name="line.738"></a>
+<span class="sourceLineNo">739</span> src.terminate("Recovered queue doesn't belong to any current peer");<a name="line.739"></a>
+<span class="sourceLineNo">740</span> removeRecoveredSource(src);<a name="line.740"></a>
+<span class="sourceLineNo">741</span> continue;<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span> oldsources.add(src);<a name="line.743"></a>
+<span class="sourceLineNo">744</span> for (String wal : walsSet) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span> src.enqueueLog(new Path(oldLogDir, wal));<a name="line.745"></a>
+<span class="sourceLineNo">746</span> }<a name="line.746"></a>
+<span class="sourceLineNo">747</span> src.startup();<a name="line.747"></a>
+<span class="sourceLineNo">748</span> }<a name="line.748"></a>
+<span class="sourceLineNo">749</span> } catch (IOException e) {<a name="line.749"></a>
+<span class="sourceLineNo">750</span> // TODO manage it<a name="line.750"></a>
+<span class="sourceLineNo">751</span> LOG.error("Failed creating a source", e);<a name="line.751"></a>
+<span class="sourceLineNo">752</span> }<a name="line.752"></a>
+<span class="sourceLineNo">753</span> }<a name="line.753"></a>
+<span class="sourceLineNo">754</span> }<a name="line.754"></a>
+<span class="sourceLineNo">755</span> }<a name="line.755"></a>
+<span class="sourceLineNo">756</span><a name="line.756"></a>
+<span class="sourceLineNo">757</span> /**<a name="line.757"></a>
+<span class="sourceLineNo">758</span> * Terminate the replication on this region server<a name="line.758"></a>
+<span class="sourceLineNo">759</span> */<a name="line.759"></a>
+<span class="sourceLineNo">760</span> public void join() {<a name="line.760"></a>
+<span class="sourceLineNo">761</span> this.executor.shutdown();<a name="line.761"></a>
+<span class="sourceLineNo">762</span> for (ReplicationSourceInterface source : this.sources.values()) {<a name="line.762"></a>
+<span class="sourceLineNo">763</span> source.terminate("Region server is closing");<a name="line.763"></a>
+<span class="sourceLineNo">764</span> }<a name="line.764"></a>
+<span class="sourceLineNo">765</span> }<a name="line.765"></a>
+<span class="sourceLineNo">766</span><a name="line.766"></a>
+<span class="sourceLineNo">767</span> /**<a name="line.767"></a>
+<span class="sourceLineNo">768</span> * Get a copy of the wals of the normal sources on this rs<a name="line.768"></a>
+<span class="sourceLineNo">769</span> * @return a sorted set of wal names<a name="line.769"></a>
+<span class="sourceLineNo">770</span> */<a name="line.770"></a>
+<span class="sourceLineNo">771</span> @VisibleForTesting<a name="line.771"></a>
+<span class="sourceLineNo">772</span> public Map<String, Map<String, NavigableSet<String>>> getWALs() {<a name="line.772"></a>
+<span class="sourceLineNo">773</span> return Collections.unmodifiableMap(walsById);<a name="line.773"></a>
+<span class="sourceLineNo">774</span> }<a name="line.774"></a>
+<span class="sourceLineNo">775</span><a name="line.775"></a>
+<span class="sourceLineNo">776</span> /**<a name="line.776"></a>
+<span class="sourceLineNo">777</span> * Get a copy of the wals of the recovered sources on this rs<a name="line.777"></a>
+<span class="sourceLineNo">778</span> * @return a sorted set of wal names<a name="line.778"></a>
+<span class="sourceLineNo">779</span> */<a name="line.779"></a>
+<span class="sourceLineNo">780</span> @VisibleForTesting<a name="line.780"></a>
+<span class="sourceLineNo">781</span> Map<String, Map<String, NavigableSet<String>>> getWalsByIdRecoveredQueues() {<a name="line.781"></a>
+<span class="sourceLineNo">782</span> return Collections.unmodifiableMap(walsByIdRecoveredQueues);<a name="line.782"></a>
+<span class="sourceLineNo">783</span> }<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span> /**<a name="line.785"></a>
+<span class="sourceLineNo">786</span> * Get a list of all the normal sources of this rs<a name="line.786"></a>
+<span class="sourceLineNo">787</span> * @return list of all normal sources<a name="line.787"></a>
+<span class="sourceLineNo">788</span> */<a name="line.788"></a>
+<span class="sourceLineNo">789</span> public List<ReplicationSourceInterface> getSources() {<a name="line.789"></a>
+<span class="sourceLineNo">790</span> return new ArrayList<>(this.sources.values());<a name="line.790"></a>
+<span class="sourceLineNo">791</span> }<a name="line.791"></a>
+<span class="sourceLineNo">792</span><a name="line.792"></a>
+<span class="sourceLineNo">793</span> /**<a name="line.793"></a>
+<span class="sourceLineNo">794</span> * Get a list of all the recovered sources of this rs<a name="line.794"></a>
+<span class="sourceLineNo">795</span> * @return list of all recovered sources<a name="line.795"></a>
+<span class="sourceLineNo">796</span> */<a name="line.796"></a>
+<span class="sourceLineNo">797</span> public List<ReplicationSourceInterface> getOldSources() {<a name="line.797"></a>
+<span class="sourceLineNo">798</span> return this.oldsources;<a name="line.798"></a>
+<span class="sourceLineNo">799</span> }<a name="line.799"></a>
+<span class="sourceLineNo">800</span><a name="line.800"></a>
+<span class="sourceLineNo">801</span> /**<a name="line.801"></a>
+<span class="sourceLineNo">802</span> * Get the normal source for a given peer<a name="line.802"></a>
+<span class="sourceLineNo">803</span> * @return the normal source for the give peer if it exists, otherwise null.<a name="line.803"></a>
+<span class="sourceLineNo">804</span> */<a name="line.804"></a>
+<span class="sourceLineNo">805</span> @VisibleForTesting<a name="line.805"></a>
+<span class="sourceLineNo">806</span> public ReplicationSourceInterface getSource(String peerId) {<a name="line.806"></a>
+<span class="sourceLineNo">807</span> return this.sources.get(peerId);<a name="line.807"></a>
+<span class="sourceLineNo">808</span> }<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span> @VisibleForTesting<a name="line.810"></a>
+<span class="sourceLineNo">811</span> List<String> getAllQueues() throws IOException {<a name="line.811"></a>
+<span class="sourceLineNo">812</span> List<String> allQueues = Collections.emptyList();<a name="line.812"></a>
+<span class="sourceLineNo">813</span> try {<a name="line.813"></a>
+<span class="sourceLineNo">814</span> allQueues = queueStorage.getAllQueues(server.getServerName());<a name="line.814"></a>
+<span class="sourceLineNo">815</span> } catch (ReplicationException e) {<a name="line.815"></a>
+<span class="sourceLineNo">816</span> throw new IOException(e);<a name="line.816"></a>
+<span class="sourceLineNo">817</span> }<a name="line.817"></a>
+<span class="sourceLineNo">818</span> return allQueues;<a name="line.818"></a>
+<span class="sourceLineNo">819</span> }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span> @VisibleForTesting<a name="line.821"></a>
+<span class="sourceLineNo">822</span> int getSizeOfLatestPath() {<a name="line.822"></a>
+<span class="sourceLineNo">823</span> synchronized (latestPaths) {<a name="line.823"></a>
+<span class="sourceLineNo">824</span> return latestPaths.size();<a name="line.824"></a>
+<span class="sourceLineNo">825</span> }<a name="line.825"></a>
+<span class="sourceLineNo">826</span> }<a name="line.826"></a>
+<span class="sourceLineNo">827</span><a name="line.827"></a>
+<span class="sourceLineNo">828</span> @VisibleForTesting<a name="line.828"></a>
+<span class="sourceLineNo">829</span> public AtomicLong getTotalBufferUsed() {<a name="line.829"></a>
+<span class="sourceLineNo">830</span> return totalBufferUsed;<a name="line.830"></a>
+<span class="sourceLineNo">831</span> }<a name="line.831"></a>
+<span class="sourceLineNo">832</span><a name="line.832"></a>
+<span class="sourceLineNo">833</span> /**<a name="line.833"></a>
+<span class="sourceLineNo">834</span> * Get the directory where wals are archived<a name="line.834"></a>
+<span class="sourceLineNo">835</span> * @return the directory where wals are archived<a name="line.835"></a>
+<span class="sourceLineNo">836</span> */<a name="line.836"></a>
+<span class="sourceLineNo">837</span> public Path getOldLogDir() {<a name="line.837"></a>
+<span class="sourceLineNo">838</span> return this.oldLogDir;<a name="line.838"></a>
+<span class="sourceLineNo">839</span> }<a name="line.839"></a>
+<span class="sourceLineNo">840</span><a name="line.840"></a>
+<span class="sourceLineNo">841</span> /**<a name="line.841"></a>
+<span class="sourceLineNo">842</span> * Get the directory where wals are stored by their RSs<a name="line.842"></a>
+<span class="sourceLineNo">843</span> * @return the directory where wals are stored by their RSs<a name="line.843"></a>
+<span c
<TRUNCATED>
[25/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call() throws IOExc
<TRUNCATED>
[39/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
index d5f3932..166de59 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
@@ -32,9 +32,9 @@
<span class="sourceLineNo">024</span>import java.net.UnknownHostException;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.util.Collections;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
+<span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.TreeMap;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.util.concurrent.Callable;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.util.concurrent.CompletionService;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.util.concurrent.ExecutionException;<a name="line.32"></a>
@@ -45,473 +45,494 @@
<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import java.util.regex.Matcher;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import java.util.regex.Pattern;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.commons.lang3.StringUtils;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.fs.Path;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.Abortable;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.HConstants;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.TableName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.protobuf.ReplicationProtbufUtil;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.regionserver.ReplicationSinkManager.SinkPeer;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.slf4j.Logger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.slf4j.LoggerFactory;<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>/**<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * A {@link org.apache.hadoop.hbase.replication.ReplicationEndpoint}<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * implementation for replicating to another HBase cluster.<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * For the slave cluster it selects a random number of peers<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * using a replication ratio. For example, if replication ration = 0.1<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * and slave cluster has 100 region servers, 10 will be selected.<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * <p><a name="line.73"></a>
-<span class="sourceLineNo">074</span> * A stream is considered down when we cannot contact a region server on the<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * peer cluster for more than 55 seconds by default.<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * </p><a name="line.76"></a>
-<span class="sourceLineNo">077</span> */<a name="line.77"></a>
-<span class="sourceLineNo">078</span>@InterfaceAudience.Private<a name="line.78"></a>
-<span class="sourceLineNo">079</span>public class HBaseInterClusterReplicationEndpoint extends HBaseReplicationEndpoint {<a name="line.79"></a>
-<span class="sourceLineNo">080</span> private static final Logger LOG =<a name="line.80"></a>
-<span class="sourceLineNo">081</span> LoggerFactory.getLogger(HBaseInterClusterReplicationEndpoint.class);<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span> private static final long DEFAULT_MAX_TERMINATION_WAIT_MULTIPLIER = 2;<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span> private ClusterConnection conn;<a name="line.85"></a>
-<span class="sourceLineNo">086</span> private Configuration localConf;<a name="line.86"></a>
-<span class="sourceLineNo">087</span> private Configuration conf;<a name="line.87"></a>
-<span class="sourceLineNo">088</span> // How long should we sleep for each retry<a name="line.88"></a>
-<span class="sourceLineNo">089</span> private long sleepForRetries;<a name="line.89"></a>
-<span class="sourceLineNo">090</span> // Maximum number of retries before taking bold actions<a name="line.90"></a>
-<span class="sourceLineNo">091</span> private int maxRetriesMultiplier;<a name="line.91"></a>
-<span class="sourceLineNo">092</span> // Socket timeouts require even bolder actions since we don't want to DDOS<a name="line.92"></a>
-<span class="sourceLineNo">093</span> private int socketTimeoutMultiplier;<a name="line.93"></a>
-<span class="sourceLineNo">094</span> // Amount of time for shutdown to wait for all tasks to complete<a name="line.94"></a>
-<span class="sourceLineNo">095</span> private long maxTerminationWait;<a name="line.95"></a>
-<span class="sourceLineNo">096</span> // Size limit for replication RPCs, in bytes<a name="line.96"></a>
-<span class="sourceLineNo">097</span> private int replicationRpcLimit;<a name="line.97"></a>
-<span class="sourceLineNo">098</span> //Metrics for this source<a name="line.98"></a>
-<span class="sourceLineNo">099</span> private MetricsSource metrics;<a name="line.99"></a>
-<span class="sourceLineNo">100</span> // Handles connecting to peer region servers<a name="line.100"></a>
-<span class="sourceLineNo">101</span> private ReplicationSinkManager replicationSinkMgr;<a name="line.101"></a>
-<span class="sourceLineNo">102</span> private boolean peersSelected = false;<a name="line.102"></a>
-<span class="sourceLineNo">103</span> private String replicationClusterId = "";<a name="line.103"></a>
-<span class="sourceLineNo">104</span> private ThreadPoolExecutor exec;<a name="line.104"></a>
-<span class="sourceLineNo">105</span> private int maxThreads;<a name="line.105"></a>
-<span class="sourceLineNo">106</span> private Path baseNamespaceDir;<a name="line.106"></a>
-<span class="sourceLineNo">107</span> private Path hfileArchiveDir;<a name="line.107"></a>
-<span class="sourceLineNo">108</span> private boolean replicationBulkLoadDataEnabled;<a name="line.108"></a>
-<span class="sourceLineNo">109</span> private Abortable abortable;<a name="line.109"></a>
-<span class="sourceLineNo">110</span> private boolean dropOnDeletedTables;<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span> @Override<a name="line.112"></a>
-<span class="sourceLineNo">113</span> public void init(Context context) throws IOException {<a name="line.113"></a>
-<span class="sourceLineNo">114</span> super.init(context);<a name="line.114"></a>
-<span class="sourceLineNo">115</span> this.conf = HBaseConfiguration.create(ctx.getConfiguration());<a name="line.115"></a>
-<span class="sourceLineNo">116</span> this.localConf = HBaseConfiguration.create(ctx.getLocalConfiguration());<a name="line.116"></a>
-<span class="sourceLineNo">117</span> decorateConf();<a name="line.117"></a>
-<span class="sourceLineNo">118</span> this.maxRetriesMultiplier = this.conf.getInt("replication.source.maxretriesmultiplier", 300);<a name="line.118"></a>
-<span class="sourceLineNo">119</span> this.socketTimeoutMultiplier = this.conf.getInt("replication.source.socketTimeoutMultiplier",<a name="line.119"></a>
-<span class="sourceLineNo">120</span> maxRetriesMultiplier);<a name="line.120"></a>
-<span class="sourceLineNo">121</span> // A Replicator job is bound by the RPC timeout. We will wait this long for all Replicator<a name="line.121"></a>
-<span class="sourceLineNo">122</span> // tasks to terminate when doStop() is called.<a name="line.122"></a>
-<span class="sourceLineNo">123</span> long maxTerminationWaitMultiplier = this.conf.getLong(<a name="line.123"></a>
-<span class="sourceLineNo">124</span> "replication.source.maxterminationmultiplier",<a name="line.124"></a>
-<span class="sourceLineNo">125</span> DEFAULT_MAX_TERMINATION_WAIT_MULTIPLIER);<a name="line.125"></a>
-<span class="sourceLineNo">126</span> this.maxTerminationWait = maxTerminationWaitMultiplier *<a name="line.126"></a>
-<span class="sourceLineNo">127</span> this.conf.getLong(HConstants.HBASE_RPC_TIMEOUT_KEY, HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.127"></a>
-<span class="sourceLineNo">128</span> // TODO: This connection is replication specific or we should make it particular to<a name="line.128"></a>
-<span class="sourceLineNo">129</span> // replication and make replication specific settings such as compression or codec to use<a name="line.129"></a>
-<span class="sourceLineNo">130</span> // passing Cells.<a name="line.130"></a>
-<span class="sourceLineNo">131</span> this.conn = (ClusterConnection) ConnectionFactory.createConnection(this.conf);<a name="line.131"></a>
-<span class="sourceLineNo">132</span> this.sleepForRetries =<a name="line.132"></a>
-<span class="sourceLineNo">133</span> this.conf.getLong("replication.source.sleepforretries", 1000);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> this.metrics = context.getMetrics();<a name="line.134"></a>
-<span class="sourceLineNo">135</span> // ReplicationQueueInfo parses the peerId out of the znode for us<a name="line.135"></a>
-<span class="sourceLineNo">136</span> this.replicationSinkMgr = new ReplicationSinkManager(conn, ctx.getPeerId(), this, this.conf);<a name="line.136"></a>
-<span class="sourceLineNo">137</span> // per sink thread pool<a name="line.137"></a>
-<span class="sourceLineNo">138</span> this.maxThreads = this.conf.getInt(HConstants.REPLICATION_SOURCE_MAXTHREADS_KEY,<a name="line.138"></a>
-<span class="sourceLineNo">139</span> HConstants.REPLICATION_SOURCE_MAXTHREADS_DEFAULT);<a name="line.139"></a>
-<span class="sourceLineNo">140</span> this.exec = new ThreadPoolExecutor(maxThreads, maxThreads, 60, TimeUnit.SECONDS,<a name="line.140"></a>
-<span class="sourceLineNo">141</span> new LinkedBlockingQueue<>());<a name="line.141"></a>
-<span class="sourceLineNo">142</span> this.exec.allowCoreThreadTimeOut(true);<a name="line.142"></a>
-<span class="sourceLineNo">143</span> this.abortable = ctx.getAbortable();<a name="line.143"></a>
-<span class="sourceLineNo">144</span> // Set the size limit for replication RPCs to 95% of the max request size.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> // We could do with less slop if we have an accurate estimate of encoded size. Being<a name="line.145"></a>
-<span class="sourceLineNo">146</span> // conservative for now.<a name="line.146"></a>
-<span class="sourceLineNo">147</span> this.replicationRpcLimit = (int)(0.95 * conf.getLong(RpcServer.MAX_REQUEST_SIZE,<a name="line.147"></a>
-<span class="sourceLineNo">148</span> RpcServer.DEFAULT_MAX_REQUEST_SIZE));<a name="line.148"></a>
-<span class="sourceLineNo">149</span> this.dropOnDeletedTables =<a name="line.149"></a>
-<span class="sourceLineNo">150</span> this.conf.getBoolean(HConstants.REPLICATION_DROP_ON_DELETED_TABLE_KEY, false);<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span> this.replicationBulkLoadDataEnabled =<a name="line.152"></a>
-<span class="sourceLineNo">153</span> conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,<a name="line.153"></a>
-<span class="sourceLineNo">154</span> HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.154"></a>
-<span class="sourceLineNo">155</span> if (this.replicationBulkLoadDataEnabled) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> replicationClusterId = this.conf.get(HConstants.REPLICATION_CLUSTER_ID);<a name="line.156"></a>
-<span class="sourceLineNo">157</span> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> // Construct base namespace directory and hfile archive directory path<a name="line.158"></a>
-<span class="sourceLineNo">159</span> Path rootDir = FSUtils.getRootDir(conf);<a name="line.159"></a>
-<span class="sourceLineNo">160</span> Path baseNSDir = new Path(HConstants.BASE_NAMESPACE_DIR);<a name="line.160"></a>
-<span class="sourceLineNo">161</span> baseNamespaceDir = new Path(rootDir, baseNSDir);<a name="line.161"></a>
-<span class="sourceLineNo">162</span> hfileArchiveDir = new Path(rootDir, new Path(HConstants.HFILE_ARCHIVE_DIRECTORY, baseNSDir));<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> private void decorateConf() {<a name="line.165"></a>
-<span class="sourceLineNo">166</span> String replicationCodec = this.conf.get(HConstants.REPLICATION_CODEC_CONF_KEY);<a name="line.166"></a>
-<span class="sourceLineNo">167</span> if (StringUtils.isNotEmpty(replicationCodec)) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span> this.conf.set(HConstants.RPC_CODEC_CONF_KEY, replicationCodec);<a name="line.168"></a>
-<span class="sourceLineNo">169</span> }<a name="line.169"></a>
-<span class="sourceLineNo">170</span> }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span> private void connectToPeers() {<a name="line.172"></a>
-<span class="sourceLineNo">173</span> getRegionServers();<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span> int sleepMultiplier = 1;<a name="line.175"></a>
+<span class="sourceLineNo">040</span>import java.util.stream.Collectors;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.stream.Stream;<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.commons.lang3.StringUtils;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.conf.Configuration;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.fs.Path;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.Abortable;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.HConstants;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.TableName;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.protobuf.ReplicationProtbufUtil;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.regionserver.ReplicationSinkManager.SinkPeer;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.slf4j.Logger;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.slf4j.LoggerFactory;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>/**<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * A {@link org.apache.hadoop.hbase.replication.ReplicationEndpoint}<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * implementation for replicating to another HBase cluster.<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * For the slave cluster it selects a random number of peers<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * using a replication ratio. For example, if replication ration = 0.1<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * and slave cluster has 100 region servers, 10 will be selected.<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * <p><a name="line.76"></a>
+<span class="sourceLineNo">077</span> * A stream is considered down when we cannot contact a region server on the<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * peer cluster for more than 55 seconds by default.<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * </p><a name="line.79"></a>
+<span class="sourceLineNo">080</span> */<a name="line.80"></a>
+<span class="sourceLineNo">081</span>@InterfaceAudience.Private<a name="line.81"></a>
+<span class="sourceLineNo">082</span>public class HBaseInterClusterReplicationEndpoint extends HBaseReplicationEndpoint {<a name="line.82"></a>
+<span class="sourceLineNo">083</span> private static final Logger LOG =<a name="line.83"></a>
+<span class="sourceLineNo">084</span> LoggerFactory.getLogger(HBaseInterClusterReplicationEndpoint.class);<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span> private static final long DEFAULT_MAX_TERMINATION_WAIT_MULTIPLIER = 2;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span> private ClusterConnection conn;<a name="line.88"></a>
+<span class="sourceLineNo">089</span> private Configuration localConf;<a name="line.89"></a>
+<span class="sourceLineNo">090</span> private Configuration conf;<a name="line.90"></a>
+<span class="sourceLineNo">091</span> // How long should we sleep for each retry<a name="line.91"></a>
+<span class="sourceLineNo">092</span> private long sleepForRetries;<a name="line.92"></a>
+<span class="sourceLineNo">093</span> // Maximum number of retries before taking bold actions<a name="line.93"></a>
+<span class="sourceLineNo">094</span> private int maxRetriesMultiplier;<a name="line.94"></a>
+<span class="sourceLineNo">095</span> // Socket timeouts require even bolder actions since we don't want to DDOS<a name="line.95"></a>
+<span class="sourceLineNo">096</span> private int socketTimeoutMultiplier;<a name="line.96"></a>
+<span class="sourceLineNo">097</span> // Amount of time for shutdown to wait for all tasks to complete<a name="line.97"></a>
+<span class="sourceLineNo">098</span> private long maxTerminationWait;<a name="line.98"></a>
+<span class="sourceLineNo">099</span> // Size limit for replication RPCs, in bytes<a name="line.99"></a>
+<span class="sourceLineNo">100</span> private int replicationRpcLimit;<a name="line.100"></a>
+<span class="sourceLineNo">101</span> //Metrics for this source<a name="line.101"></a>
+<span class="sourceLineNo">102</span> private MetricsSource metrics;<a name="line.102"></a>
+<span class="sourceLineNo">103</span> // Handles connecting to peer region servers<a name="line.103"></a>
+<span class="sourceLineNo">104</span> private ReplicationSinkManager replicationSinkMgr;<a name="line.104"></a>
+<span class="sourceLineNo">105</span> private boolean peersSelected = false;<a name="line.105"></a>
+<span class="sourceLineNo">106</span> private String replicationClusterId = "";<a name="line.106"></a>
+<span class="sourceLineNo">107</span> private ThreadPoolExecutor exec;<a name="line.107"></a>
+<span class="sourceLineNo">108</span> private int maxThreads;<a name="line.108"></a>
+<span class="sourceLineNo">109</span> private Path baseNamespaceDir;<a name="line.109"></a>
+<span class="sourceLineNo">110</span> private Path hfileArchiveDir;<a name="line.110"></a>
+<span class="sourceLineNo">111</span> private boolean replicationBulkLoadDataEnabled;<a name="line.111"></a>
+<span class="sourceLineNo">112</span> private Abortable abortable;<a name="line.112"></a>
+<span class="sourceLineNo">113</span> private boolean dropOnDeletedTables;<a name="line.113"></a>
+<span class="sourceLineNo">114</span> private boolean isSerial = false;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> @Override<a name="line.116"></a>
+<span class="sourceLineNo">117</span> public void init(Context context) throws IOException {<a name="line.117"></a>
+<span class="sourceLineNo">118</span> super.init(context);<a name="line.118"></a>
+<span class="sourceLineNo">119</span> this.conf = HBaseConfiguration.create(ctx.getConfiguration());<a name="line.119"></a>
+<span class="sourceLineNo">120</span> this.localConf = HBaseConfiguration.create(ctx.getLocalConfiguration());<a name="line.120"></a>
+<span class="sourceLineNo">121</span> decorateConf();<a name="line.121"></a>
+<span class="sourceLineNo">122</span> this.maxRetriesMultiplier = this.conf.getInt("replication.source.maxretriesmultiplier", 300);<a name="line.122"></a>
+<span class="sourceLineNo">123</span> this.socketTimeoutMultiplier = this.conf.getInt("replication.source.socketTimeoutMultiplier",<a name="line.123"></a>
+<span class="sourceLineNo">124</span> maxRetriesMultiplier);<a name="line.124"></a>
+<span class="sourceLineNo">125</span> // A Replicator job is bound by the RPC timeout. We will wait this long for all Replicator<a name="line.125"></a>
+<span class="sourceLineNo">126</span> // tasks to terminate when doStop() is called.<a name="line.126"></a>
+<span class="sourceLineNo">127</span> long maxTerminationWaitMultiplier = this.conf.getLong(<a name="line.127"></a>
+<span class="sourceLineNo">128</span> "replication.source.maxterminationmultiplier",<a name="line.128"></a>
+<span class="sourceLineNo">129</span> DEFAULT_MAX_TERMINATION_WAIT_MULTIPLIER);<a name="line.129"></a>
+<span class="sourceLineNo">130</span> this.maxTerminationWait = maxTerminationWaitMultiplier *<a name="line.130"></a>
+<span class="sourceLineNo">131</span> this.conf.getLong(HConstants.HBASE_RPC_TIMEOUT_KEY, HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.131"></a>
+<span class="sourceLineNo">132</span> // TODO: This connection is replication specific or we should make it particular to<a name="line.132"></a>
+<span class="sourceLineNo">133</span> // replication and make replication specific settings such as compression or codec to use<a name="line.133"></a>
+<span class="sourceLineNo">134</span> // passing Cells.<a name="line.134"></a>
+<span class="sourceLineNo">135</span> this.conn = (ClusterConnection) ConnectionFactory.createConnection(this.conf);<a name="line.135"></a>
+<span class="sourceLineNo">136</span> this.sleepForRetries =<a name="line.136"></a>
+<span class="sourceLineNo">137</span> this.conf.getLong("replication.source.sleepforretries", 1000);<a name="line.137"></a>
+<span class="sourceLineNo">138</span> this.metrics = context.getMetrics();<a name="line.138"></a>
+<span class="sourceLineNo">139</span> // ReplicationQueueInfo parses the peerId out of the znode for us<a name="line.139"></a>
+<span class="sourceLineNo">140</span> this.replicationSinkMgr = new ReplicationSinkManager(conn, ctx.getPeerId(), this, this.conf);<a name="line.140"></a>
+<span class="sourceLineNo">141</span> // per sink thread pool<a name="line.141"></a>
+<span class="sourceLineNo">142</span> this.maxThreads = this.conf.getInt(HConstants.REPLICATION_SOURCE_MAXTHREADS_KEY,<a name="line.142"></a>
+<span class="sourceLineNo">143</span> HConstants.REPLICATION_SOURCE_MAXTHREADS_DEFAULT);<a name="line.143"></a>
+<span class="sourceLineNo">144</span> this.exec = new ThreadPoolExecutor(maxThreads, maxThreads, 60, TimeUnit.SECONDS,<a name="line.144"></a>
+<span class="sourceLineNo">145</span> new LinkedBlockingQueue<>());<a name="line.145"></a>
+<span class="sourceLineNo">146</span> this.exec.allowCoreThreadTimeOut(true);<a name="line.146"></a>
+<span class="sourceLineNo">147</span> this.abortable = ctx.getAbortable();<a name="line.147"></a>
+<span class="sourceLineNo">148</span> // Set the size limit for replication RPCs to 95% of the max request size.<a name="line.148"></a>
+<span class="sourceLineNo">149</span> // We could do with less slop if we have an accurate estimate of encoded size. Being<a name="line.149"></a>
+<span class="sourceLineNo">150</span> // conservative for now.<a name="line.150"></a>
+<span class="sourceLineNo">151</span> this.replicationRpcLimit = (int)(0.95 * conf.getLong(RpcServer.MAX_REQUEST_SIZE,<a name="line.151"></a>
+<span class="sourceLineNo">152</span> RpcServer.DEFAULT_MAX_REQUEST_SIZE));<a name="line.152"></a>
+<span class="sourceLineNo">153</span> this.dropOnDeletedTables =<a name="line.153"></a>
+<span class="sourceLineNo">154</span> this.conf.getBoolean(HConstants.REPLICATION_DROP_ON_DELETED_TABLE_KEY, false);<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span> this.replicationBulkLoadDataEnabled =<a name="line.156"></a>
+<span class="sourceLineNo">157</span> conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,<a name="line.157"></a>
+<span class="sourceLineNo">158</span> HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.158"></a>
+<span class="sourceLineNo">159</span> if (this.replicationBulkLoadDataEnabled) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span> replicationClusterId = this.conf.get(HConstants.REPLICATION_CLUSTER_ID);<a name="line.160"></a>
+<span class="sourceLineNo">161</span> }<a name="line.161"></a>
+<span class="sourceLineNo">162</span> // Construct base namespace directory and hfile archive directory path<a name="line.162"></a>
+<span class="sourceLineNo">163</span> Path rootDir = FSUtils.getRootDir(conf);<a name="line.163"></a>
+<span class="sourceLineNo">164</span> Path baseNSDir = new Path(HConstants.BASE_NAMESPACE_DIR);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> baseNamespaceDir = new Path(rootDir, baseNSDir);<a name="line.165"></a>
+<span class="sourceLineNo">166</span> hfileArchiveDir = new Path(rootDir, new Path(HConstants.HFILE_ARCHIVE_DIRECTORY, baseNSDir));<a name="line.166"></a>
+<span class="sourceLineNo">167</span> isSerial = context.getPeerConfig().isSerial();<a name="line.167"></a>
+<span class="sourceLineNo">168</span> }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span> private void decorateConf() {<a name="line.170"></a>
+<span class="sourceLineNo">171</span> String replicationCodec = this.conf.get(HConstants.REPLICATION_CODEC_CONF_KEY);<a name="line.171"></a>
+<span class="sourceLineNo">172</span> if (StringUtils.isNotEmpty(replicationCodec)) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> this.conf.set(HConstants.RPC_CODEC_CONF_KEY, replicationCodec);<a name="line.173"></a>
+<span class="sourceLineNo">174</span> }<a name="line.174"></a>
+<span class="sourceLineNo">175</span> }<a name="line.175"></a>
<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span> // Connect to peer cluster first, unless we have to stop<a name="line.177"></a>
-<span class="sourceLineNo">178</span> while (this.isRunning() && replicationSinkMgr.getNumSinks() == 0) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> replicationSinkMgr.chooseSinks();<a name="line.179"></a>
-<span class="sourceLineNo">180</span> if (this.isRunning() && replicationSinkMgr.getNumSinks() == 0) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span> if (sleepForRetries("Waiting for peers", sleepMultiplier)) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span> sleepMultiplier++;<a name="line.182"></a>
-<span class="sourceLineNo">183</span> }<a name="line.183"></a>
-<span class="sourceLineNo">184</span> }<a name="line.184"></a>
-<span class="sourceLineNo">185</span> }<a name="line.185"></a>
-<span class="sourceLineNo">186</span> }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span> /**<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * Do the sleeping logic<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * @param msg Why we sleep<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * @return True if <code>sleepMultiplier</code> is &lt; <code>maxRetriesMultiplier</code><a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span> protected boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span> try {<a name="line.195"></a>
-<span class="sourceLineNo">196</span> if (LOG.isTraceEnabled()) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span> LOG.trace(msg + ", sleeping " + sleepForRetries + " times " + sleepMultiplier);<a name="line.197"></a>
-<span class="sourceLineNo">198</span> }<a name="line.198"></a>
-<span class="sourceLineNo">199</span> Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.199"></a>
-<span class="sourceLineNo">200</span> } catch (InterruptedException e) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> LOG.debug("Interrupted while sleeping between retries");<a name="line.201"></a>
-<span class="sourceLineNo">202</span> }<a name="line.202"></a>
-<span class="sourceLineNo">203</span> return sleepMultiplier < maxRetriesMultiplier;<a name="line.203"></a>
-<span class="sourceLineNo">204</span> }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span> private List<List<Entry>> createBatches(final List<Entry> entries) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span> int numSinks = Math.max(replicationSinkMgr.getNumSinks(), 1);<a name="line.207"></a>
-<span class="sourceLineNo">208</span> int n = Math.min(Math.min(this.maxThreads, entries.size()/100+1), numSinks);<a name="line.208"></a>
-<span class="sourceLineNo">209</span> // Maintains the current batch for a given partition index<a name="line.209"></a>
-<span class="sourceLineNo">210</span> Map<Integer, List<Entry>> entryMap = new HashMap<>(n);<a name="line.210"></a>
-<span class="sourceLineNo">211</span> List<List<Entry>> entryLists = new ArrayList<>();<a name="line.211"></a>
-<span class="sourceLineNo">212</span> int[] sizes = new int[n];<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span> for (int i = 0; i < n; i++) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span> entryMap.put(i, new ArrayList<Entry>(entries.size()/n+1));<a name="line.215"></a>
-<span class="sourceLineNo">216</span> }<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span> for (Entry e: entries) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span> int index = Math.abs(Bytes.hashCode(e.getKey().getEncodedRegionName())%n);<a name="line.219"></a>
-<span class="sourceLineNo">220</span> int entrySize = (int)e.getKey().estimatedSerializedSizeOf() +<a name="line.220"></a>
-<span class="sourceLineNo">221</span> (int)e.getEdit().estimatedSerializedSizeOf();<a name="line.221"></a>
-<span class="sourceLineNo">222</span> // If this batch is oversized, add it to final list and initialize a new empty batch<a name="line.222"></a>
-<span class="sourceLineNo">223</span> if (sizes[index] > 0 /* must include at least one entry */ &&<a name="line.223"></a>
-<span class="sourceLineNo">224</span> sizes[index] + entrySize > replicationRpcLimit) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span> entryLists.add(entryMap.get(index));<a name="line.225"></a>
-<span class="sourceLineNo">226</span> entryMap.put(index, new ArrayList<Entry>());<a name="line.226"></a>
-<span class="sourceLineNo">227</span> sizes[index] = 0;<a name="line.227"></a>
-<span class="sourceLineNo">228</span> }<a name="line.228"></a>
-<span class="sourceLineNo">229</span> entryMap.get(index).add(e);<a name="line.229"></a>
-<span class="sourceLineNo">230</span> sizes[index] += entrySize;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> }<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span> entryLists.addAll(entryMap.values());<a name="line.233"></a>
-<span class="sourceLineNo">234</span> return entryLists;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> }<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span> private TableName parseTable(String msg) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span> // ... TableNotFoundException: '<table>'/n...<a name="line.238"></a>
-<span class="sourceLineNo">239</span> Pattern p = Pattern.compile("TableNotFoundException: \\'([\\S]*)\\'");<a name="line.239"></a>
-<span class="sourceLineNo">240</span> Matcher m = p.matcher(msg);<a name="line.240"></a>
-<span class="sourceLineNo">241</span> if (m.find()) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span> String table = m.group(1);<a name="line.242"></a>
-<span class="sourceLineNo">243</span> try {<a name="line.243"></a>
-<span class="sourceLineNo">244</span> // double check that table is a valid table name<a name="line.244"></a>
-<span class="sourceLineNo">245</span> TableName.valueOf(TableName.isLegalFullyQualifiedTableName(Bytes.toBytes(table)));<a name="line.245"></a>
-<span class="sourceLineNo">246</span> return TableName.valueOf(table);<a name="line.246"></a>
-<span class="sourceLineNo">247</span> } catch (IllegalArgumentException ignore) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span> }<a name="line.248"></a>
-<span class="sourceLineNo">249</span> }<a name="line.249"></a>
-<span class="sourceLineNo">250</span> return null;<a name="line.250"></a>
-<span class="sourceLineNo">251</span> }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span> // Filter a set of batches by TableName<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private List<List<Entry>> filterBatches(final List<List<Entry>> oldEntryList, TableName table) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span> List<List<Entry>> entryLists = new ArrayList<>();<a name="line.255"></a>
-<span class="sourceLineNo">256</span> for (List<Entry> entries : oldEntryList) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span> ArrayList<Entry> thisList = new ArrayList<Entry>(entries.size());<a name="line.257"></a>
-<span class="sourceLineNo">258</span> entryLists.add(thisList);<a name="line.258"></a>
-<span class="sourceLineNo">259</span> for (Entry e : entries) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> if (!e.getKey().getTableName().equals(table)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span> thisList.add(e);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> }<a name="line.262"></a>
-<span class="sourceLineNo">263</span> }<a name="line.263"></a>
-<span class="sourceLineNo">264</span> }<a name="line.264"></a>
-<span class="sourceLineNo">265</span> return entryLists;<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> private void reconnectToPeerCluster() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> ClusterConnection connection = null;<a name="line.269"></a>
-<span class="sourceLineNo">270</span> try {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> connection = (ClusterConnection) ConnectionFactory.createConnection(this.conf);<a name="line.271"></a>
-<span class="sourceLineNo">272</span> } catch (IOException ioe) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span> LOG.warn("Failed to create connection for peer cluster", ioe);<a name="line.273"></a>
+<span class="sourceLineNo">177</span> private void connectToPeers() {<a name="line.177"></a>
+<span class="sourceLineNo">178</span> getRegionServers();<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span> int sleepMultiplier = 1;<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span> // Connect to peer cluster first, unless we have to stop<a name="line.182"></a>
+<span class="sourceLineNo">183</span> while (this.isRunning() && replicationSinkMgr.getNumSinks() == 0) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span> replicationSinkMgr.chooseSinks();<a name="line.184"></a>
+<span class="sourceLineNo">185</span> if (this.isRunning() && replicationSinkMgr.getNumSinks() == 0) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span> if (sleepForRetries("Waiting for peers", sleepMultiplier)) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span> sleepMultiplier++;<a name="line.187"></a>
+<span class="sourceLineNo">188</span> }<a name="line.188"></a>
+<span class="sourceLineNo">189</span> }<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><a name="line.192"></a>
+<span class="sourceLineNo">193</span> /**<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * Do the sleeping logic<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * @param msg Why we sleep<a name="line.195"></a>
+<span class="sourceLineNo">196</span> * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * @return True if <code>sleepMultiplier</code> is &lt; <code>maxRetriesMultiplier</code><a name="line.197"></a>
+<span class="sourceLineNo">198</span> */<a name="line.198"></a>
+<span class="sourceLineNo">199</span> protected boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span> try {<a name="line.200"></a>
+<span class="sourceLineNo">201</span> if (LOG.isTraceEnabled()) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span> LOG.trace(msg + ", sleeping " + sleepForRetries + " times " + sleepMultiplier);<a name="line.202"></a>
+<span class="sourceLineNo">203</span> }<a name="line.203"></a>
+<span class="sourceLineNo">204</span> Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.204"></a>
+<span class="sourceLineNo">205</span> } catch (InterruptedException e) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> LOG.debug("Interrupted while sleeping between retries");<a name="line.206"></a>
+<span class="sourceLineNo">207</span> }<a name="line.207"></a>
+<span class="sourceLineNo">208</span> return sleepMultiplier < maxRetriesMultiplier;<a name="line.208"></a>
+<span class="sourceLineNo">209</span> }<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span> private int getEstimatedEntrySize(Entry e) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span> long size = e.getKey().estimatedSerializedSizeOf() + e.getEdit().estimatedSerializedSizeOf();<a name="line.212"></a>
+<span class="sourceLineNo">213</span> return (int) size;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span> private List<List<Entry>> createParallelBatches(final List<Entry> entries) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span> int numSinks = Math.max(replicationSinkMgr.getNumSinks(), 1);<a name="line.217"></a>
+<span class="sourceLineNo">218</span> int n = Math.min(Math.min(this.maxThreads, entries.size() / 100 + 1), numSinks);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> List<List<Entry>> entryLists =<a name="line.219"></a>
+<span class="sourceLineNo">220</span> Stream.generate(ArrayList<Entry>::new).limit(n).collect(Collectors.toList());<a name="line.220"></a>
+<span class="sourceLineNo">221</span> int[] sizes = new int[n];<a name="line.221"></a>
+<span class="sourceLineNo">222</span> for (Entry e : entries) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span> int index = Math.abs(Bytes.hashCode(e.getKey().getEncodedRegionName()) % n);<a name="line.223"></a>
+<span class="sourceLineNo">224</span> int entrySize = getEstimatedEntrySize(e);<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // If this batch has at least one entry and is over sized, move it to the tail of list and<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // initialize the entryLists[index] to be a empty list.<a name="line.226"></a>
+<span class="sourceLineNo">227</span> if (sizes[index] > 0 && sizes[index] + entrySize > replicationRpcLimit) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span> entryLists.add(entryLists.get(index));<a name="line.228"></a>
+<span class="sourceLineNo">229</span> entryLists.set(index, new ArrayList<>());<a name="line.229"></a>
+<span class="sourceLineNo">230</span> sizes[index] = 0;<a name="line.230"></a>
+<span class="sourceLineNo">231</span> }<a name="line.231"></a>
+<span class="sourceLineNo">232</span> entryLists.get(index).add(e);<a name="line.232"></a>
+<span class="sourceLineNo">233</span> sizes[index] += entrySize;<a name="line.233"></a>
+<span class="sourceLineNo">234</span> }<a name="line.234"></a>
+<span class="sourceLineNo">235</span> return entryLists;<a name="line.235"></a>
+<span class="sourceLineNo">236</span> }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span> private List<List<Entry>> createSerialBatches(final List<Entry> entries) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span> Map<byte[], List<Entry>> regionEntries = new TreeMap<>(Bytes.BYTES_COMPARATOR);<a name="line.239"></a>
+<span class="sourceLineNo">240</span> for (Entry e : entries) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span> regionEntries.computeIfAbsent(e.getKey().getEncodedRegionName(), key -> new ArrayList<>())<a name="line.241"></a>
+<span class="sourceLineNo">242</span> .add(e);<a name="line.242"></a>
+<span class="sourceLineNo">243</span> }<a name="line.243"></a>
+<span class="sourceLineNo">244</span> return new ArrayList<>(regionEntries.values());<a name="line.244"></a>
+<span class="sourceLineNo">245</span> }<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> * Divide the entries into multiple batches, so that we can replicate each batch in a thread pool<a name="line.248"></a>
+<span class="sourceLineNo">249</span> * concurrently. Note that, for serial replication, we need to make sure that entries from the<a name="line.249"></a>
+<span class="sourceLineNo">250</span> * same region to be replicated serially, so entries from the same region consist of a batch, and<a name="line.250"></a>
+<span class="sourceLineNo">251</span> * we will divide a batch into several batches by replicationRpcLimit in method<a name="line.251"></a>
+<span class="sourceLineNo">252</span> * serialReplicateRegionEntries()<a name="line.252"></a>
+<span class="sourceLineNo">253</span> */<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private List<List<Entry>> createBatches(final List<Entry> entries) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span> if (isSerial) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span> return createSerialBatches(entries);<a name="line.256"></a>
+<span class="sourceLineNo">257</span> } else {<a name="line.257"></a>
+<span class="sourceLineNo">258</span> return createParallelBatches(entries);<a name="line.258"></a>
+<span class="sourceLineNo">259</span> }<a name="line.259"></a>
+<span class="sourceLineNo">260</span> }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span> private TableName parseTable(String msg) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> // ... TableNotFoundException: '<table>'/n...<a name="line.263"></a>
+<span class="sourceLineNo">264</span> Pattern p = Pattern.compile("TableNotFoundException: '([\\S]*)'");<a name="line.264"></a>
+<span class="sourceLineNo">265</span> Matcher m = p.matcher(msg);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> if (m.find()) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span> String table = m.group(1);<a name="line.267"></a>
+<span class="sourceLineNo">268</span> try {<a name="line.268"></a>
+<span class="sourceLineNo">269</span> // double check that table is a valid table name<a name="line.269"></a>
+<span class="sourceLineNo">270</span> TableName.valueOf(TableName.isLegalFullyQualifiedTableName(Bytes.toBytes(table)));<a name="line.270"></a>
+<span class="sourceLineNo">271</span> return TableName.valueOf(table);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> } catch (IllegalArgumentException ignore) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> }<a name="line.273"></a>
<span class="sourceLineNo">274</span> }<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (connection != null) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> this.conn = connection;<a name="line.276"></a>
-<span class="sourceLineNo">277</span> }<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span> /**<a name="line.280"></a>
-<span class="sourceLineNo">281</span> * Do the shipping logic<a name="line.281"></a>
-<span class="sourceLineNo">282</span> */<a name="line.282"></a>
-<span class="sourceLineNo">283</span> @Override<a name="line.283"></a>
-<span class="sourceLineNo">284</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span> CompletionService<Integer> pool = new ExecutorCompletionService<>(this.exec);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> List<List<Entry>> batches;<a name="line.286"></a>
-<span class="sourceLineNo">287</span> String walGroupId = replicateContext.getWalGroupId();<a name="line.287"></a>
-<span class="sourceLineNo">288</span> int sleepMultiplier = 1;<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span> if (!peersSelected && this.isRunning()) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span> connectToPeers();<a name="line.291"></a>
-<span class="sourceLineNo">292</span> peersSelected = true;<a name="line.292"></a>
-<span class="sourceLineNo">293</span> }<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span> int numSinks = replicationSinkMgr.getNumSinks();<a name="line.295"></a>
-<span class="sourceLineNo">296</span> if (numSinks == 0) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span> LOG.warn("No replication sinks found, returning without replicating. The source should retry"<a name="line.297"></a>
-<span class="sourceLineNo">298</span> + " with the same set of edits.");<a name="line.298"></a>
-<span class="sourceLineNo">299</span> return false;<a name="line.299"></a>
-<span class="sourceLineNo">300</span> }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span> batches = createBatches(replicateContext.getEntries());<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span> while (this.isRunning() && !exec.isShutdown()) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span> if (!isPeerEnabled()) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span> if (sleepForRetries("Replication is disabled", sleepMultiplier)) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> sleepMultiplier++;<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span> continue;<a name="line.309"></a>
-<span class="sourceLineNo">310</span> }<a name="line.310"></a>
-<span class="sourceLineNo">311</span> if (this.conn == null || this.conn.isClosed()) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span> reconnectToPeerCluster();<a name="line.312"></a>
-<span class="sourceLineNo">313</span> }<a name="line.313"></a>
-<span class="sourceLineNo">314</span> try {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> int futures = 0;<a name="line.315"></a>
-<span class="sourceLineNo">316</span> for (int i=0; i<batches.size(); i++) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span> List<Entry> entries = batches.get(i);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> if (!entries.isEmpty()) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span> if (LOG.isTraceEnabled()) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> LOG.trace("Submitting " + entries.size() +<a name="line.320"></a>
-<span class="sourceLineNo">321</span> " entries of total size " + replicateContext.getSize());<a name="line.321"></a>
-<span class="sourceLineNo">322</span> }<a name="line.322"></a>
-<span class="sourceLineNo">323</span> // RuntimeExceptions encountered here bubble up and are handled in ReplicationSource<a name="line.323"></a>
-<span class="sourceLineNo">324</span> pool.submit(createReplicator(entries, i));<a name="line.324"></a>
-<span class="sourceLineNo">325</span> futures++;<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> IOException iox = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span> long lastWriteTime = 0;<a name="line.330"></a>
-<span class="sourceLineNo">331</span> for (int i=0; i<futures; i++) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span> try {<a name="line.332"></a>
-<span class="sourceLineNo">333</span> // wait for all futures, remove successful parts<a name="line.333"></a>
-<span class="sourceLineNo">334</span> // (only the remaining parts will be retried)<a name="line.334"></a>
-<span class="sourceLineNo">335</span> Future<Integer> f = pool.take();<a name="line.335"></a>
-<span class="sourceLineNo">336</span> int index = f.get().intValue();<a name="line.336"></a>
-<span class="sourceLineNo">337</span> List<Entry> batch = batches.get(index);<a name="line.337"></a>
-<span class="sourceLineNo">338</span> batches.set(index, Collections.<Entry>emptyList()); // remove successful batch<a name="line.338"></a>
-<span class="sourceLineNo">339</span> // Find the most recent write time in the batch<a name="line.339"></a>
-<span class="sourceLineNo">340</span> long writeTime = batch.get(batch.size() - 1).getKey().getWriteTime();<a name="line.340"></a>
-<span class="sourceLineNo">341</span> if (writeTime > lastWriteTime) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span> lastWriteTime = writeTime;<a name="line.342"></a>
-<span class="sourceLineNo">343</span> }<a name="line.343"></a>
-<span class="sourceLineNo">344</span> } catch (InterruptedException ie) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span> iox = new IOException(ie);<a name="line.345"></a>
-<span class="sourceLineNo">346</span> } catch (ExecutionException ee) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> // cause must be an IOException<a name="line.347"></a>
-<span class="sourceLineNo">348</span> iox = (IOException)ee.getCause();<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span> if (iox != null) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span> // if we had any exceptions, try again<a name="line.352"></a>
-<span class="sourceLineNo">353</span> throw iox;<a name="line.353"></a>
-<span class="sourceLineNo">354</span> }<a name="line.354"></a>
-<span class="sourceLineNo">355</span> // update metrics<a name="line.355"></a>
-<span class="sourceLineNo">356</span> if (lastWriteTime > 0) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span> this.metrics.setAgeOfLastShippedOp(lastWriteTime, walGroupId);<a name="line.357"></a>
-<span class="sourceLineNo">358</span> }<a name="line.358"></a>
-<span class="sourceLineNo">359</span> return true;<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span> } catch (IOException ioe) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> // Didn't ship anything, but must still age the last time we did<a name="line.362"></a>
-<span class="sourceLineNo">363</span> this.metrics.refreshAgeOfLastShippedOp(walGroupId);<a name="line.363"></a>
-<span class="sourceLineNo">364</span> if (ioe instanceof RemoteException) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span> ioe = ((RemoteException) ioe).unwrapRemoteException();<a name="line.365"></a>
-<span class="sourceLineNo">366</span> LOG.warn("Can't replicate because of an error on the remote cluster: ", ioe);<a name="line.366"></a>
-<span class="sourceLineNo">367</span> if (ioe instanceof TableNotFoundException) {<a name="line.367"></a>
-<span class="sourceLineNo">368</span> if (dropOnDeletedTables) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span> // this is a bit fragile, but cannot change how TNFE is serialized<a name="line.369"></a>
-<span class="sourceLineNo">370</span> // at least check whether the table name is legal<a name="line.370"></a>
-<span class="sourceLineNo">371</span> TableName table = parseTable(ioe.getMessage());<a name="line.371"></a>
-<span class="sourceLineNo">372</span> if (table != null) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span> try (Connection localConn =<a name="line.373"></a>
-<span class="sourceLineNo">374</span> ConnectionFactory.createConnection(ctx.getLocalConfiguration())) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span> if (!localConn.getAdmin().tableExists(table)) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> // Would potentially be better to retry in one of the outer loops<a name="line.376"></a>
-<span class="sourceLineNo">377</span> // and add a table filter there; but that would break the encapsulation,<a name="line.377"></a>
-<span class="sourceLineNo">378</span> // so we're doing the filtering here.<a name="line.378"></a>
-<span class="sourceLineNo">379</span> LOG.info("Missing table detected at sink, local table also does not exist, filtering edits for '"+table+"'");<a name="line.379"></a>
-<span class="sourceLineNo">380</span> batches = filterBatches(batches, table);<a name="line.380"></a>
-<span class="sourceLineNo">381</span> continue;<a name="line.381"></a>
-<span class="sourceLineNo">382</span> }<a name="line.382"></a>
-<span class="sourceLineNo">383</span> } catch (IOException iox) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span> LOG.warn("Exception checking for local table: ", iox);<a name="line.384"></a>
-<span class="sourceLineNo">385</span> }<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> // fall through and sleep below<a name="line.388"></a>
-<span class="sourceLineNo">389</span> } else {<a name="line.389"></a>
-<span class="sourceLineNo">390</span> LOG.warn("Peer encountered RemoteException, rechecking all sinks: ", ioe);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> replicationSinkMgr.chooseSinks();<a name="line.391"></a>
-<span class="sourceLineNo">392</span> }<a name="line.392"></a>
-<span class="sourceLineNo">393</span> } else {<a name="line.393"></a>
-<span class="sourceLineNo">394</span> if (ioe instanceof SocketTimeoutException) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span> // This exception means we waited for more than 60s and nothing<a name="line.395"></a>
-<span class="sourceLineNo">396</span> // happened, the cluster is alive and calling it right away<a name="line.396"></a>
-<span class="sourceLineNo">397</span> // even for a test just makes things worse.<a name="line.397"></a>
-<span class="sourceLineNo">398</span> sleepForRetries("Encountered a SocketTimeoutException. Since the " +<a name="line.398"></a>
-<span class="sourceLineNo">399</span> "call to the remote cluster timed out, which is usually " +<a name="line.399"></a>
-<span class="sourceLineNo">400</span> "caused by a machine failure or a massive slowdown",<a name="line.400"></a>
-<span class="sourceLineNo">401</span> this.socketTimeoutMultiplier);<a name="line.401"></a>
-<span class="sourceLineNo">402</span> } else if (ioe instanceof ConnectException || ioe instanceof UnknownHostException) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span> LOG.warn("Peer is unavailable, rechecking all sinks: ", ioe);<a name="line.403"></a>
-<span class="sourceLineNo">404</span> replicationSinkMgr.chooseSinks();<a name="line.404"></a>
-<span class="sourceLineNo">405</span> } else {<a name="line.405"></a>
-<span class="sourceLineNo">406</span> LOG.warn("Can't replicate because of a local or network error: ", ioe);<a name="line.406"></a>
-<span class="sourceLineNo">407</span> }<a name="line.407"></a>
-<span class="sourceLineNo">408</span> }<a name="line.408"></a>
-<span class="sourceLineNo">409</span> if (sleepForRetries("Since we are unable to replicate", sleepMultiplier)) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span> sleepMultiplier++;<a name="line.410"></a>
-<span class="sourceLineNo">411</span> }<a name="line.411"></a>
-<span class="sourceLineNo">412</span> }<a name="line.412"></a>
-<span class="sourceLineNo">413</span> }<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return false; // in case we exited before replicating<a name="line.414"></a>
-<span class="sourceLineNo">415</span> }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span> protected boolean isPeerEnabled() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span> return ctx.getReplicationPeer().isPeerEnabled();<a name="line.418"></a>
-<span class="sourceLineNo">419</span> }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span> @Override<a name="line.421"></a>
-<span class="sourceLineNo">422</span> protected void doStop() {<a name="line.422"></a>
-<span class="sourceLineNo">423</span> disconnect(); //don't call super.doStop()<a name="line.423"></a>
-<span class="sourceLineNo">424</span> if (this.conn != null) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> try {<a name="line.425"></a>
-<span class="sourceLineNo">426</span> this.conn.close();<a name="line.426"></a>
-<span class="sourceLineNo">427</span> this.conn = null;<a name="line.427"></a>
-<span class="sourceLineNo">428</span> } catch (IOException e) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span> LOG.warn("Failed to close the connection");<a name="line.429"></a>
-<span class="sourceLineNo">430</span> }<a name="line.430"></a>
-<span class="sourceLineNo">431</span> }<a name="line.431"></a>
-<span class="sourceLineNo">432</span> // Allow currently running replication tasks to finish<a name="line.432"></a>
-<span class="sourceLineNo">433</span> exec.shutdown();<a name="line.433"></a>
-<span class="sourceLineNo">434</span> try {<a name="line.434"></a>
-<span class="sourceLineNo">435</span> exec.awaitTermination(maxTerminationWait, TimeUnit.MILLISECONDS);<a name="line.435"></a>
-<span class="sourceLineNo">436</span> } catch (InterruptedException e) {<a name="line.436"></a>
+<span class="sourceLineNo">275</span> return null;<a name="line.275"></a>
+<span class="sourceLineNo">276</span> }<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span> // Filter a set of batches by TableName<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private List<List<Entry>> filterBatches(final List<List<Entry>> oldEntryList, TableName table) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span> return oldEntryList<a name="line.280"></a>
+<span class="sourceLineNo">281</span> .stream().map(entries -> entries.stream()<a name="line.281"></a>
+<span class="sourceLineNo">282</span> .filter(e -> !e.getKey().getTableName().equals(table)).collect(Collectors.toList()))<a name="line.282"></a>
+<span class="sourceLineNo">283</span> .collect(Collectors.toList());<a name="line.283"></a>
+<span class="sourceLineNo">284</span> }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span> private void reconnectToPeerCluster() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span> ClusterConnection connection = null;<a name="line.287"></a>
+<span class="sourceLineNo">288</span> try {<a name="line.288"></a>
+<span class="sourceLineNo">289</span> connection = (ClusterConnection) ConnectionFactory.createConnection(this.conf);<a name="line.289"></a>
+<span class="sourceLineNo">290</span> } catch (IOException ioe) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span> LOG.warn("Failed to create connection for peer cluster", ioe);<a name="line.291"></a>
+<span class="sourceLineNo">292</span> }<a name="line.292"></a>
+<span class="sourceLineNo">293</span> if (connection != null) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span> this.conn = connection;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> }<a name="line.295"></a>
+<span class="sourceLineNo">296</span> }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> private long parallelReplicate(CompletionService<Integer> pool, ReplicateContext replicateContext,<a name="line.298"></a>
+<span class="sourceLineNo">299</span> List<List<Entry>> batches) throws IOException {<a name="line.299"></a>
+<span class="sourceLineNo">300</span> int futures = 0;<a name="line.300"></a>
+<span class="sourceLineNo">301</span> for (int i = 0; i < batches.size(); i++) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span> List<Entry> entries = batches.get(i);<a name="line.302"></a>
+<span class="sourceLineNo">303</span> if (!entries.isEmpty()) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span> LOG.trace("Submitting {} entries of total size {}", entries.size(),<a name="line.304"></a>
+<span class="sourceLineNo">305</span> replicateContext.getSize());<a name="line.305"></a>
+<span class="sourceLineNo">306</span> // RuntimeExceptions encountered here bubble up and are handled in ReplicationSource<a name="line.306"></a>
+<span class="sourceLineNo">307</span> pool.submit(createReplicator(entries, i));<a name="line.307"></a>
+<span class="sourceLineNo">308</span> futures++;<a name="line.308"></a>
+<span class="sourceLineNo">309</span> }<a name="line.309"></a>
+<span class="sourceLineNo">310</span> }<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span> IOException iox = null;<a name="line.312"></a>
+<span class="sourceLineNo">313</span> long lastWriteTime = 0;<a name="line.313"></a>
+<span class="sourceLineNo">314</span> for (int i = 0; i < futures; i++) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> try {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> // wait for all futures, remove successful parts<a name="line.316"></a>
+<span class="sourceLineNo">317</span> // (only the remaining parts will be retried)<a name="line.317"></a>
+<span class="sourceLineNo">318</span> Future<Integer> f = pool.take();<a name="line.318"></a>
+<span class="sourceLineNo">319</span> int index = f.get();<a name="line.319"></a>
+<span class="sourceLineNo">320</span> List<Entry> batch = batches.get(index);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> batches.set(index, Collections.emptyList()); // remove successful batch<a name="line.321"></a>
+<span class="sourceLineNo">322</span> // Find the most recent write time in the batch<a name="line.322"></a>
+<span class="sourceLineNo">323</span> long writeTime = batch.get(batch.size() - 1).getKey().getWriteTime();<a name="line.323"></a>
+<span class="sourceLineNo">324</span> if (writeTime > lastWriteTime) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span> lastWriteTime = writeTime;<a name="line.325"></a>
+<span class="sourceLineNo">326</span> }<a name="line.326"></a>
+<span class="sourceLineNo">327</span> } catch (InterruptedException ie) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span> iox = new IOException(ie);<a name="line.328"></a>
+<span class="sourceLineNo">329</span> } catch (ExecutionException ee) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span> // cause must be an IOException<a name="line.330"></a>
+<span class="sourceLineNo">331</span> iox = (IOException) ee.getCause();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> }<a name="line.332"></a>
+<span class="sourceLineNo">333</span> }<a name="line.333"></a>
+<span class="sourceLineNo">334</span> if (iox != null) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span> // if we had any exceptions, try again<a name="line.335"></a>
+<span class="sourceLineNo">336</span> throw iox;<a name="line.336"></a>
+<span class="sourceLineNo">337</span> }<a name="line.337"></a>
+<span class="sourceLineNo">338</span> return lastWriteTime;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> }<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Do the shipping logic<a name="line.342"></a>
+<span class="sourceLineNo">343</span> */<a name="line.343"></a>
+<span class="sourceLineNo">344</span> @Override<a name="line.344"></a>
+<span class="sourceLineNo">345</span> public boolean replicate(ReplicateContext replicateContext) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span> CompletionService<Integer> pool = new ExecutorCompletionService<>(this.exec);<a name="line.346"></a>
+<span class="sourceLineNo">347</span> String walGroupId = replicateContext.getWalGroupId();<a name="line.347"></a>
+<span class="sourceLineNo">348</span> int sleepMultiplier = 1;<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span> if (!peersSelected && this.isRunning()) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span> connectToPeers();<a name="line.351"></a>
+<span class="sourceLineNo">352</span> peersSelected = true;<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> int numSinks = replicationSinkMgr.getNumSinks();<a name="line.355"></a>
+<span class="sourceLineNo">356</span> if (numSinks == 0) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span> LOG.warn("No replication sinks found, returning without replicating. The source should " +<a name="line.357"></a>
+<span class="sourceLineNo">358</span> "retry with the same set of edits.");<a name="line.358"></a>
+<span class="sourceLineNo">359</span> return false;<a name="line.359"></a>
+<span class="sourceLineNo">360</span> }<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span> List<List<Entry>> batches = createBatches(replicateContext.getEntries());<a name="line.362"></a>
+<span class="sourceLineNo">363</span> while (this.isRunning() && !exec.isShutdown()) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span> if (!isPeerEnabled()) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span> if (sleepForRetries("Replication is disabled", sleepMultiplier)) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> sleepMultiplier++;<a name="line.366"></a>
+<span class="sourceLineNo">367</span> }<a name="line.367"></a>
+<span class="sourceLineNo">368</span> continue;<a name="line.368"></a>
+<span class="sourceLineNo">369</span> }<a name="line.369"></a>
+<span class="sourceLineNo">370</span> if (this.conn == null || this.conn.isClosed()) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span> reconnectToPeerCluster();<a name="line.371"></a>
+<span class="sourceLineNo">372</span> }<a name="line.372"></a>
+<span class="sourceLineNo">373</span> try {<a name="line.373"></a>
+<span class="sourceLineNo">374</span> long lastWriteTime;<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span> // replicate the batches to sink side.<a name="line.376"></a>
+<span class="sourceLineNo">377</span> lastWriteTime = parallelReplicate(pool, replicateContext, batches);<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span> // update metrics<a name="line.379"></a>
+<span class="sourceLineNo">380</span> if (lastWriteTime > 0) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span> this.metrics.setAgeOfLastShippedOp(lastWriteTime, walGroupId);<a name="line.381"></a>
+<span class="sourceLineNo">382</span> }<a name="line.382"></a>
+<span class="sourceLineNo">383</span> return true;<a name="line.383"></a>
+<span class="sourceLineNo">384</span> } catch (IOException ioe) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span> // Didn't ship anything, but must still age the last time we did<a name="line.385"></a>
+<span class="sourceLineNo">386</span> this.metrics.refreshAgeOfLastShippedOp(walGroupId);<a name="line.386"></a>
+<span class="sourceLineNo">387</span> if (ioe instanceof RemoteException) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span> ioe = ((RemoteException) ioe).unwrapRemoteException();<a name="line.388"></a>
+<span class="sourceLineNo">389</span> LOG.warn("Can't replicate because of an error on the remote cluster: ", ioe);<a name="line.389"></a>
+<span class="sourceLineNo">390</span> if (ioe instanceof TableNotFoundException) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> if (dropOnDeletedTables) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span> // this is a bit fragile, but cannot change how TNFE is serialized<a name="line.392"></a>
+<span class="sourceLineNo">393</span> // at least check whether the table name is legal<a name="line.393"></a>
+<span class="sourceLineNo">394</span> TableName table = parseTable(ioe.getMessage());<a name="line.394"></a>
+<span class="sourceLineNo">395</span> if (table != null) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span> try (Connection localConn =<a name="line.396"></a>
+<span class="sourceLineNo">397</span> ConnectionFactory.createConnection(ctx.getLocalConfiguration())) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> if (!localConn.getAdmin().tableExists(table)) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span> // Would potentially be better to retry in one of the outer loops<a name="line.399"></a>
+<span class="sourceLineNo">400</span> // and add a table filter there; but that would break the encapsulation,<a name="line.400"></a>
+<span class="sourceLineNo">401</span> // so we're doing the filtering here.<a name="line.401"></a>
+<span class="sourceLineNo">402</span> LOG.info("Missing table detected at sink, local table also does not exist, " +<a name="line.402"></a>
+<span class="sourceLineNo">403</span> "filtering edits for '" + table + "'");<a name="line.403"></a>
+<span class="sourceLineNo">404</span> batches = filterBatches(batches, table);<a name="line.404"></a>
+<span class="sourceLineNo">405</span> continue;<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<a name="line.406"></a>
+<span class="sourceLineNo">407</span> } catch (IOException iox) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span> LOG.warn("Exception checking for local table: ", iox);<a name="line.408"></a>
+<span class="sourceLineNo">409</span> }<a name="line.409"></a>
+<span class="sourceLineNo">410</span> }<a name="line.410"></a>
+<span class="sourceLineNo">411</span> }<a name="line.411"></a>
+<span class="sourceLineNo">412</span> // fall through and sleep below<a name="line.412"></a>
+<span class="sourceLineNo">413</span> } else {<a name="line.413"></a>
+<span class="sourceLineNo">414</span> LOG.warn("Peer encountered RemoteException, rechecking all sinks: ", ioe);<a name="line.414"></a>
+<span class="sourceLineNo">415</span> replicationSinkMgr.chooseSinks();<a name="line.415"></a>
+<span class="sourceLineNo">416</span> }<a name="line.416"></a>
+<span class="sourceLineNo">417</span> } else {<a name="line.417"></a>
+<span class="sourceLineNo">418</span> if (ioe instanceof SocketTimeoutException) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span> // This exception means we waited for more than 60s and nothing<a name="line.419"></a>
+<span class="sourceLineNo">420</span> // happened, the cluster is alive and calling it right away<a name="line.420"></a>
+<span class="sourceLineNo">421</span> // even for a test just makes things worse.<a name="line.421"></a>
+<span class="sourceLineNo">422</span> sleepForRetries("Encountered a SocketTimeoutException. Since the " +<a name="line.422"></a>
+<span class="sourceLineNo">423</span> "call to the remote cluster timed out, which is usually " +<a name="line.423"></a>
+<span class="sourceLineNo">424</span> "caused by a machine failure or a massive slowdown",<a name="line.424"></a>
+<span class="sourceLineNo">425</span> this.socketTimeoutMultiplier);<a name="line.425"></a>
+<span class="sourceLineNo">426</span> } else if (ioe instanceof ConnectException || ioe instanceof UnknownHostException) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span> LOG.warn("Peer is unavailable, rechecking all sinks: ", ioe);<a name="line.427"></a>
+<span class="sourceLineNo">428</span> replicationSinkMgr.chooseSinks();<a name="line.428"></a>
+<span class="sourceLineNo">429</span> } else {<a name="line.429"></a>
+<span class="sourceLineNo">430</span> LOG.warn("Can't replicate because of a local or network error: ", ioe);<a name="line.430"></a>
+<span class="sourceLineNo">431</span> }<a name="line.431"></a>
+<span class="sourceLineNo">432</span> }<a name="line.432"></a>
+<span class="sourceLineNo">433</span> if (sleepForRetries("Since we are unable to replicate", sleepMultiplier)) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span> sleepMultiplier++;<a name="line.434"></a>
+<span class="sourceLineNo">435</span> }<a name="line.435"></a>
+<span class="sourceLineNo">436</span> }<a name="line.436"></a>
<span class="sourceLineNo">437</span> }<a name="line.437"></a>
-<span class="sourceLineNo">438</span> // Abort if the tasks did not terminate in time<a name="line.438"></a>
-<span class="sourceLineNo">439</span> if (!exec.isTerminated()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span> String errMsg = "HBaseInterClusterReplicationEndpoint termination failed. The " +<a name="line.440"></a>
-<span class="sourceLineNo">441</span> "ThreadPoolExecutor failed to finish all tasks within " + maxTerminationWait + "ms. " +<a name="line.441"></a>
-<span class="sourceLineNo">442</span> "Aborting to prevent Replication from deadlocking. See HBASE-16081.";<a name="line.442"></a>
-<span class="sourceLineNo">443</span> abortable.abort(errMsg, new IOException(errMsg));<a name="line.443"></a>
-<span class="sourceLineNo">444</span> }<a name="line.444"></a>
-<span class="sourceLineNo">445</span> notifyStopped();<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> @VisibleForTesting<a name="line.448"></a>
-<span class="sourceLineNo">449</span> protected Replicator createReplicator(List<Entry> entries, int ordinal) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span> return new Replicator(entries, ordinal);<a name="line.450"></a>
-<span class="sourceLineNo">451</span> }<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span> @VisibleForTesting<a name="line.453"></a>
-<span class="sourceLineNo">454</span> protected class Replicator implements Callable<Integer> {<a name="line.454"></a>
-<span class="sourceLineNo">455</span> private List<Entry> entries;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> private int ordinal;<a name="line.456"></a>
-<span class="sourceLineNo">457</span> public Replicator(List<Entry> entries, int ordinal) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span> this.entries = entries;<a name="line.458"></a>
-<span class="sourceLineNo">459</span> this.ordinal = ordinal;<a name="line.459"></a>
-<span class="sourceLineNo">460</span> }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span> protected void replicateEntries(BlockingInterface rrs, final List<Entry> batch,<a name="line.462"></a>
-<span class="sourceLineNo">463</span> String replicationClusterId, Path baseNamespaceDir, Path hfileArchiveDir)<a name="line.463"></a>
-<span class="sourceLineNo">464</span> throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (LOG.isTraceEnabled()) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> long size = 0;<a name="line.466"></a>
-<span class="sourceLineNo">467</span> for (Entry e: entries) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span> size += e.getKey().estimatedSerializedSizeOf();<a name="line.468"></a>
-<span class="sourceLineNo">469</span> size += e.getEdit().estimatedSerializedSizeOf();<a name="line.469"></a>
-<span class="sourceLineNo">470</span> }<a name="line.470"></a>
-<span class="sourceLineNo">471</span> LOG.trace("Replicating batch " + System.identityHashCode(entries) + " of " +<a name="line.471"></a>
-<span class="sourceLineNo">472</span> entries.size() + " entries with total size " + size + " bytes to " +<a name="line.472"></a>
-<span class="sourceLineNo">473</span> replicationClusterId);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> }<a name="line.474"></a>
-<span class="sourceLineNo">475</span> try {<a name="line.475"></a>
-<span class="sourceLineNo">476</span> ReplicationProtbufUtil.replicateWALEntry(rrs, batch.toArray(new Entry[batch.size()]),<a name="line.476"></a>
-<span class="sourceLineNo">477</span> replicationClusterId, baseNamespaceDir, hfileArchiveDir);<a name="line.477"></a>
-<span class="sourceLineNo">478</span> if (LOG.isTraceEnabled()) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.trace("Completed replicating batch " + System.identityHashCode(entries));<a name="line.479"></a>
-<span class="sourceLineNo">480</span> }<a name="line.480"></a>
-<span class="sourceLineNo">481</span> } catch (IOException e) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span> if (LOG.isTraceEnabled()) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span> LOG.trace("Failed replicating batch " + System.identityHashCode(entries), e);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> }<a name="line.484"></a>
-<span class="sourceLineNo">485</span> throw e;<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span> }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span> @Override<a name="line.489"></a>
-<span class="sourceLin
<TRUNCATED>
[12/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 3168ee3..e159b3f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -145,8 +145,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestIncrementalBackupMergeWithFailures.FailurePhase</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDeleteWithFailures.Failure.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupDeleteWithFailures.Failure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestIncrementalBackupMergeWithFailures.FailurePhase</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
index fc45e57..d865969 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -5307,18 +5307,22 @@
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestWALEntrySinkFilter.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+<td class="colLast"><span class="typeNameLabel">TestSerialReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestRegionReplicaReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpoint.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+<td class="colLast"><span class="typeNameLabel">TestWALEntrySinkFilter.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestReplicator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+<td class="colLast"><span class="typeNameLabel">TestRegionReplicaReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpoint.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestReplicator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
<td class="colLast"><span class="typeNameLabel">TestRegionReplicaReplicationEndpointNoMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestRegionReplicaReplicationEndpointNoMaster.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
</tr>
</tbody>
@@ -6225,42 +6229,46 @@
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestCoprocessorScanPolicy.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestCoprocessorScanPolicy.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+<td class="colLast"><span class="typeNameLabel">TestHBaseFsckCleanReplicationBarriers.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMiniClusterLoadSequential.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestMiniClusterLoadSequential.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+<td class="colLast"><span class="typeNameLabel">TestCoprocessorScanPolicy.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestCoprocessorScanPolicy.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestFromClientSide3WoUnsafe.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestFromClientSide3WoUnsafe.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+<td class="colLast"><span class="typeNameLabel">TestMiniClusterLoadSequential.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestMiniClusterLoadSequential.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestEncryptionTest.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestEncryptionTest.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+<td class="colLast"><span class="typeNameLabel">TestFromClientSide3WoUnsafe.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestFromClientSide3WoUnsafe.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestCompressionTest.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestCompressionTest.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+<td class="colLast"><span class="typeNameLabel">TestEncryptionTest.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestEncryptionTest.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestIdReadWriteLock.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestIdReadWriteLock.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+<td class="colLast"><span class="typeNameLabel">TestCompressionTest.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestCompressionTest.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestBoundedPriorityBlockingQueue.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+<td class="colLast"><span class="typeNameLabel">TestIdReadWriteLock.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestIdReadWriteLock.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMiniClusterLoadParallel.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestMiniClusterLoadParallel.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+<td class="colLast"><span class="typeNameLabel">TestBoundedPriorityBlockingQueue.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestRegionSplitCalculator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionSplitCalculator.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+<td class="colLast"><span class="typeNameLabel">TestMiniClusterLoadParallel.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestMiniClusterLoadParallel.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestRegionSplitCalculator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionSplitCalculator.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
<td class="colLast"><span class="typeNameLabel">TestIncrementingEnvironmentEdge.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestIncrementingEnvironmentEdge.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
</tr>
</tbody>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
index 48f4ec2..bcd3437 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
@@ -3358,14 +3358,18 @@
<td class="colLast"><span class="typeNameLabel">TestSerialReplicationChecker.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationChecker.html#UTIL">UTIL</a></span></code> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestSerialReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.html#UTIL">UTIL</a></span></code> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
<td class="colLast"><span class="typeNameLabel">TestReplicationSourceManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html#utility">utility</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
<td class="colLast"><span class="typeNameLabel">TestGlobalThrottler.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#utility1">utility1</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
<td class="colLast"><span class="typeNameLabel">TestGlobalThrottler.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#utility2">utility2</a></span></code> </td>
</tr>
@@ -4307,6 +4311,10 @@
<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
<td class="colLast"><span class="typeNameLabel">TestConnectionCache.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestConnectionCache.html#UTIL">UTIL</a></span></code> </td>
</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestHBaseFsckCleanReplicationBarriers.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#UTIL">UTIL</a></span></code> </td>
+</tr>
</tbody>
</table>
<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html b/testdevapidocs/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html
index b178f95..c8a4018 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html
@@ -395,7 +395,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
<ul class="blockList">
<li class="blockList">
<h4>getPeerUUID</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html#line.302">getPeerUUID</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html#line.301">getPeerUUID</a>()</pre>
</li>
</ul>
<a name="replicate-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-">
@@ -404,7 +404,7 @@ extends org.apache.hadoop.hbase.replication.BaseReplicationEndpoint</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>replicate</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html#line.307">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext replicateContext)</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html#line.306">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext replicateContext)</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html b/testdevapidocs/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html
index 461fda1..970f70d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
<li class="blockList">
<hr>
<br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.49">TestOverwriteFileUnderConstruction</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.50">TestOverwriteFileUnderConstruction</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">Used to confirm that it is OK to overwrite a file which is being written currently.</div>
</li>
@@ -222,7 +222,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>CLASS_RULE</h4>
-<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.52">CLASS_RULE</a></pre>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.53">CLASS_RULE</a></pre>
</li>
</ul>
<a name="UTIL">
@@ -231,7 +231,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>UTIL</h4>
-<pre>private static final <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.55">UTIL</a></pre>
+<pre>private static final <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.56">UTIL</a></pre>
</li>
</ul>
<a name="FS">
@@ -240,7 +240,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>FS</h4>
-<pre>private static org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.57">FS</a></pre>
+<pre>private static org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.58">FS</a></pre>
</li>
</ul>
<a name="name">
@@ -249,7 +249,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>name</h4>
-<pre>public final org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.60">name</a></pre>
+<pre>public final org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.61">name</a></pre>
</li>
</ul>
</li>
@@ -266,7 +266,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>TestOverwriteFileUnderConstruction</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.49">TestOverwriteFileUnderConstruction</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.50">TestOverwriteFileUnderConstruction</a>()</pre>
</li>
</ul>
</li>
@@ -283,7 +283,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>setUp</h4>
-<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.63">setUp</a>()
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.64">setUp</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -297,7 +297,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>tearDown</h4>
-<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.69">tearDown</a>()
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.70">tearDown</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -311,7 +311,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testNotOverwrite</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.74">testNotOverwrite</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.75">testNotOverwrite</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -325,7 +325,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>testOverwrite</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.88">testOverwrite</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.89">testOverwrite</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
index 5b8d4e5..33d7e86 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -569,15 +569,15 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
index a1c9b1d..28973e0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
@@ -81,14 +81,14 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
<ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><V>, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
+<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure<TEnvironment> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
</ul>
</li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure<TEnvironment> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>)
+<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><V>, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
<ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
</ul>
</li>
<li type="circle">org.apache.hadoop.hbase.procedure.ProcedureManager
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index ca2f47e..fbff915 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -205,9 +205,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index da36b56..87ba170 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -655,11 +655,11 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
index d9eba46..61a58c9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html
@@ -121,7 +121,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.544">TestReplicationEndpoint.EverythingPassesWALEntryFilter</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.520">TestReplicationEndpoint.EverythingPassesWALEntryFilter</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements org.apache.hadoop.hbase.replication.WALEntryFilter</pre>
</li>
@@ -214,7 +214,7 @@ implements org.apache.hadoop.hbase.replication.WALEntryFilter</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>passedEntry</h4>
-<pre>private static boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.545">passedEntry</a></pre>
+<pre>private static boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.521">passedEntry</a></pre>
</li>
</ul>
</li>
@@ -231,7 +231,7 @@ implements org.apache.hadoop.hbase.replication.WALEntryFilter</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>EverythingPassesWALEntryFilter</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.544">EverythingPassesWALEntryFilter</a>()</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.520">EverythingPassesWALEntryFilter</a>()</pre>
</li>
</ul>
</li>
@@ -248,7 +248,7 @@ implements org.apache.hadoop.hbase.replication.WALEntryFilter</pre>
<ul class="blockList">
<li class="blockList">
<h4>filter</h4>
-<pre>public org.apache.hadoop.hbase.wal.WAL.Entry <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.547">filter</a>(org.apache.hadoop.hbase.wal.WAL.Entry entry)</pre>
+<pre>public org.apache.hadoop.hbase.wal.WAL.Entry <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.523">filter</a>(org.apache.hadoop.hbase.wal.WAL.Entry entry)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>filter</code> in interface <code>org.apache.hadoop.hbase.replication.WALEntryFilter</code></dd>
@@ -261,7 +261,7 @@ implements org.apache.hadoop.hbase.replication.WALEntryFilter</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>hasPassedAnEntry</h4>
-<pre>public static boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.552">hasPassedAnEntry</a>()</pre>
+<pre>public static boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.528">hasPassedAnEntry</a>()</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
index 5018214..026a2fa 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html
@@ -116,7 +116,7 @@
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.557">TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.533">TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass</a>
extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.EverythingPassesWALEntryFilter</a></pre>
</li>
</ul>
@@ -181,7 +181,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockListLast">
<li class="blockList">
<h4>EverythingPassesWALEntryFilterSubclass</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html#line.557">EverythingPassesWALEntryFilterSubclass</a>()</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html#line.533">EverythingPassesWALEntryFilterSubclass</a>()</pre>
</li>
</ul>
</li>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html
deleted file mode 100644
index 204dbcc..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html
+++ /dev/null
@@ -1,329 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
- try {
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator (Apache HBase 3.0.0-SNAPSHOT Test API)";
- }
- }
- catch(err) {
- }
-//-->
-var methods = {"i0":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" target="_top">Frames</a></li>
-<li><a href="TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_top");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary: </li>
-<li>Nested | </li>
-<li><a href="#field.summary">Field</a> | </li>
-<li><a href="#constructor.summary">Constr</a> | </li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail: </li>
-<li><a href="#field.detail">Field</a> | </li>
-<li><a href="#constructor.detail">Constr</a> | </li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!-- -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.replication</div>
-<h2 title="Class TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator" class="title">Class TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.replication.TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></dd>
-</dl>
-<dl>
-<dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator</a></dd>
-</dl>
-<dl>
-<dt>Enclosing class:</dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest</a></dd>
-</dl>
-<hr>
-<br>
-<pre>protected class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.460">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</a>
-extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!-- -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html#ordinal">ordinal</a></span></code> </td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!-- -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html#DummyReplicator-java.util.List-int-">DummyReplicator</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
- int ordinal)</code> </td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!-- -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html#call--">call</a></span>()</code> </td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!-- -->
-</a>
-<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!-- -->
-</a>
-<h3>Field Detail</h3>
-<a name="ordinal">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>ordinal</h4>
-<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html#line.462">ordinal</a></pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!-- -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="DummyReplicator-java.util.List-int-">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>DummyReplicator</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html#line.464">DummyReplicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
- int ordinal)</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!-- -->
-</a>
-<h3>Method Detail</h3>
-<a name="call--">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>call</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html#line.470">call</a>()
- throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true#call--" title="class or interface in java.util.concurrent">call</a></code> in interface <code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" target="_top">Frames</a></li>
-<li><a href="TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_bottom");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary: </li>
-<li>Nested | </li>
-<li><a href="#field.summary">Field</a> | </li>
-<li><a href="#constructor.summary">Constr</a> | </li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail: </li>
-<li><a href="#field.detail">Field</a> | </li>
-<li><a href="#constructor.detail">Constr</a> | </li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!-- -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html
deleted file mode 100644
index af342f6..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html
+++ /dev/null
@@ -1,296 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
- try {
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator (Apache HBase 3.0.0-SNAPSHOT Test API)";
- }
- }
- catch(err) {
- }
-//-->
-var methods = {"i0":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" target="_top">Frames</a></li>
-<li><a href="TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_top");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary: </li>
-<li>Nested | </li>
-<li>Field | </li>
-<li><a href="#constructor.summary">Constr</a> | </li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail: </li>
-<li>Field | </li>
-<li><a href="#constructor.detail">Constr</a> | </li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!-- -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.replication</div>
-<h2 title="Class TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator" class="title">Class TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">org.apache.hadoop.hbase.replication.TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.replication.TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></dd>
-</dl>
-<dl>
-<dt>Enclosing class:</dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest</a></dd>
-</dl>
-<hr>
-<br>
-<pre>protected class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.475">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator</a>
-extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</a></pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!-- -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html#FailingDummyReplicator-java.util.List-int-">FailingDummyReplicator</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
- int ordinal)</code> </td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!-- -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html#call--">call</a></span>()</code> </td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!-- -->
-</a>
-<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!-- -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="FailingDummyReplicator-java.util.List-int-">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>FailingDummyReplicator</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html#line.477">FailingDummyReplicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
- int ordinal)</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!-- -->
-</a>
-<h3>Method Detail</h3>
-<a name="call--">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>call</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html#line.482">call</a>()
- throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true#call--" title="class or interface in java.util.concurrent">call</a></code> in interface <code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></code></dd>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html#call--">call</a></code> in class <code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator</a></code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" target="_top">Frames</a></li>
-<li><a href="TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_bottom");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary: </li>
-<li>Nested | </li>
-<li>Field | </li>
-<li><a href="#constructor.summary">Constr</a> | </li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail: </li>
-<li>Field | </li>
-<li><a href="#constructor.detail">Constr</a> | </li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!-- -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
[27/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call() throws IOException {<a name="line.396"></a>
+<span class="sourceLineNo">
<TRUNCATED>
[31/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
index e1bc325..63e7421 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html
@@ -66,5125 +66,5224 @@
<span class="sourceLineNo">058</span>import java.util.concurrent.TimeoutException;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.commons.io.IOUtils;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.commons.lang3.StringUtils;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.conf.Configuration;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configured;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FileStatus;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileSystem;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.Path;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.Abortable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Cell;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HConstants;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ServerName;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.TableName;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.Get;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Put;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.Result;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Table;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.util.Tool;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.util.ToolRunner;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.zookeeper.KeeperException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.slf4j.Logger;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.slf4j.LoggerFactory;<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.152"></a>
+<span class="sourceLineNo">061</span>import java.util.stream.Collectors;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.commons.io.IOUtils;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.commons.lang3.RandomStringUtils;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.commons.lang3.StringUtils;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.conf.Configuration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.conf.Configured;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.fs.FileStatus;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.fs.FileSystem;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.fs.Path;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.fs.permission.FsAction;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.fs.permission.FsPermission;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.Abortable;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.Cell;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.HConstants;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.RegionLocations;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ServerName;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.TableName;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.client.Get;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.client.Put;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.client.Result;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.client.Table;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.io.FileLink;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.io.HFileLink;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.util.hbck.ReplicationChecker;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandlerImpl;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.util.ReflectionUtils;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.util.Tool;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.util.ToolRunner;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.zookeeper.KeeperException;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.slf4j.Logger;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.slf4j.LoggerFactory;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>/**<a name="line.157"></a>
-<span class="sourceLineNo">158</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.158"></a>
-<span class="sourceLineNo">159</span> * table integrity problems in a corrupted HBase.<a name="line.159"></a>
-<span class="sourceLineNo">160</span> * <p><a name="line.160"></a>
-<span class="sourceLineNo">161</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.161"></a>
-<span class="sourceLineNo">162</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.162"></a>
-<span class="sourceLineNo">163</span> * accordance.<a name="line.163"></a>
-<span class="sourceLineNo">164</span> * <p><a name="line.164"></a>
-<span class="sourceLineNo">165</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.165"></a>
-<span class="sourceLineNo">166</span> * one region of a table. This means there are no individual degenerate<a name="line.166"></a>
-<span class="sourceLineNo">167</span> * or backwards regions; no holes between regions; and that there are no<a name="line.167"></a>
-<span class="sourceLineNo">168</span> * overlapping regions.<a name="line.168"></a>
-<span class="sourceLineNo">169</span> * <p><a name="line.169"></a>
-<span class="sourceLineNo">170</span> * The general repair strategy works in two phases:<a name="line.170"></a>
-<span class="sourceLineNo">171</span> * <ol><a name="line.171"></a>
-<span class="sourceLineNo">172</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * </ol><a name="line.174"></a>
-<span class="sourceLineNo">175</span> * <p><a name="line.175"></a>
-<span class="sourceLineNo">176</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.176"></a>
-<span class="sourceLineNo">177</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.177"></a>
-<span class="sourceLineNo">178</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.178"></a>
-<span class="sourceLineNo">179</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.179"></a>
-<span class="sourceLineNo">180</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.180"></a>
-<span class="sourceLineNo">181</span> * a new region is created and all data is merged into the new region.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> * <p><a name="line.182"></a>
-<span class="sourceLineNo">183</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.183"></a>
-<span class="sourceLineNo">184</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.184"></a>
-<span class="sourceLineNo">185</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.185"></a>
-<span class="sourceLineNo">186</span> * an offline fashion.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> * <p><a name="line.187"></a>
-<span class="sourceLineNo">188</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.188"></a>
-<span class="sourceLineNo">189</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.189"></a>
-<span class="sourceLineNo">190</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.190"></a>
-<span class="sourceLineNo">191</span> * with proper state in the master.<a name="line.191"></a>
-<span class="sourceLineNo">192</span> * <p><a name="line.192"></a>
-<span class="sourceLineNo">193</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.193"></a>
-<span class="sourceLineNo">194</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.194"></a>
-<span class="sourceLineNo">195</span> * first be called successfully. Much of the region consistency information<a name="line.195"></a>
-<span class="sourceLineNo">196</span> * is transient and less risky to repair.<a name="line.196"></a>
-<span class="sourceLineNo">197</span> * <p><a name="line.197"></a>
-<span class="sourceLineNo">198</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.198"></a>
-<span class="sourceLineNo">199</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.199"></a>
-<span class="sourceLineNo">200</span> * {@link #printUsageAndExit()} for more details.<a name="line.200"></a>
-<span class="sourceLineNo">201</span> */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.202"></a>
-<span class="sourceLineNo">203</span>@InterfaceStability.Evolving<a name="line.203"></a>
-<span class="sourceLineNo">204</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.205"></a>
-<span class="sourceLineNo">206</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.207"></a>
-<span class="sourceLineNo">208</span> private static boolean rsSupportsOffline = true;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.211"></a>
-<span class="sourceLineNo">212</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.212"></a>
-<span class="sourceLineNo">213</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.214"></a>
-<span class="sourceLineNo">215</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.215"></a>
-<span class="sourceLineNo">216</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.216"></a>
-<span class="sourceLineNo">217</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.217"></a>
-<span class="sourceLineNo">218</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.218"></a>
-<span class="sourceLineNo">219</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.219"></a>
-<span class="sourceLineNo">220</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.220"></a>
-<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.221"></a>
-<span class="sourceLineNo">222</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
-<span class="sourceLineNo">223</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span> /**********************<a name="line.225"></a>
-<span class="sourceLineNo">226</span> * Internal resources<a name="line.226"></a>
-<span class="sourceLineNo">227</span> **********************/<a name="line.227"></a>
-<span class="sourceLineNo">228</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.228"></a>
-<span class="sourceLineNo">229</span> private ClusterMetrics status;<a name="line.229"></a>
-<span class="sourceLineNo">230</span> private ClusterConnection connection;<a name="line.230"></a>
-<span class="sourceLineNo">231</span> private Admin admin;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> private Table meta;<a name="line.232"></a>
-<span class="sourceLineNo">233</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.233"></a>
-<span class="sourceLineNo">234</span> protected ExecutorService executor;<a name="line.234"></a>
-<span class="sourceLineNo">235</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.235"></a>
-<span class="sourceLineNo">236</span> private HFileCorruptionChecker hfcc;<a name="line.236"></a>
-<span class="sourceLineNo">237</span> private int retcode = 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span> private Path HBCK_LOCK_PATH;<a name="line.238"></a>
-<span class="sourceLineNo">239</span> private FSDataOutputStream hbckOutFd;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.240"></a>
-<span class="sourceLineNo">241</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.241"></a>
-<span class="sourceLineNo">242</span> // successful<a name="line.242"></a>
-<span class="sourceLineNo">243</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> // Unsupported options in HBase 2.0+<a name="line.245"></a>
-<span class="sourceLineNo">246</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.247"></a>
-<span class="sourceLineNo">248</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.248"></a>
-<span class="sourceLineNo">249</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span> /***********<a name="line.251"></a>
-<span class="sourceLineNo">252</span> * Options<a name="line.252"></a>
-<span class="sourceLineNo">253</span> ***********/<a name="line.253"></a>
-<span class="sourceLineNo">254</span> private static boolean details = false; // do we display the full report<a name="line.254"></a>
-<span class="sourceLineNo">255</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.255"></a>
-<span class="sourceLineNo">256</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.256"></a>
-<span class="sourceLineNo">257</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean fixMeta = false; // fix meta errors?<a name="line.258"></a>
-<span class="sourceLineNo">259</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.260"></a>
-<span class="sourceLineNo">261</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.261"></a>
-<span class="sourceLineNo">262</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.262"></a>
-<span class="sourceLineNo">263</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.263"></a>
-<span class="sourceLineNo">264</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.264"></a>
-<span class="sourceLineNo">265</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.265"></a>
-<span class="sourceLineNo">266</span> private boolean removeParents = false; // remove split parents<a name="line.266"></a>
-<span class="sourceLineNo">267</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.267"></a>
-<span class="sourceLineNo">268</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.268"></a>
-<span class="sourceLineNo">269</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.269"></a>
-<span class="sourceLineNo">270</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.270"></a>
-<span class="sourceLineNo">271</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.273"></a>
-<span class="sourceLineNo">274</span> // hbase:meta are always checked<a name="line.274"></a>
-<span class="sourceLineNo">275</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.276"></a>
-<span class="sourceLineNo">277</span> // maximum number of overlapping regions to sideline<a name="line.277"></a>
-<span class="sourceLineNo">278</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.279"></a>
-<span class="sourceLineNo">280</span> private Path sidelineDir = null;<a name="line.280"></a>
+<span class="sourceLineNo">154</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hbase.thirdparty.com.google.common.collect.Multimap;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hbase.thirdparty.com.google.common.collect.Ordering;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hbase.thirdparty.com.google.common.collect.TreeMultimap;<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>/**<a name="line.165"></a>
+<span class="sourceLineNo">166</span> * HBaseFsck (hbck) is a tool for checking and repairing region consistency and<a name="line.166"></a>
+<span class="sourceLineNo">167</span> * table integrity problems in a corrupted HBase.<a name="line.167"></a>
+<span class="sourceLineNo">168</span> * <p><a name="line.168"></a>
+<span class="sourceLineNo">169</span> * Region consistency checks verify that hbase:meta, region deployment on region<a name="line.169"></a>
+<span class="sourceLineNo">170</span> * servers and the state of data in HDFS (.regioninfo files) all are in<a name="line.170"></a>
+<span class="sourceLineNo">171</span> * accordance.<a name="line.171"></a>
+<span class="sourceLineNo">172</span> * <p><a name="line.172"></a>
+<span class="sourceLineNo">173</span> * Table integrity checks verify that all possible row keys resolve to exactly<a name="line.173"></a>
+<span class="sourceLineNo">174</span> * one region of a table. This means there are no individual degenerate<a name="line.174"></a>
+<span class="sourceLineNo">175</span> * or backwards regions; no holes between regions; and that there are no<a name="line.175"></a>
+<span class="sourceLineNo">176</span> * overlapping regions.<a name="line.176"></a>
+<span class="sourceLineNo">177</span> * <p><a name="line.177"></a>
+<span class="sourceLineNo">178</span> * The general repair strategy works in two phases:<a name="line.178"></a>
+<span class="sourceLineNo">179</span> * <ol><a name="line.179"></a>
+<span class="sourceLineNo">180</span> * <li> Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * <li> Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * </ol><a name="line.182"></a>
+<span class="sourceLineNo">183</span> * <p><a name="line.183"></a>
+<span class="sourceLineNo">184</span> * For table integrity repairs, the tables' region directories are scanned<a name="line.184"></a>
+<span class="sourceLineNo">185</span> * for .regioninfo files. Each table's integrity is then verified. If there<a name="line.185"></a>
+<span class="sourceLineNo">186</span> * are any orphan regions (regions with no .regioninfo files) or holes, new<a name="line.186"></a>
+<span class="sourceLineNo">187</span> * regions are fabricated. Backwards regions are sidelined as well as empty<a name="line.187"></a>
+<span class="sourceLineNo">188</span> * degenerate (endkey==startkey) regions. If there are any overlapping regions,<a name="line.188"></a>
+<span class="sourceLineNo">189</span> * a new region is created and all data is merged into the new region.<a name="line.189"></a>
+<span class="sourceLineNo">190</span> * <p><a name="line.190"></a>
+<span class="sourceLineNo">191</span> * Table integrity repairs deal solely with HDFS and could potentially be done<a name="line.191"></a>
+<span class="sourceLineNo">192</span> * offline -- the hbase region servers or master do not need to be running.<a name="line.192"></a>
+<span class="sourceLineNo">193</span> * This phase can eventually be used to completely reconstruct the hbase:meta table in<a name="line.193"></a>
+<span class="sourceLineNo">194</span> * an offline fashion.<a name="line.194"></a>
+<span class="sourceLineNo">195</span> * <p><a name="line.195"></a>
+<span class="sourceLineNo">196</span> * Region consistency requires three conditions -- 1) valid .regioninfo file<a name="line.196"></a>
+<span class="sourceLineNo">197</span> * present in an HDFS region dir, 2) valid row with .regioninfo data in META,<a name="line.197"></a>
+<span class="sourceLineNo">198</span> * and 3) a region is deployed only at the regionserver that was assigned to<a name="line.198"></a>
+<span class="sourceLineNo">199</span> * with proper state in the master.<a name="line.199"></a>
+<span class="sourceLineNo">200</span> * <p><a name="line.200"></a>
+<span class="sourceLineNo">201</span> * Region consistency repairs require hbase to be online so that hbck can<a name="line.201"></a>
+<span class="sourceLineNo">202</span> * contact the HBase master and region servers. The hbck#connect() method must<a name="line.202"></a>
+<span class="sourceLineNo">203</span> * first be called successfully. Much of the region consistency information<a name="line.203"></a>
+<span class="sourceLineNo">204</span> * is transient and less risky to repair.<a name="line.204"></a>
+<span class="sourceLineNo">205</span> * <p><a name="line.205"></a>
+<span class="sourceLineNo">206</span> * If hbck is run from the command line, there are a handful of arguments that<a name="line.206"></a>
+<span class="sourceLineNo">207</span> * can be used to limit the kinds of repairs hbck will do. See the code in<a name="line.207"></a>
+<span class="sourceLineNo">208</span> * {@link #printUsageAndExit()} for more details.<a name="line.208"></a>
+<span class="sourceLineNo">209</span> */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.210"></a>
+<span class="sourceLineNo">211</span>@InterfaceStability.Evolving<a name="line.211"></a>
+<span class="sourceLineNo">212</span>public class HBaseFsck extends Configured implements Closeable {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> public static final long DEFAULT_TIME_LAG = 60000; // default value of 1 minute<a name="line.213"></a>
+<span class="sourceLineNo">214</span> public static final long DEFAULT_SLEEP_BEFORE_RERUN = 10000;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> private static final int MAX_NUM_THREADS = 50; // #threads to contact regions<a name="line.215"></a>
+<span class="sourceLineNo">216</span> private static boolean rsSupportsOffline = true;<a name="line.216"></a>
+<span class="sourceLineNo">217</span> private static final int DEFAULT_OVERLAPS_TO_SIDELINE = 2;<a name="line.217"></a>
+<span class="sourceLineNo">218</span> private static final int DEFAULT_MAX_MERGE = 5;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> private static final String TO_BE_LOADED = "to_be_loaded";<a name="line.219"></a>
+<span class="sourceLineNo">220</span> private static final String HBCK_LOCK_FILE = "hbase-hbck.lock";<a name="line.220"></a>
+<span class="sourceLineNo">221</span> private static final int DEFAULT_MAX_LOCK_FILE_ATTEMPTS = 5;<a name="line.221"></a>
+<span class="sourceLineNo">222</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.222"></a>
+<span class="sourceLineNo">223</span> private static final int DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // We have to set the timeout value > HdfsConstants.LEASE_SOFTLIMIT_PERIOD.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // In HADOOP-2.6 and later, the Namenode proxy now created with custom RetryPolicy for<a name="line.225"></a>
+<span class="sourceLineNo">226</span> // AlreadyBeingCreatedException which is implies timeout on this operations up to<a name="line.226"></a>
+<span class="sourceLineNo">227</span> // HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).<a name="line.227"></a>
+<span class="sourceLineNo">228</span> private static final int DEFAULT_WAIT_FOR_LOCK_TIMEOUT = 80; // seconds<a name="line.228"></a>
+<span class="sourceLineNo">229</span> private static final int DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS = 5;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL = 200; // milliseconds<a name="line.230"></a>
+<span class="sourceLineNo">231</span> private static final int DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME = 5000; // milliseconds<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**********************<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Internal resources<a name="line.234"></a>
+<span class="sourceLineNo">235</span> **********************/<a name="line.235"></a>
+<span class="sourceLineNo">236</span> private static final Logger LOG = LoggerFactory.getLogger(HBaseFsck.class.getName());<a name="line.236"></a>
+<span class="sourceLineNo">237</span> private ClusterMetrics status;<a name="line.237"></a>
+<span class="sourceLineNo">238</span> private ClusterConnection connection;<a name="line.238"></a>
+<span class="sourceLineNo">239</span> private Admin admin;<a name="line.239"></a>
+<span class="sourceLineNo">240</span> private Table meta;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // threads to do ||izable tasks: retrieve data from regionservers, handle overlapping regions<a name="line.241"></a>
+<span class="sourceLineNo">242</span> protected ExecutorService executor;<a name="line.242"></a>
+<span class="sourceLineNo">243</span> private long startMillis = EnvironmentEdgeManager.currentTime();<a name="line.243"></a>
+<span class="sourceLineNo">244</span> private HFileCorruptionChecker hfcc;<a name="line.244"></a>
+<span class="sourceLineNo">245</span> private int retcode = 0;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> private Path HBCK_LOCK_PATH;<a name="line.246"></a>
+<span class="sourceLineNo">247</span> private FSDataOutputStream hbckOutFd;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> // This lock is to prevent cleanup of balancer resources twice between<a name="line.248"></a>
+<span class="sourceLineNo">249</span> // ShutdownHook and the main code. We cleanup only if the connect() is<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // successful<a name="line.250"></a>
+<span class="sourceLineNo">251</span> private final AtomicBoolean hbckLockCleanup = new AtomicBoolean(false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Unsupported options in HBase 2.0+<a name="line.253"></a>
+<span class="sourceLineNo">254</span> private static final Set<String> unsupportedOptionsInV2 = Sets.newHashSet("-fix",<a name="line.254"></a>
+<span class="sourceLineNo">255</span> "-fixAssignments", "-fixMeta", "-fixHdfsHoles", "-fixHdfsOrphans", "-fixTableOrphans",<a name="line.255"></a>
+<span class="sourceLineNo">256</span> "-fixHdfsOverlaps", "-sidelineBigOverlaps", "-fixSplitParents", "-removeParents",<a name="line.256"></a>
+<span class="sourceLineNo">257</span> "-fixEmptyMetaCells", "-repair", "-repairHoles", "-maxOverlapsToSideline", "-maxMerge");<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span> /***********<a name="line.259"></a>
+<span class="sourceLineNo">260</span> * Options<a name="line.260"></a>
+<span class="sourceLineNo">261</span> ***********/<a name="line.261"></a>
+<span class="sourceLineNo">262</span> private static boolean details = false; // do we display the full report<a name="line.262"></a>
+<span class="sourceLineNo">263</span> private long timelag = DEFAULT_TIME_LAG; // tables whose modtime is older<a name="line.263"></a>
+<span class="sourceLineNo">264</span> private static boolean forceExclusive = false; // only this hbck can modify HBase<a name="line.264"></a>
+<span class="sourceLineNo">265</span> private boolean fixAssignments = false; // fix assignment errors?<a name="line.265"></a>
+<span class="sourceLineNo">266</span> private boolean fixMeta = false; // fix meta errors?<a name="line.266"></a>
+<span class="sourceLineNo">267</span> private boolean checkHdfs = true; // load and check fs consistency?<a name="line.267"></a>
+<span class="sourceLineNo">268</span> private boolean fixHdfsHoles = false; // fix fs holes?<a name="line.268"></a>
+<span class="sourceLineNo">269</span> private boolean fixHdfsOverlaps = false; // fix fs overlaps (risky)<a name="line.269"></a>
+<span class="sourceLineNo">270</span> private boolean fixHdfsOrphans = false; // fix fs holes (missing .regioninfo)<a name="line.270"></a>
+<span class="sourceLineNo">271</span> private boolean fixTableOrphans = false; // fix fs holes (missing .tableinfo)<a name="line.271"></a>
+<span class="sourceLineNo">272</span> private boolean fixVersionFile = false; // fix missing hbase.version file in hdfs<a name="line.272"></a>
+<span class="sourceLineNo">273</span> private boolean fixSplitParents = false; // fix lingering split parents<a name="line.273"></a>
+<span class="sourceLineNo">274</span> private boolean removeParents = false; // remove split parents<a name="line.274"></a>
+<span class="sourceLineNo">275</span> private boolean fixReferenceFiles = false; // fix lingering reference store file<a name="line.275"></a>
+<span class="sourceLineNo">276</span> private boolean fixHFileLinks = false; // fix lingering HFileLinks<a name="line.276"></a>
+<span class="sourceLineNo">277</span> private boolean fixEmptyMetaCells = false; // fix (remove) empty REGIONINFO_QUALIFIER rows<a name="line.277"></a>
+<span class="sourceLineNo">278</span> private boolean fixReplication = false; // fix undeleted replication queues for removed peer<a name="line.278"></a>
+<span class="sourceLineNo">279</span> private boolean cleanReplicationBarrier = false; // clean replication barriers of a table<a name="line.279"></a>
+<span class="sourceLineNo">280</span> private boolean fixAny = false; // Set to true if any of the fix is required.<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.282"></a>
-<span class="sourceLineNo">283</span> private static boolean summary = false; // if we want to print less output<a name="line.283"></a>
-<span class="sourceLineNo">284</span> private boolean checkMetaOnly = false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> private boolean checkRegionBoundaries = false;<a name="line.285"></a>
-<span class="sourceLineNo">286</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span> /*********<a name="line.288"></a>
-<span class="sourceLineNo">289</span> * State<a name="line.289"></a>
-<span class="sourceLineNo">290</span> *********/<a name="line.290"></a>
-<span class="sourceLineNo">291</span> final private ErrorReporter errors;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> int fixes = 0;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.295"></a>
-<span class="sourceLineNo">296</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.296"></a>
-<span class="sourceLineNo">297</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.297"></a>
-<span class="sourceLineNo">298</span> */<a name="line.298"></a>
-<span class="sourceLineNo">299</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.300"></a>
-<span class="sourceLineNo">301</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.304"></a>
-<span class="sourceLineNo">305</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.305"></a>
-<span class="sourceLineNo">306</span> * to prevent dupes.<a name="line.306"></a>
-<span class="sourceLineNo">307</span> *<a name="line.307"></a>
-<span class="sourceLineNo">308</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.308"></a>
-<span class="sourceLineNo">309</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.309"></a>
-<span class="sourceLineNo">310</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.310"></a>
-<span class="sourceLineNo">311</span> * the meta table<a name="line.311"></a>
-<span class="sourceLineNo">312</span> */<a name="line.312"></a>
-<span class="sourceLineNo">313</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span> /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.316"></a>
-<span class="sourceLineNo">317</span> */<a name="line.317"></a>
-<span class="sourceLineNo">318</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.320"></a>
-<span class="sourceLineNo">321</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.322"></a>
-<span class="sourceLineNo">323</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.323"></a>
+<span class="sourceLineNo">282</span> // limit checking/fixes to listed tables, if empty attempt to check/fix all<a name="line.282"></a>
+<span class="sourceLineNo">283</span> // hbase:meta are always checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span> private Set<TableName> tablesIncluded = new HashSet<>();<a name="line.284"></a>
+<span class="sourceLineNo">285</span> private TableName cleanReplicationBarrierTable;<a name="line.285"></a>
+<span class="sourceLineNo">286</span> private int maxMerge = DEFAULT_MAX_MERGE; // maximum number of overlapping regions to merge<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // maximum number of overlapping regions to sideline<a name="line.287"></a>
+<span class="sourceLineNo">288</span> private int maxOverlapsToSideline = DEFAULT_OVERLAPS_TO_SIDELINE;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> private boolean sidelineBigOverlaps = false; // sideline overlaps with >maxMerge regions<a name="line.289"></a>
+<span class="sourceLineNo">290</span> private Path sidelineDir = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> private boolean rerun = false; // if we tried to fix something, rerun hbck<a name="line.292"></a>
+<span class="sourceLineNo">293</span> private static boolean summary = false; // if we want to print less output<a name="line.293"></a>
+<span class="sourceLineNo">294</span> private boolean checkMetaOnly = false;<a name="line.294"></a>
+<span class="sourceLineNo">295</span> private boolean checkRegionBoundaries = false;<a name="line.295"></a>
+<span class="sourceLineNo">296</span> private boolean ignorePreCheckPermission = false; // if pre-check permission<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span> /*********<a name="line.298"></a>
+<span class="sourceLineNo">299</span> * State<a name="line.299"></a>
+<span class="sourceLineNo">300</span> *********/<a name="line.300"></a>
+<span class="sourceLineNo">301</span> final private ErrorReporter errors;<a name="line.301"></a>
+<span class="sourceLineNo">302</span> int fixes = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span> /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span> * This map contains the state of all hbck items. It maps from encoded region<a name="line.305"></a>
+<span class="sourceLineNo">306</span> * name to HbckInfo structure. The information contained in HbckInfo is used<a name="line.306"></a>
+<span class="sourceLineNo">307</span> * to detect and correct consistency (hdfs/meta/deployment) problems.<a name="line.307"></a>
+<span class="sourceLineNo">308</span> */<a name="line.308"></a>
+<span class="sourceLineNo">309</span> private TreeMap<String, HbckInfo> regionInfoMap = new TreeMap<>();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> // Empty regioninfo qualifiers in hbase:meta<a name="line.310"></a>
+<span class="sourceLineNo">311</span> private Set<Result> emptyRegionInfoQualifiers = new HashSet<>();<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span> /**<a name="line.313"></a>
+<span class="sourceLineNo">314</span> * This map from Tablename -> TableInfo contains the structures necessary to<a name="line.314"></a>
+<span class="sourceLineNo">315</span> * detect table consistency problems (holes, dupes, overlaps). It is sorted<a name="line.315"></a>
+<span class="sourceLineNo">316</span> * to prevent dupes.<a name="line.316"></a>
+<span class="sourceLineNo">317</span> *<a name="line.317"></a>
+<span class="sourceLineNo">318</span> * If tablesIncluded is empty, this map contains all tables.<a name="line.318"></a>
+<span class="sourceLineNo">319</span> * Otherwise, it contains only meta tables and tables in tablesIncluded,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> * unless checkMetaOnly is specified, in which case, it contains only<a name="line.320"></a>
+<span class="sourceLineNo">321</span> * the meta table<a name="line.321"></a>
+<span class="sourceLineNo">322</span> */<a name="line.322"></a>
+<span class="sourceLineNo">323</span> private SortedMap<TableName, TableInfo> tablesInfo = new ConcurrentSkipListMap<>();<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> private ZKWatcher zkw = null;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> private String hbckEphemeralNodePath = null;<a name="line.328"></a>
-<span class="sourceLineNo">329</span> private boolean hbckZodeCreated = false;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span> * Constructor<a name="line.332"></a>
-<span class="sourceLineNo">333</span> *<a name="line.333"></a>
-<span class="sourceLineNo">334</span> * @param conf Configuration object<a name="line.334"></a>
-<span class="sourceLineNo">335</span> * @throws MasterNotRunningException if the master is not running<a name="line.335"></a>
-<span class="sourceLineNo">336</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.336"></a>
-<span class="sourceLineNo">337</span> */<a name="line.337"></a>
-<span class="sourceLineNo">338</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.338"></a>
-<span class="sourceLineNo">339</span> this(conf, createThreadPool(conf));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.343"></a>
-<span class="sourceLineNo">344</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<a name="line.344"></a>
-<span class="sourceLineNo">345</span> }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span> /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span> * Constructor<a name="line.348"></a>
-<span class="sourceLineNo">349</span> *<a name="line.349"></a>
-<span class="sourceLineNo">350</span> * @param conf<a name="line.350"></a>
-<span class="sourceLineNo">351</span> * Configuration object<a name="line.351"></a>
-<span class="sourceLineNo">352</span> * @throws MasterNotRunningException<a name="line.352"></a>
-<span class="sourceLineNo">353</span> * if the master is not running<a name="line.353"></a>
-<span class="sourceLineNo">354</span> * @throws ZooKeeperConnectionException<a name="line.354"></a>
-<span class="sourceLineNo">355</span> * if unable to connect to ZooKeeper<a name="line.355"></a>
-<span class="sourceLineNo">356</span> */<a name="line.356"></a>
-<span class="sourceLineNo">357</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.357"></a>
-<span class="sourceLineNo">358</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> super(conf);<a name="line.359"></a>
-<span class="sourceLineNo">360</span> errors = getErrorReporter(getConf());<a name="line.360"></a>
-<span class="sourceLineNo">361</span> this.executor = exec;<a name="line.361"></a>
-<span class="sourceLineNo">362</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.362"></a>
-<span class="sourceLineNo">363</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.363"></a>
-<span class="sourceLineNo">364</span> getConf().getInt(<a name="line.364"></a>
-<span class="sourceLineNo">365</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.365"></a>
-<span class="sourceLineNo">366</span> getConf().getInt(<a name="line.366"></a>
-<span class="sourceLineNo">367</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.367"></a>
-<span class="sourceLineNo">368</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.368"></a>
-<span class="sourceLineNo">369</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.369"></a>
-<span class="sourceLineNo">370</span> getConf().getInt(<a name="line.370"></a>
-<span class="sourceLineNo">371</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.371"></a>
-<span class="sourceLineNo">372</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> getConf().getInt(<a name="line.373"></a>
-<span class="sourceLineNo">374</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.374"></a>
-<span class="sourceLineNo">375</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.375"></a>
-<span class="sourceLineNo">376</span> zkw = createZooKeeperWatcher();<a name="line.376"></a>
-<span class="sourceLineNo">377</span> }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.379"></a>
-<span class="sourceLineNo">380</span> RetryCounter retryCounter;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span> this.retryCounter = retryCounter;<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span> @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span> public FSDataOutputStream call() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> try {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> FileSystem fs = FSUtils.getCurrentFileSystem(getConf());<a name="line.388"></a>
-<span class="sourceLineNo">389</span> FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(),<a name="line.389"></a>
-<span class="sourceLineNo">390</span> HConstants.DATA_FILE_UMASK_KEY);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> Path tmpDir = new Path(FSUtils.getRootDir(getConf()), HConstants.HBASE_TEMP_DIRECTORY);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> fs.mkdirs(tmpDir);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> HBCK_LOCK_PATH = new Path(tmpDir, HBCK_LOCK_FILE);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> final FSDataOutputStream out = createFileWithRetries(fs, HBCK_LOCK_PATH, defaultPerms);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> out.writeBytes(InetAddress.getLocalHost().toString());<a name="line.395"></a>
-<span class="sourceLineNo">396</span> out.flush();<a name="line.396"></a>
-<span class="sourceLineNo">397</span> return out;<a name="line.397"></a>
-<span class="sourceLineNo">398</span> } catch(RemoteException e) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> if(AlreadyBeingCreatedException.class.getName().equals(e.getClassName())){<a name="line.399"></a>
-<span class="sourceLineNo">400</span> return null;<a name="line.400"></a>
-<span class="sourceLineNo">401</span> } else {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> throw e;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<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> private FSDataOutputStream createFileWithRetries(final FileSystem fs,<a name="line.407"></a>
-<span class="sourceLineNo">408</span> final Path hbckLockFilePath, final FsPermission defaultPerms)<a name="line.408"></a>
-<span class="sourceLineNo">409</span> throws IOException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span> IOException exception = null;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> do {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span> return FSUtils.create(fs, hbckLockFilePath, defaultPerms, false);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } catch (IOException ioe) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> LOG.info("Failed to create lock file " + hbckLockFilePath.getName()<a name="line.416"></a>
-<span class="sourceLineNo">417</span> + ", try=" + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.417"></a>
-<span class="sourceLineNo">418</span> + retryCounter.getMaxAttempts());<a name="line.418"></a>
-<span class="sourceLineNo">419</span> LOG.debug("Failed to create lock file " + hbckLockFilePath.getName(),<a name="line.419"></a>
-<span class="sourceLineNo">420</span> ioe);<a name="line.420"></a>
-<span class="sourceLineNo">421</span> try {<a name="line.421"></a>
-<span class="sourceLineNo">422</span> exception = ioe;<a name="line.422"></a>
-<span class="sourceLineNo">423</span> retryCounter.sleepUntilNextRetry();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> } catch (InterruptedException ie) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span> throw (InterruptedIOException) new InterruptedIOException(<a name="line.425"></a>
-<span class="sourceLineNo">426</span> "Can't create lock file " + hbckLockFilePath.getName())<a name="line.426"></a>
-<span class="sourceLineNo">427</span> .initCause(ie);<a name="line.427"></a>
-<span class="sourceLineNo">428</span> }<a name="line.428"></a>
-<span class="sourceLineNo">429</span> }<a name="line.429"></a>
-<span class="sourceLineNo">430</span> } while (retryCounter.shouldRetry());<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> throw exception;<a name="line.432"></a>
-<span class="sourceLineNo">433</span> }<a name="line.433"></a>
-<span class="sourceLineNo">434</span> }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span> /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span> * This method maintains a lock using a file. If the creation fails we return null<a name="line.437"></a>
-<span class="sourceLineNo">438</span> *<a name="line.438"></a>
-<span class="sourceLineNo">439</span> * @return FSDataOutputStream object corresponding to the newly opened lock file<a name="line.439"></a>
-<span class="sourceLineNo">440</span> * @throws IOException if IO failure occurs<a name="line.440"></a>
-<span class="sourceLineNo">441</span> */<a name="line.441"></a>
-<span class="sourceLineNo">442</span> private FSDataOutputStream checkAndMarkRunningHbck() throws IOException {<a name="line.442"></a>
-<span class="sourceLineNo">443</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.443"></a>
-<span class="sourceLineNo">444</span> FileLockCallable callable = new FileLockCallable(retryCounter);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> FutureTask<FSDataOutputStream> futureTask = new FutureTask<>(callable);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> executor.execute(futureTask);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> final int timeoutInSeconds = getConf().getInt(<a name="line.448"></a>
-<span class="sourceLineNo">449</span> "hbase.hbck.lockfile.maxwaittime", DEFAULT_WAIT_FOR_LOCK_TIMEOUT);<a name="line.449"></a>
-<span class="sourceLineNo">450</span> FSDataOutputStream stream = null;<a name="line.450"></a>
-<span class="sourceLineNo">451</span> try {<a name="line.451"></a>
-<span class="sourceLineNo">452</span> stream = futureTask.get(timeoutInSeconds, TimeUnit.SECONDS);<a name="line.452"></a>
-<span class="sourceLineNo">453</span> } catch (ExecutionException ee) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.warn("Encountered exception when opening lock file", ee);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> } catch (InterruptedException ie) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span> LOG.warn("Interrupted when opening lock file", ie);<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Thread.currentThread().interrupt();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> } catch (TimeoutException exception) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> // took too long to obtain lock<a name="line.459"></a>
-<span class="sourceLineNo">460</span> LOG.warn("Took more than " + timeoutInSeconds + " seconds in obtaining lock");<a name="line.460"></a>
-<span class="sourceLineNo">461</span> futureTask.cancel(true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> } finally {<a name="line.462"></a>
-<span class="sourceLineNo">463</span> executor.shutdownNow();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> return stream;<a name="line.465"></a>
-<span class="sourceLineNo">466</span> }<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span> private void unlockHbck() {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> if (isExclusive() && hbckLockCleanup.compareAndSet(true, false)) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RetryCounter retryCounter = lockFileRetryCounterFactory.create();<a name="line.470"></a>
-<span class="sourceLineNo">471</span> do {<a name="line.471"></a>
-<span class="sourceLineNo">472</span> try {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> IOUtils.closeQuietly(hbckOutFd);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> FSUtils.delete(FSUtils.getCurrentFileSystem(getConf()),<a name="line.474"></a>
-<span class="sourceLineNo">475</span> HBCK_LOCK_PATH, true);<a name="line.475"></a>
-<span class="sourceLineNo">476</span> LOG.info("Finishing hbck");<a name="line.476"></a>
-<span class="sourceLineNo">477</span> return;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> } catch (IOException ioe) {<a name="line.478"></a>
-<span class="sourceLineNo">479</span> LOG.info("Failed to delete " + HBCK_LOCK_PATH + ", try="<a name="line.479"></a>
-<span class="sourceLineNo">480</span> + (retryCounter.getAttemptTimes() + 1) + " of "<a name="line.480"></a>
-<span class="sourceLineNo">481</span> + retryCounter.getMaxAttempts());<a name="line.481"></a>
-<span class="sourceLineNo">482</span> LOG.debug("Failed to delete " + HBCK_LOCK_PATH, ioe);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span> retryCounter.sleepUntilNextRetry();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> } catch (InterruptedException ie) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span> Thread.currentThread().interrupt();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> LOG.warn("Interrupted while deleting lock file" +<a name="line.487"></a>
-<span class="sourceLineNo">488</span> HBCK_LOCK_PATH);<a name="line.488"></a>
-<span class="sourceLineNo">489</span> return;<a name="line.489"></a>
-<span class="sourceLineNo">490</span> }<a name="line.490"></a>
-<span class="sourceLineNo">491</span> }<a name="line.491"></a>
-<span class="sourceLineNo">492</span> } while (retryCounter.shouldRetry());<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> * To repair region consistency, one must call connect() in order to repair<a name="line.497"></a>
-<span class="sourceLineNo">498</span> * online state.<a name="line.498"></a>
-<span class="sourceLineNo">499</span> */<a name="line.499"></a>
-<span class="sourceLineNo">500</span> public void connect() throws IOException {<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span> if (isExclusive()) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Grab the lock<a name="line.503"></a>
-<span class="sourceLineNo">504</span> hbckOutFd = checkAndMarkRunningHbck();<a name="line.504"></a>
-<span class="sourceLineNo">505</span> if (hbckOutFd == null) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span> setRetCode(-1);<a name="line.506"></a>
-<span class="sourceLineNo">507</span> LOG.error("Another instance of hbck is fixing HBase, exiting this instance. " +<a name="line.507"></a>
-<span class="sourceLineNo">508</span> "[If you are sure no other instance is running, delete the lock file " +<a name="line.508"></a>
-<span class="sourceLineNo">509</span> HBCK_LOCK_PATH + " and rerun the tool]");<a name="line.509"></a>
-<span class="sourceLineNo">510</span> throw new IOException("Duplicate hbck - Abort");<a name="line.510"></a>
-<span class="sourceLineNo">511</span> }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span> // Make sure to cleanup the lock<a name="line.513"></a>
-<span class="sourceLineNo">514</span> hbckLockCleanup.set(true);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> }<a name="line.515"></a>
-<span class="sourceLineNo">516</span><a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span> // Add a shutdown hook to this thread, in case user tries to<a name="line.518"></a>
-<span class="sourceLineNo">519</span> // kill the hbck with a ctrl-c, we want to cleanup the lock so that<a name="line.519"></a>
-<span class="sourceLineNo">520</span> // it is available for further calls<a name="line.520"></a>
-<span class="sourceLineNo">521</span> Runtime.getRuntime().addShutdownHook(new Thread() {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> @Override<a name="line.522"></a>
-<span class="sourceLineNo">523</span> public void run() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span> IOUtils.closeQuietly(HBaseFsck.this);<a name="line.524"></a>
-<span class="sourceLineNo">525</span> cleanupHbckZnode();<a name="line.525"></a>
-<span class="sourceLineNo">526</span> unlockHbck();<a name="line.526"></a>
-<span class="sourceLineNo">527</span> }<a name="line.527"></a>
-<span class="sourceLineNo">528</span> });<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> LOG.info("Launching hbck");<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span> connection = (ClusterConnection)ConnectionFactory.createConnection(getConf());<a name="line.532"></a>
-<span class="sourceLineNo">533</span> admin = connection.getAdmin();<a name="line.533"></a>
-<span class="sourceLineNo">534</span> meta = connection.getTable(TableName.META_TABLE_NAME);<a name="line.534"></a>
-<span class="sourceLineNo">535</span> status = admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Option.DEAD_SERVERS, Option.MASTER, Option.BACKUP_MASTERS,<a name="line.536"></a>
-<span class="sourceLineNo">537</span> Option.REGIONS_IN_TRANSITION, Option.HBASE_VERSION));<a name="line.537"></a>
-<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">325</span> /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span> * When initially looking at HDFS, we attempt to find any orphaned data.<a name="line.326"></a>
+<span class="sourceLineNo">327</span> */<a name="line.327"></a>
+<span class="sourceLineNo">328</span> private List<HbckInfo> orphanHdfsDirs = Collections.synchronizedList(new ArrayList<HbckInfo>());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span> private Map<TableName, Set<String>> orphanTableDirs = new HashMap<>();<a name="line.330"></a>
+<span class="sourceLineNo">331</span> private Map<TableName, TableState> tableStates = new HashMap<>();<a name="line.331"></a>
+<span class="sourceLineNo">332</span> private final RetryCounterFactory lockFileRetryCounterFactory;<a name="line.332"></a>
+<span class="sourceLineNo">333</span> private final RetryCounterFactory createZNodeRetryCounterFactory;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span> private Map<TableName, Set<String>> skippedRegions = new HashMap<>();<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> private ZKWatcher zkw = null;<a name="line.337"></a>
+<span class="sourceLineNo">338</span> private String hbckEphemeralNodePath = null;<a name="line.338"></a>
+<span class="sourceLineNo">339</span> private boolean hbckZodeCreated = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span> * Constructor<a name="line.342"></a>
+<span class="sourceLineNo">343</span> *<a name="line.343"></a>
+<span class="sourceLineNo">344</span> * @param conf Configuration object<a name="line.344"></a>
+<span class="sourceLineNo">345</span> * @throws MasterNotRunningException if the master is not running<a name="line.345"></a>
+<span class="sourceLineNo">346</span> * @throws ZooKeeperConnectionException if unable to connect to ZooKeeper<a name="line.346"></a>
+<span class="sourceLineNo">347</span> */<a name="line.347"></a>
+<span class="sourceLineNo">348</span> public HBaseFsck(Configuration conf) throws IOException, ClassNotFoundException {<a name="line.348"></a>
+<span class="sourceLineNo">349</span> this(conf, createThreadPool(conf));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span> private static ExecutorService createThreadPool(Configuration conf) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span> int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS);<a name="line.353"></a>
+<span class="sourceLineNo">354</span> return new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck"));<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> /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span> * Constructor<a name="line.358"></a>
+<span class="sourceLineNo">359</span> *<a name="line.359"></a>
+<span class="sourceLineNo">360</span> * @param conf<a name="line.360"></a>
+<span class="sourceLineNo">361</span> * Configuration object<a name="line.361"></a>
+<span class="sourceLineNo">362</span> * @throws MasterNotRunningException<a name="line.362"></a>
+<span class="sourceLineNo">363</span> * if the master is not running<a name="line.363"></a>
+<span class="sourceLineNo">364</span> * @throws ZooKeeperConnectionException<a name="line.364"></a>
+<span class="sourceLineNo">365</span> * if unable to connect to ZooKeeper<a name="line.365"></a>
+<span class="sourceLineNo">366</span> */<a name="line.366"></a>
+<span class="sourceLineNo">367</span> public HBaseFsck(Configuration conf, ExecutorService exec) throws MasterNotRunningException,<a name="line.367"></a>
+<span class="sourceLineNo">368</span> ZooKeeperConnectionException, IOException, ClassNotFoundException {<a name="line.368"></a>
+<span class="sourceLineNo">369</span> super(conf);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> errors = getErrorReporter(getConf());<a name="line.370"></a>
+<span class="sourceLineNo">371</span> this.executor = exec;<a name="line.371"></a>
+<span class="sourceLineNo">372</span> lockFileRetryCounterFactory = new RetryCounterFactory(<a name="line.372"></a>
+<span class="sourceLineNo">373</span> getConf().getInt("hbase.hbck.lockfile.attempts", DEFAULT_MAX_LOCK_FILE_ATTEMPTS),<a name="line.373"></a>
+<span class="sourceLineNo">374</span> getConf().getInt(<a name="line.374"></a>
+<span class="sourceLineNo">375</span> "hbase.hbck.lockfile.attempt.sleep.interval", DEFAULT_LOCK_FILE_ATTEMPT_SLEEP_INTERVAL),<a name="line.375"></a>
+<span class="sourceLineNo">376</span> getConf().getInt(<a name="line.376"></a>
+<span class="sourceLineNo">377</span> "hbase.hbck.lockfile.attempt.maxsleeptime", DEFAULT_LOCK_FILE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.377"></a>
+<span class="sourceLineNo">378</span> createZNodeRetryCounterFactory = new RetryCounterFactory(<a name="line.378"></a>
+<span class="sourceLineNo">379</span> getConf().getInt("hbase.hbck.createznode.attempts", DEFAULT_MAX_CREATE_ZNODE_ATTEMPTS),<a name="line.379"></a>
+<span class="sourceLineNo">380</span> getConf().getInt(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "hbase.hbck.createznode.attempt.sleep.interval",<a name="line.381"></a>
+<span class="sourceLineNo">382</span> DEFAULT_CREATE_ZNODE_ATTEMPT_SLEEP_INTERVAL),<a name="line.382"></a>
+<span class="sourceLineNo">383</span> getConf().getInt(<a name="line.383"></a>
+<span class="sourceLineNo">384</span> "hbase.hbck.createznode.attempt.maxsleeptime",<a name="line.384"></a>
+<span class="sourceLineNo">385</span> DEFAULT_CREATE_ZNODE_ATTEMPT_MAX_SLEEP_TIME));<a name="line.385"></a>
+<span class="sourceLineNo">386</span> zkw = createZooKeeperWatcher();<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> private class FileLockCallable implements Callable<FSDataOutputStream> {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> RetryCounter retryCounter;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span> public FileLockCallable(RetryCounter retryCounter) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span> this.retryCounter = retryCounter;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Override<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public FSDataOutputStream call() throws IOException {<a name="line.396
<TRUNCATED>
[10/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html
deleted file mode 100644
index adbfc60..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html
+++ /dev/null
@@ -1,757 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
- try {
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface (Apache HBase 3.0.0-SNAPSHOT Test API)";
- }
- }
- catch(err) {
- }
-//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" target="_top">Frames</a></li>
-<li><a href="TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_top");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary: </li>
-<li>Nested | </li>
-<li><a href="#field.summary">Field</a> | </li>
-<li><a href="#constructor.summary">Constr</a> | </li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail: </li>
-<li><a href="#field.detail">Field</a> | </li>
-<li><a href="#constructor.detail">Constr</a> | </li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!-- -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.replication.regionserver</div>
-<h2 title="Class TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface" class="title">Class TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.replication.regionserver.TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>All Implemented Interfaces:</dt>
-<dd>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</dd>
-</dl>
-<dl>
-<dt>Enclosing class:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest</a></dd>
-</dl>
-<hr>
-<br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html#line.319">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface</a>
-extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
-implements org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!-- -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#delegate">delegate</a></span></code> </td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#failNext">failNext</a></span></code> </td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!-- -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#FailureInjectingBlockingInterface-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-">FailureInjectingBlockingInterface</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface delegate)</code> </td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!-- -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#clearCompactionQueues-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest-">clearCompactionQueues</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest request)</code> </td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#clearRegionBlockCache-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest-">clearRegionBlockCache</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest request)</code> </td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#closeRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest-">closeRegion</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest request)</code> </td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#compactRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest-">compactRegion</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest request)</code> </td>
-</tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#executeProcedures-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest-">executeProcedures</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest request)</code> </td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#flushRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest-">flushRegion</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest request)</code> </td>
-</tr>
-<tr id="i6" class="altColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#getOnlineRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest-">getOnlineRegion</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest request)</code> </td>
-</tr>
-<tr id="i7" class="rowColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#getRegionInfo-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest-">getRegionInfo</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest request)</code> </td>
-</tr>
-<tr id="i8" class="altColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#getRegionLoad-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest-">getRegionLoad</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest request)</code> </td>
-</tr>
-<tr id="i9" class="rowColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#getServerInfo-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest-">getServerInfo</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest request)</code> </td>
-</tr>
-<tr id="i10" class="altColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#getSpaceQuotaSnapshots-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest-">getSpaceQuotaSnapshots</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest request)</code> </td>
-</tr>
-<tr id="i11" class="rowColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#getStoreFile-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest-">getStoreFile</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest request)</code> </td>
-</tr>
-<tr id="i12" class="altColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#openRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest-">openRegion</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest request)</code> </td>
-</tr>
-<tr id="i13" class="rowColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#replay-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest-">replay</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest request)</code> </td>
-</tr>
-<tr id="i14" class="altColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#replicateWALEntry-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest-">replicateWALEntry</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest request)</code> </td>
-</tr>
-<tr id="i15" class="rowColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#rollWALWriter-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest-">rollWALWriter</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest request)</code> </td>
-</tr>
-<tr id="i16" class="altColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#stopServer-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest-">stopServer</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest request)</code> </td>
-</tr>
-<tr id="i17" class="rowColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#updateConfiguration-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest-">updateConfiguration</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest request)</code> </td>
-</tr>
-<tr id="i18" class="altColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#updateFavoredNodes-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest-">updateFavoredNodes</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest request)</code> </td>
-</tr>
-<tr id="i19" class="rowColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#warmupRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest-">warmupRegion</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest request)</code> </td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!-- -->
-</a>
-<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!-- -->
-</a>
-<h3>Field Detail</h3>
-<a name="delegate">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>delegate</h4>
-<pre>private final org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.321">delegate</a></pre>
-</li>
-</ul>
-<a name="failNext">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>failNext</h4>
-<pre>private volatile boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.322">failNext</a></pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!-- -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="FailureInjectingBlockingInterface-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>FailureInjectingBlockingInterface</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.324">FailureInjectingBlockingInterface</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface delegate)</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!-- -->
-</a>
-<h3>Method Detail</h3>
-<a name="getRegionInfo-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getRegionInfo</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.329">getRegionInfo</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>getRegionInfo</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="getStoreFile-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getStoreFile</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.335">getStoreFile</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>getStoreFile</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="getOnlineRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getOnlineRegion</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.341">getOnlineRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>getOnlineRegion</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="openRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>openRegion</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.347">openRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>openRegion</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="warmupRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>warmupRegion</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.353">warmupRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>warmupRegion</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="closeRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>closeRegion</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.359">closeRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>closeRegion</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="flushRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>flushRegion</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.365">flushRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>flushRegion</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="compactRegion-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>compactRegion</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.371">compactRegion</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>compactRegion</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="replicateWALEntry-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>replicateWALEntry</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.377">replicateWALEntry</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>replicateWALEntry</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="replay-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>replay</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.389">replay</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>replay</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="rollWALWriter-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>rollWALWriter</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.395">rollWALWriter</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>rollWALWriter</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="getServerInfo-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getServerInfo</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.401">getServerInfo</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>getServerInfo</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="stopServer-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>stopServer</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.407">stopServer</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>stopServer</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="updateFavoredNodes-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>updateFavoredNodes</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.413">updateFavoredNodes</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>updateFavoredNodes</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="updateConfiguration-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>updateConfiguration</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.419">updateConfiguration</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>updateConfiguration</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="getRegionLoad-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getRegionLoad</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.425">getRegionLoad</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>getRegionLoad</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="clearCompactionQueues-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>clearCompactionQueues</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.431">clearCompactionQueues</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>clearCompactionQueues</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="getSpaceQuotaSnapshots-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getSpaceQuotaSnapshots</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.437">getSpaceQuotaSnapshots</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>getSpaceQuotaSnapshots</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="executeProcedures-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>executeProcedures</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.443">executeProcedures</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>executeProcedures</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-<a name="clearRegionBlockCache-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest-">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>clearRegionBlockCache</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheResponse <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html#line.450">clearRegionBlockCache</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest request)
- throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>clearRegionBlockCache</code> in interface <code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</code></dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" target="_top">Frames</a></li>
-<li><a href="TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_bottom");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary: </li>
-<li>Nested | </li>
-<li><a href="#field.summary">Field</a> | </li>
-<li><a href="#constructor.summary">Constr</a> | </li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail: </li>
-<li><a href="#field.detail">Field</a> | </li>
-<li><a href="#constructor.detail">Constr</a> | </li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!-- -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html
deleted file mode 100644
index 38a0c42..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html
+++ /dev/null
@@ -1,302 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
- try {
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest (Apache HBase 3.0.0-SNAPSHOT Test API)";
- }
- }
- catch(err) {
- }
-//-->
-var methods = {"i0":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" target="_top">Frames</a></li>
-<li><a href="TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_top");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary: </li>
-<li>Nested | </li>
-<li>Field | </li>
-<li><a href="#constructor.summary">Constr</a> | </li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail: </li>
-<li>Field | </li>
-<li><a href="#constructor.detail">Constr</a> | </li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!-- -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.replication.regionserver</div>
-<h2 title="Class TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest" class="title">Class TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver.TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.replication.regionserver.TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></dd>
-</dl>
-<dl>
-<dt>Enclosing class:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest</a></dd>
-</dl>
-<hr>
-<br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html#line.456">TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest</a>
-extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</a></pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!-- -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html#FailureInjectingReplicatorForTest-java.util.List-int-">FailureInjectingReplicatorForTest</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
- int ordinal)</code> </td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!-- -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html#replicateEntries-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-java.util.List-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">replicateEntries</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface rrs,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> replicationClusterId,
- org.apache.hadoop.fs.Path baseNamespaceDir,
- org.apache.hadoop.fs.Path hfileArchiveDir)</code> </td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!-- -->
-</a>
-<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!-- -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="FailureInjectingReplicatorForTest-java.util.List-int-">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>FailureInjectingReplicatorForTest</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html#line.458">FailureInjectingReplicatorForTest</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
- int ordinal)</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!-- -->
-</a>
-<h3>Method Detail</h3>
-<a name="replicateEntries-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-java.util.List-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>replicateEntries</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html#line.463">replicateEntries</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface rrs,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><org.apache.hadoop.hbase.wal.WAL.Entry> entries,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> replicationClusterId,
- org.apache.hadoop.fs.Path baseNamespaceDir,
- org.apache.hadoop.fs.Path hfileArchiveDir)
- throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html#replicateEntries-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-java.util.List-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">replicateEntries</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.ReplicationEndpointForTest.ReplicatorForTest</a></code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingBlockingInterface.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" target="_top">Frames</a></li>
-<li><a href="TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_bottom");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary: </li>
-<li>Nested | </li>
-<li>Field | </li>
-<li><a href="#constructor.summary">Constr</a> | </li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail: </li>
-<li>Field | </li>
-<li><a href="#constructor.detail">Constr</a> | </li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!-- -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
[48/51] [partial] hbase-site git commit: Published site at
87f5b5f3411d96c31b4cb61b9a57ced22be91d1f.
Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index f6fc79b..a4ab1b7 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -238,8 +238,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
<ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
</ul>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/BaseReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/BaseReplicationEndpoint.html b/devapidocs/org/apache/hadoop/hbase/replication/BaseReplicationEndpoint.html
index d39649d..bf00494 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/BaseReplicationEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/BaseReplicationEndpoint.html
@@ -361,7 +361,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/replication/Replicati
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - replication context</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - error occur when initialize the endpoint.</dd>
</dl>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/ReplicationEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/ReplicationEndpoint.html b/devapidocs/org/apache/hadoop/hbase/replication/ReplicationEndpoint.html
index 8ae5a0c..9c5f017 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/ReplicationEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/ReplicationEndpoint.html
@@ -288,7 +288,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationP
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>context</code> - replication context</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - error occur when initialize the endpoint.</dd>
</dl>
</li>
</ul>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationEndpoint.ReplicateContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationEndpoint.ReplicateContext.html b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationEndpoint.ReplicateContext.html
index 81f9b08..3d5e841 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationEndpoint.ReplicateContext.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationEndpoint.ReplicateContext.html
@@ -154,10 +154,16 @@
</tr>
<tbody>
<tr class="altColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#parallelReplicate-java.util.concurrent.CompletionService-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-java.util.List-">parallelReplicate</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionService.html?is-external=true" title="class or interface in java.util.concurrent">CompletionService</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>> pool,
+ <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a> replicateContext,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>>> batches)</code> </td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">RegionReplicaReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.html#replicate-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-">replicate</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a> replicateContext)</code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">HBaseInterClusterReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#replicate-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-">replicate</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a> replicateContext)</code>
<div class="block">Do the shipping logic</div>
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/de18d468/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
deleted file mode 100644
index 2c0ca59..0000000
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html
+++ /dev/null
@@ -1,365 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>HBaseInterClusterReplicationEndpoint.Replicator (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
- try {
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="HBaseInterClusterReplicationEndpoint.Replicator (Apache HBase 3.0.0-SNAPSHOT API)";
- }
- }
- catch(err) {
- }
-//-->
-var methods = {"i0":10,"i1":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/HBaseInterClusterReplicationEndpoint.Replicator.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" target="_top">Frames</a></li>
-<li><a href="HBaseInterClusterReplicationEndpoint.Replicator.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_top");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary: </li>
-<li>Nested | </li>
-<li><a href="#field.summary">Field</a> | </li>
-<li><a href="#constructor.summary">Constr</a> | </li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail: </li>
-<li><a href="#field.detail">Field</a> | </li>
-<li><a href="#constructor.detail">Constr</a> | </li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!-- -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.replication.regionserver</div>
-<h2 title="Class HBaseInterClusterReplicationEndpoint.Replicator" class="title">Class HBaseInterClusterReplicationEndpoint.Replicator</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>All Implemented Interfaces:</dt>
-<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></dd>
-</dl>
-<dl>
-<dt>Enclosing class:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dd>
-</dl>
-<hr>
-<br>
-<pre>protected class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.454">HBaseInterClusterReplicationEndpoint.Replicator</a>
-extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
-implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!-- -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#entries">entries</a></span></code> </td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#ordinal">ordinal</a></span></code> </td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!-- -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#Replicator-java.util.List-int-">Replicator</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
- int ordinal)</code> </td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!-- -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#call--">call</a></span>()</code> </td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#replicateEntries-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-java.util.List-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">replicateEntries</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface rrs,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> batch,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> replicationClusterId,
- org.apache.hadoop.fs.Path baseNamespaceDir,
- org.apache.hadoop.fs.Path hfileArchiveDir)</code> </td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!-- -->
-</a>
-<h3>Methods inherited from class java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!-- -->
-</a>
-<h3>Field Detail</h3>
-<a name="entries">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>entries</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.455">entries</a></pre>
-</li>
-</ul>
-<a name="ordinal">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>ordinal</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.456">ordinal</a></pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!-- -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="Replicator-java.util.List-int-">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>Replicator</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.457">Replicator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> entries,
- int ordinal)</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!-- -->
-</a>
-<h3>Method Detail</h3>
-<a name="replicateEntries-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface-java.util.List-java.lang.String-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>replicateEntries</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.462">replicateEntries</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface rrs,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>> batch,
- <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> replicationClusterId,
- org.apache.hadoop.fs.Path baseNamespaceDir,
- org.apache.hadoop.fs.Path hfileArchiveDir)
- throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="call--">
-<!-- -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>call</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#line.490">call</a>()
- throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true#call--" title="class or interface in java.util.concurrent">call</a></code> in interface <code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a><<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>></code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!-- -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!-- -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/HBaseInterClusterReplicationEndpoint.Replicator.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" target="_top">Frames</a></li>
-<li><a href="HBaseInterClusterReplicationEndpoint.Replicator.html" target="_top">No Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
- allClassesLink = document.getElementById("allclasses_navbar_bottom");
- if(window==top) {
- allClassesLink.style.display = "block";
- }
- else {
- allClassesLink.style.display = "none";
- }
- //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary: </li>
-<li>Nested | </li>
-<li><a href="#field.summary">Field</a> | </li>
-<li><a href="#constructor.summary">Constr</a> | </li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail: </li>
-<li><a href="#field.detail">Field</a> | </li>
-<li><a href="#constructor.detail">Constr</a> | </li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!-- -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright © 2007–2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>